From 2651ce83a04966f307115177e7b9b0c717e091aa Mon Sep 17 00:00:00 2001 From: AlexisG Date: Thu, 1 Aug 2024 16:19:26 +0200 Subject: [PATCH] fix: Support executing queries from store The `getCollectionFromSlice` helper expects an object with doctypes as key. However, the method `this.store.getState()` returns a larger object such as `{ cozy: { documents: { [doctype]: ... }, queries: {} }`. In this case, the `client.getCollectionFromState` method is more appropriate. --- docs/api/cozy-client/classes/CozyClient.md | 94 +++++++++--------- packages/cozy-client/src/CozyClient.js | 4 +- packages/cozy-client/src/store/queries.js | 8 +- .../cozy-client/src/store/queries.spec.js | 98 ++++++++++--------- packages/cozy-client/types/store/queries.d.ts | 2 +- 5 files changed, 106 insertions(+), 100 deletions(-) diff --git a/docs/api/cozy-client/classes/CozyClient.md b/docs/api/cozy-client/classes/CozyClient.md index f54ff2199..8e961024e 100644 --- a/docs/api/cozy-client/classes/CozyClient.md +++ b/docs/api/cozy-client/classes/CozyClient.md @@ -83,7 +83,7 @@ Cozy-Client will automatically call `this.login()` if provided with a token and *Defined in* -[packages/cozy-client/src/CozyClient.js:1639](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1639) +[packages/cozy-client/src/CozyClient.js:1637](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1637) *** @@ -199,7 +199,7 @@ Cozy-Client will automatically call `this.login()` if provided with a token and *Defined in* -[packages/cozy-client/src/CozyClient.js:1614](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1614) +[packages/cozy-client/src/CozyClient.js:1612](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1612) *** @@ -209,7 +209,7 @@ Cozy-Client will automatically call `this.login()` if provided with a token and *Defined in* -[packages/cozy-client/src/CozyClient.js:1544](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1544) +[packages/cozy-client/src/CozyClient.js:1542](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1542) *** @@ -239,7 +239,7 @@ Cozy-Client will automatically call `this.login()` if provided with a token and *Defined in* -[packages/cozy-client/src/CozyClient.js:1297](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1297) +[packages/cozy-client/src/CozyClient.js:1295](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1295) *** @@ -353,7 +353,7 @@ Contains the fetched token and the client information. These should be stored an *Defined in* -[packages/cozy-client/src/CozyClient.js:1460](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1460) +[packages/cozy-client/src/CozyClient.js:1458](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1458) *** @@ -371,7 +371,7 @@ This mechanism is described in https://github.com/cozy/cozy-client/blob/master/p *Defined in* -[packages/cozy-client/src/CozyClient.js:1441](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1441) +[packages/cozy-client/src/CozyClient.js:1439](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1439) *** @@ -387,7 +387,7 @@ Returns whether the client has been revoked on the server *Defined in* -[packages/cozy-client/src/CozyClient.js:1556](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1556) +[packages/cozy-client/src/CozyClient.js:1554](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1554) *** @@ -471,7 +471,7 @@ If `oauth` options are passed, stackClient is an OAuthStackClient. *Defined in* -[packages/cozy-client/src/CozyClient.js:1594](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1594) +[packages/cozy-client/src/CozyClient.js:1592](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1592) *** @@ -516,7 +516,7 @@ The document that has been deleted *Defined in* -[packages/cozy-client/src/CozyClient.js:1665](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1665) +[packages/cozy-client/src/CozyClient.js:1663](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1663) *** @@ -602,7 +602,7 @@ Makes sure that the query exists in the store *Defined in* -[packages/cozy-client/src/CozyClient.js:1547](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1547) +[packages/cozy-client/src/CozyClient.js:1545](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1545) *** @@ -654,7 +654,7 @@ Query state *Defined in* -[packages/cozy-client/src/CozyClient.js:1394](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1394) +[packages/cozy-client/src/CozyClient.js:1392](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1392) *** @@ -689,7 +689,7 @@ Query state *Defined in* -[packages/cozy-client/src/CozyClient.js:1272](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1272) +[packages/cozy-client/src/CozyClient.js:1270](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1270) *** @@ -733,7 +733,7 @@ Creates an association that is linked to the store. *Defined in* -[packages/cozy-client/src/CozyClient.js:1279](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1279) +[packages/cozy-client/src/CozyClient.js:1277](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1277) *** @@ -747,7 +747,7 @@ Creates an association that is linked to the store. *Defined in* -[packages/cozy-client/src/CozyClient.js:1647](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1647) +[packages/cozy-client/src/CozyClient.js:1645](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1645) *** @@ -771,7 +771,7 @@ Array of documents or null if the collection does not exist. *Defined in* -[packages/cozy-client/src/CozyClient.js:1315](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1315) +[packages/cozy-client/src/CozyClient.js:1313](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1313) *** @@ -796,7 +796,7 @@ Document or null if the object does not exist. *Defined in* -[packages/cozy-client/src/CozyClient.js:1332](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1332) +[packages/cozy-client/src/CozyClient.js:1330](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1330) *** @@ -851,7 +851,7 @@ One or more mutation to execute *Defined in* -[packages/cozy-client/src/CozyClient.js:1199](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1199) +[packages/cozy-client/src/CozyClient.js:1197](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1197) *** @@ -867,7 +867,7 @@ getInstanceOptions - Returns current instance options, such as domain or app slu *Defined in* -[packages/cozy-client/src/CozyClient.js:1674](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1674) +[packages/cozy-client/src/CozyClient.js:1672](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1672) *** @@ -894,7 +894,7 @@ Get a query from the internal store. *Defined in* -[packages/cozy-client/src/CozyClient.js:1353](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1353) +[packages/cozy-client/src/CozyClient.js:1351](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1351) *** @@ -923,7 +923,7 @@ the store up, which in turn will update the ``s and re-render the data. *Defined in* -[packages/cozy-client/src/CozyClient.js:1295](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1295) +[packages/cozy-client/src/CozyClient.js:1293](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1293) *** @@ -955,7 +955,7 @@ extract the value corresponding to the given `key` *Defined in* -[packages/cozy-client/src/CozyClient.js:1775](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1775) +[packages/cozy-client/src/CozyClient.js:1773](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1773) *** @@ -969,7 +969,7 @@ extract the value corresponding to the given `key` *Defined in* -[packages/cozy-client/src/CozyClient.js:1654](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1654) +[packages/cozy-client/src/CozyClient.js:1652](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1652) *** @@ -991,7 +991,7 @@ Sets public attribute and emits event related to revocation *Defined in* -[packages/cozy-client/src/CozyClient.js:1565](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1565) +[packages/cozy-client/src/CozyClient.js:1563](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1563) *** @@ -1013,7 +1013,7 @@ Emits event when token is refreshed *Defined in* -[packages/cozy-client/src/CozyClient.js:1576](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1576) +[packages/cozy-client/src/CozyClient.js:1574](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1574) *** @@ -1039,7 +1039,7 @@ the relationship *Defined in* -[packages/cozy-client/src/CozyClient.js:1242](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1242) +[packages/cozy-client/src/CozyClient.js:1240](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1240) *** @@ -1064,7 +1064,7 @@ Instead, the relationships will have null documents. *Defined in* -[packages/cozy-client/src/CozyClient.js:1219](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1219) +[packages/cozy-client/src/CozyClient.js:1217](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1217) *** @@ -1085,7 +1085,7 @@ Instead, the relationships will have null documents. *Defined in* -[packages/cozy-client/src/CozyClient.js:1253](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1253) +[packages/cozy-client/src/CozyClient.js:1251](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1251) *** @@ -1099,7 +1099,7 @@ Instead, the relationships will have null documents. *Defined in* -[packages/cozy-client/src/CozyClient.js:1417](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1417) +[packages/cozy-client/src/CozyClient.js:1415](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1415) *** @@ -1121,7 +1121,7 @@ loadInstanceOptionsFromDOM - Loads the dataset injected by the Stack in web page *Defined in* -[packages/cozy-client/src/CozyClient.js:1685](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1685) +[packages/cozy-client/src/CozyClient.js:1683](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1683) *** @@ -1139,7 +1139,7 @@ This method is not iso with loadInstanceOptionsFromDOM for now. *Defined in* -[packages/cozy-client/src/CozyClient.js:1706](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1706) +[packages/cozy-client/src/CozyClient.js:1704](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1704) *** @@ -1220,7 +1220,7 @@ and working. *Defined in* -[packages/cozy-client/src/CozyClient.js:1265](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1265) +[packages/cozy-client/src/CozyClient.js:1263](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1263) *** @@ -1241,7 +1241,7 @@ and working. *Defined in* -[packages/cozy-client/src/CozyClient.js:1041](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1041) +[packages/cozy-client/src/CozyClient.js:1039](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1039) *** @@ -1267,7 +1267,7 @@ Mutate a document *Defined in* -[packages/cozy-client/src/CozyClient.js:1059](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1059) +[packages/cozy-client/src/CozyClient.js:1057](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1057) *** @@ -1367,7 +1367,7 @@ All documents matching the query *Defined in* -[packages/cozy-client/src/CozyClient.js:1001](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1001) +[packages/cozy-client/src/CozyClient.js:999](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L999) *** @@ -1401,7 +1401,7 @@ All documents matching the query *Defined in* -[packages/cozy-client/src/CozyClient.js:1661](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1661) +[packages/cozy-client/src/CozyClient.js:1659](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1659) *** @@ -1427,7 +1427,7 @@ Contains the fetched token and the client information. *Defined in* -[packages/cozy-client/src/CozyClient.js:1411](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1411) +[packages/cozy-client/src/CozyClient.js:1409](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1409) *** @@ -1548,7 +1548,7 @@ Contains the fetched token and the client information. *Defined in* -[packages/cozy-client/src/CozyClient.js:1506](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1506) +[packages/cozy-client/src/CozyClient.js:1504](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1504) *** @@ -1568,7 +1568,7 @@ Contains the fetched token and the client information. *Defined in* -[packages/cozy-client/src/CozyClient.js:1183](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1183) +[packages/cozy-client/src/CozyClient.js:1181](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1181) *** @@ -1594,7 +1594,7 @@ This method will reset the query state to its initial state and refetch it. *Defined in* -[packages/cozy-client/src/CozyClient.js:1804](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1804) +[packages/cozy-client/src/CozyClient.js:1802](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1802) *** @@ -1652,7 +1652,7 @@ save the new resulting settings into database *Defined in* -[packages/cozy-client/src/CozyClient.js:1792](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1792) +[packages/cozy-client/src/CozyClient.js:1790](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1790) *** @@ -1701,7 +1701,7 @@ Saves multiple documents in one batch *Defined in* -[packages/cozy-client/src/CozyClient.js:1758](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1758) +[packages/cozy-client/src/CozyClient.js:1756](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1756) *** @@ -1725,7 +1725,7 @@ set some data in the store. *Defined in* -[packages/cozy-client/src/CozyClient.js:1731](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1731) +[packages/cozy-client/src/CozyClient.js:1729](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1729) *** @@ -1749,7 +1749,7 @@ At any time put an error function *Defined in* -[packages/cozy-client/src/CozyClient.js:1744](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1744) +[packages/cozy-client/src/CozyClient.js:1742](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1742) *** @@ -1787,7 +1787,7 @@ use options.force = true. *Defined in* -[packages/cozy-client/src/CozyClient.js:1532](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1532) +[packages/cozy-client/src/CozyClient.js:1530](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1530) *** @@ -1811,7 +1811,7 @@ Contains the fetched token and the client information. These should be stored an *Defined in* -[packages/cozy-client/src/CozyClient.js:1427](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1427) +[packages/cozy-client/src/CozyClient.js:1425](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1425) *** @@ -1825,7 +1825,7 @@ Contains the fetched token and the client information. These should be stored an *Defined in* -[packages/cozy-client/src/CozyClient.js:1751](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1751) +[packages/cozy-client/src/CozyClient.js:1749](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1749) *** @@ -1908,7 +1908,7 @@ Contains the fetched token and the client information. These should be stored an *Defined in* -[packages/cozy-client/src/CozyClient.js:1034](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1034) +[packages/cozy-client/src/CozyClient.js:1032](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/CozyClient.js#L1032) *** diff --git a/packages/cozy-client/src/CozyClient.js b/packages/cozy-client/src/CozyClient.js index cb5aa55fc..168ee7d8a 100644 --- a/packages/cozy-client/src/CozyClient.js +++ b/packages/cozy-client/src/CozyClient.js @@ -960,9 +960,7 @@ client.query(Q('io.cozy.bills'))`) const requestFn = executeFromStore ? () => - Promise.resolve( - executeQueryFromState(this.store.getState(), queryDefinition) - ) + Promise.resolve(executeQueryFromState(this.client, queryDefinition)) : () => this.requestQuery(queryDefinition) const response = await this._promiseCache.exec(requestFn, () => stringify(queryDefinition) diff --git a/packages/cozy-client/src/store/queries.js b/packages/cozy-client/src/store/queries.js index 7d7f464dc..5a02b906e 100644 --- a/packages/cozy-client/src/store/queries.js +++ b/packages/cozy-client/src/store/queries.js @@ -12,7 +12,7 @@ import sift from 'sift' import flag from 'cozy-flags' -import { getCollectionFromSlice, getDocumentFromSlice } from './documents' +import { getDocumentFromSlice } from './documents' import { isReceivingMutationResult } from './mutations' import { properId } from './helpers' import { isAGetByIdQuery, QueryDefinition } from '../queries/dsl' @@ -310,12 +310,12 @@ const getSelectorFilterFn = queryDefinition => { /** * Execute the given query against the document state. * - * @param {import('../types').DocumentsStateSlice} state - The documents state + * @param {import('../CozyClient').default} client - The query definition to execute * @param {QueryDefinition} queryDefinition - The query definition to execute * @returns {import("../types").QueryStateData} - The returned documents from the query */ -export const executeQueryFromState = (state, queryDefinition) => { - const documents = getCollectionFromSlice(state, queryDefinition.doctype) +export const executeQueryFromState = (client, queryDefinition) => { + const documents = client.getCollectionFromState(queryDefinition.doctype) const isSingleObjectResponse = !!queryDefinition.id if (!documents) { return { data: isSingleObjectResponse ? null : [] } diff --git a/packages/cozy-client/src/store/queries.spec.js b/packages/cozy-client/src/store/queries.spec.js index b2a7b257c..468dae729 100644 --- a/packages/cozy-client/src/store/queries.spec.js +++ b/packages/cozy-client/src/store/queries.spec.js @@ -12,6 +12,8 @@ import queries, { } from './queries' import { Q } from '../queries/dsl' import { TODO_1, TODO_2, TODO_3 } from '../__tests__/fixtures' +import CozyClient from '../CozyClient' +import { createStore, resetState } from '.' describe('queries reducer', () => { let state @@ -674,29 +676,32 @@ describe('updateData', () => { }) describe('execute query from state', () => { - const docState = { - 'io.cozy.files': { - '123': { - _id: '123', - _type: 'io.cozy.files', - name: 'well', - created_at: '2024-01-01' - }, - '456': { - _id: '456', - _type: 'io.cozy.files', - name: 'hello', - created_at: '2024-02-01' - }, - '789': { - _id: '789', - _type: 'io.cozy.files', - name: 'there', - created_at: '2024-03-01' - } + const docState = [ + { + _id: '123', + _type: 'io.cozy.files', + name: 'well', + created_at: '2024-01-01' + }, + { + _id: '456', + _type: 'io.cozy.files', + name: 'hello', + created_at: '2024-02-01' + }, + { + _id: '789', + _type: 'io.cozy.files', + name: 'there', + created_at: '2024-03-01' } - } - it('should get the correct filtered results from state thanks to selector', () => { + ] + const client = new CozyClient({ store: true }) + const store = createStore() + client.setStore(store, { force: true }) + + it('should get the correct filtered results from state thanks to selector', async () => { + await store.dispatch(receiveQueryResult('files', { data: docState })) const query1 = { doctype: 'io.cozy.files', selector: { @@ -705,10 +710,10 @@ describe('execute query from state', () => { } } } - const res1 = executeQueryFromState(docState, query1) + const res1 = executeQueryFromState(client, query1) expect(res1.data.length).toEqual(2) - expect(res1.data[0]).toEqual(docState['io.cozy.files']['456']) - expect(res1.data[1]).toEqual(docState['io.cozy.files']['789']) + expect(res1.data[0]).toEqual(docState[1]) + expect(res1.data[1]).toEqual(docState[2]) const query2 = { doctype: 'io.cozy.files', @@ -716,9 +721,9 @@ describe('execute query from state', () => { name: 'well' } } - const res2 = executeQueryFromState(docState, query2) + const res2 = executeQueryFromState(client, query2) expect(res2.data.length).toEqual(1) - expect(res2.data[0]).toEqual(docState['io.cozy.files']['123']) + expect(res2.data[0]).toEqual(docState[0]) const query3 = { doctype: 'io.cozy.files', @@ -729,9 +734,9 @@ describe('execute query from state', () => { name: 'hello' } } - const res3 = executeQueryFromState(docState, query3) + const res3 = executeQueryFromState(client, query3) expect(res3.data.length).toEqual(1) - expect(res3.data[0]).toEqual(docState['io.cozy.files']['456']) + expect(res3.data[0]).toEqual(docState[1]) const query4 = { doctype: 'io.cozy.files', @@ -742,51 +747,54 @@ describe('execute query from state', () => { } } } - const res4 = executeQueryFromState(docState, query4) + const res4 = executeQueryFromState(client, query4) expect(res4.data.length).toEqual(0) }) - it('should get the correct filtered results from state thanks to id', () => { + it('should get the correct filtered results from state thanks to id', async () => { + await store.dispatch(receiveQueryResult('files', { data: docState })) const query1 = { doctype: 'io.cozy.files', id: '123' } - const res1 = executeQueryFromState(docState, query1) - expect(res1.data).toEqual(docState['io.cozy.files']['123']) + const res1 = executeQueryFromState(client, query1) + expect(res1.data).toEqual(docState[0]) const query2 = { doctype: 'io.cozy.files', ids: ['123', '789'] } - const res2 = executeQueryFromState(docState, query2) + const res2 = executeQueryFromState(client, query2) expect(res2.data.length).toEqual(2) - expect(res2.data[0]).toEqual(docState['io.cozy.files']['123']) - expect(res2.data[1]).toEqual(docState['io.cozy.files']['789']) + expect(res2.data[0]).toEqual(docState[0]) + expect(res2.data[1]).toEqual(docState[2]) const query3 = { doctype: 'io.cozy.files', id: '-1' } - const res3 = executeQueryFromState(docState, query3) + const res3 = executeQueryFromState(client, query3) expect(res3.data).toEqual(null) }) - it('should get all the docs from state for the doctype when no filter', () => { + it('should get all the docs from state for the doctype when no filter', async () => { + await store.dispatch(receiveQueryResult('files', { data: docState })) const query1 = { doctype: 'io.cozy.files' } - const res1 = executeQueryFromState(docState, query1) + const res1 = executeQueryFromState(client, query1) expect(res1.data.length).toEqual(3) }) - it('should correctly return when no doc is available', () => { - const res1 = executeQueryFromState({}, { doctype: 'io.cozy.files' }) + it('should correctly return when no doc is available', async () => { + await store.dispatch(resetState()) + const res1 = executeQueryFromState(client, { doctype: 'io.cozy.files' }) expect(res1.data).toEqual([]) - const res2 = executeQueryFromState( - {}, - { doctype: 'io.cozy.files', id: '123' } - ) + const res2 = executeQueryFromState(client, { + doctype: 'io.cozy.files', + id: '123' + }) expect(res2.data).toEqual(null) }) }) diff --git a/packages/cozy-client/types/store/queries.d.ts b/packages/cozy-client/types/store/queries.d.ts index f78175187..1d1072063 100644 --- a/packages/cozy-client/types/store/queries.d.ts +++ b/packages/cozy-client/types/store/queries.d.ts @@ -6,7 +6,7 @@ export function sortAndLimitDocsIds(queryState: import("../types").QueryState, d }): Array; export function convert$gtNullSelectors(selector: any): object; export function mergeSelectorAndPartialIndex(queryDefinition: object): object; -export function executeQueryFromState(state: import('../types').DocumentsStateSlice, queryDefinition: QueryDefinition): import("../types").QueryStateData; +export function executeQueryFromState(client: import('../CozyClient').default, queryDefinition: QueryDefinition): import("../types").QueryStateData; export function makeSorterFromDefinition(definition: QueryDefinition): (arg0: Array) => Array; export function updateData(query: import("../types").QueryState, newData: Array, documents: import("../types").DocumentsStateSlice): import("../types").QueryState; export default queries;