From f2e647212bead169bc064ff1f79b38d40ba4ae2b Mon Sep 17 00:00:00 2001 From: Paul Tran-Van Date: Tue, 10 Dec 2024 15:38:41 +0100 Subject: [PATCH] feat: Do not query /jobs/triggers with a partialFilter One might want to avoid querying the `/jobs/triggers` route and stick to the `/data` route, to avoid extra work from the stack, that can be costful. We were using the existence of `worker` and `type` keys in selector, but a partialFilter existence should also force the use of the `/data` route. --- .../cozy-stack-client/src/TriggerCollection.js | 3 ++- .../src/TriggerCollection.spec.js | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/packages/cozy-stack-client/src/TriggerCollection.js b/packages/cozy-stack-client/src/TriggerCollection.js index 9d397e7719..d69a490012 100644 --- a/packages/cozy-stack-client/src/TriggerCollection.js +++ b/packages/cozy-stack-client/src/TriggerCollection.js @@ -122,7 +122,8 @@ class TriggerCollection extends DocumentCollection { */ async find(selector = {}, options = {}) { const { worker, type, ...rest } = selector - const hasOnlyWorkerAndType = Object.keys(rest).length === 0 + const hasOnlyWorkerAndType = + Object.keys(rest).length === 0 && !options.partialFilter if (hasOnlyWorkerAndType) { // @see https://github.com/cozy/cozy-stack/blob/master/docs/jobs.md#get-jobstriggers const url = `/jobs/triggers?${buildParamsUrl(worker, type)}` diff --git a/packages/cozy-stack-client/src/TriggerCollection.spec.js b/packages/cozy-stack-client/src/TriggerCollection.spec.js index 64153fb833..062ee086ec 100644 --- a/packages/cozy-stack-client/src/TriggerCollection.spec.js +++ b/packages/cozy-stack-client/src/TriggerCollection.spec.js @@ -260,6 +260,20 @@ describe('TriggerCollection', () => { } ) }) + + it('should call /data/io.cozy.triggers/_find route if partialFilter is passed', async () => { + stackClient.fetchJSON.mockReturnValue(FIND_RESPONSE_FIXTURES) + await collection.find({}, { partialFilter: { worker: 'konnector' } }) + expect(stackClient.fetchJSON).toHaveBeenLastCalledWith( + 'POST', + '/data/io.cozy.triggers/_find', + { + selector: { worker: 'konnector' }, + skip: 0, + use_index: '_design/by__filter_(worker_konnector)' + } + ) + }) }) describe('destroy', () => {