From bff7ad051c0b0de0bb2c8e3cff8aee21d8937a67 Mon Sep 17 00:00:00 2001 From: Liran Cohen Date: Thu, 30 Nov 2023 14:14:19 -0500 Subject: [PATCH] updated tests to isFilterConcise --- src/store/index-level.ts | 3 +-- tests/store/index-level.spec.ts | 46 +++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 2 deletions(-) diff --git a/src/store/index-level.ts b/src/store/index-level.ts index 7d440e233..696e67e39 100644 --- a/src/store/index-level.ts +++ b/src/store/index-level.ts @@ -574,7 +574,7 @@ export class IndexLevel { } - private static isFilterConcise(filter: Filter, queryOptions: QueryOptions): boolean { + public static isFilterConcise(filter: Filter, queryOptions: QueryOptions): boolean { // if there is a specific recordId in the filter, return true immediately. if (filter.recordId !== undefined) { return true; @@ -586,7 +586,6 @@ export class IndexLevel { } // NOTE: remaining conditions will not have cursor if ( - filter.protocol !== undefined || filter.protocolPath !== undefined || filter.contextId !== undefined || filter.parentId !== undefined || diff --git a/tests/store/index-level.spec.ts b/tests/store/index-level.spec.ts index 2ba884ee8..725be4807 100644 --- a/tests/store/index-level.spec.ts +++ b/tests/store/index-level.spec.ts @@ -1150,4 +1150,50 @@ describe('IndexLevel', () => { digits.forEach((n,i) => expect(encodedDigits.at(i)).to.equal(IndexLevel.encodeNumberValue(n))); }); }); + + describe('isFilterConcise', () => { + const queryOptionsWithCursor = { sortProperty: 'sort', cursor: 'cursor' }; + const queryOptionsWithoutCursor = { sortProperty: 'sort' }; + + it('recordId is always concise', async () => { + expect(IndexLevel.isFilterConcise({ recordId: 'record-id' }, queryOptionsWithCursor)).to.equal(true); + expect(IndexLevel.isFilterConcise({ recordId: 'record-id' }, queryOptionsWithoutCursor)).to.equal(true); + }); + + it('other than if `recordId` exists, if a cursor exists it is never concise', async () => { + expect(IndexLevel.isFilterConcise({ schema: 'schema', contextId: 'contextId', parentId: 'parentId' }, queryOptionsWithCursor)).to.equal(false); + + // control + expect(IndexLevel.isFilterConcise({ schema: 'schema', contextId: 'contextId', parentId: 'parentId' }, queryOptionsWithoutCursor)).to.equal(true); + expect(IndexLevel.isFilterConcise({ recordId: 'record-id' }, queryOptionsWithCursor)).to.equal(true); + }); + + it('if there is no cursor - protocolPath, contextId, parentId, or schema return a concise filter', async () => { + expect(IndexLevel.isFilterConcise({ protocolPath: 'protocolPath' }, queryOptionsWithoutCursor)).to.equal(true); + expect(IndexLevel.isFilterConcise({ protocolPath: 'protocolPath' }, queryOptionsWithCursor)).to.equal(false); // control + + expect(IndexLevel.isFilterConcise({ contextId: 'contextId' }, queryOptionsWithoutCursor)).to.equal(true); + expect(IndexLevel.isFilterConcise({ contextId: 'contextId' }, queryOptionsWithCursor)).to.equal(false); // control + + expect(IndexLevel.isFilterConcise({ contextId: 'parentId' }, queryOptionsWithoutCursor)).to.equal(true); + expect(IndexLevel.isFilterConcise({ contextId: 'parentId' }, queryOptionsWithCursor)).to.equal(false); // control + + expect(IndexLevel.isFilterConcise({ contextId: 'schema' }, queryOptionsWithoutCursor)).to.equal(true); + expect(IndexLevel.isFilterConcise({ contextId: 'schema' }, queryOptionsWithCursor)).to.equal(false); // control + }); + + it('if there is no cursor, and it is not one of the conditions, return not concise', async () => { + expect(IndexLevel.isFilterConcise({ dataSize: { gt: 123 } }, queryOptionsWithoutCursor)).to.equal(false); + + // control + expect(IndexLevel.isFilterConcise({ schema: 'schema', contextId: 'contextId', parentId: 'parentId' }, queryOptionsWithoutCursor)).to.equal(true); + }); + + it('if protocol filter exists by itself it is not a concise filter', async () => { + expect(IndexLevel.isFilterConcise({ protocol: 'protocol' }, queryOptionsWithoutCursor)).to.equal(false); + + // control + expect(IndexLevel.isFilterConcise({ protocol: 'protocol', protocolPath: 'path/to' }, queryOptionsWithoutCursor)).to.equal(true); + }); + }); }); \ No newline at end of file