From aca5c5d326059f20976f900533d1f54297f1d976 Mon Sep 17 00:00:00 2001 From: daledah Date: Thu, 13 Mar 2025 17:56:55 +0700 Subject: [PATCH 1/2] fix: incorrect format of search query string --- src/libs/SearchQueryUtils.ts | 2 +- tests/unit/Search/SearchQueryUtilsTest.ts | 146 ++++++++++++++++++---- 2 files changed, 121 insertions(+), 27 deletions(-) diff --git a/src/libs/SearchQueryUtils.ts b/src/libs/SearchQueryUtils.ts index a7a71d15eebc..571d54428e5d 100644 --- a/src/libs/SearchQueryUtils.ts +++ b/src/libs/SearchQueryUtils.ts @@ -397,7 +397,7 @@ function buildQueryStringFromFilterFormValues(filterValues: Partial { // We don't want to test or mock the grammar and the parser, so we're simply defining this string directly here. const defaultQuery = `type:expense status:all sortBy:date sortOrder:desc`; -describe('getQueryWithUpdatedValues', () => { - test('returns default query for empty value', () => { - const userQuery = ''; +describe('SearchQueryUtils', () => { + describe('getQueryWithUpdatedValues', () => { + test('returns default query for empty value', () => { + const userQuery = ''; - const result = getQueryWithUpdatedValues(userQuery); + const result = getQueryWithUpdatedValues(userQuery); - expect(result).toEqual(defaultQuery); - }); + expect(result).toEqual(defaultQuery); + }); - test('returns query with updated amounts', () => { - const userQuery = 'foo test amount:20000'; + test('returns query with updated amounts', () => { + const userQuery = 'foo test amount:20000'; - const result = getQueryWithUpdatedValues(userQuery); + const result = getQueryWithUpdatedValues(userQuery); - expect(result).toEqual(`${defaultQuery} amount:2000000 foo test`); - }); + expect(result).toEqual(`${defaultQuery} amount:2000000 foo test`); + }); - test('returns query with user emails substituted', () => { - const userQuery = 'from:johndoe@example.com hello'; + test('returns query with user emails substituted', () => { + const userQuery = 'from:johndoe@example.com hello'; - const result = getQueryWithUpdatedValues(userQuery); + const result = getQueryWithUpdatedValues(userQuery); - expect(result).toEqual(`${defaultQuery} from:12345 hello`); - }); + expect(result).toEqual(`${defaultQuery} from:12345 hello`); + }); - test('returns query with user emails substituted and preserves user ids', () => { - const userQuery = 'from:johndoe@example.com to:112233'; + test('returns query with user emails substituted and preserves user ids', () => { + const userQuery = 'from:johndoe@example.com to:112233'; - const result = getQueryWithUpdatedValues(userQuery); + const result = getQueryWithUpdatedValues(userQuery); - expect(result).toEqual(`${defaultQuery} from:12345 to:112233`); - }); + expect(result).toEqual(`${defaultQuery} from:12345 to:112233`); + }); + + test('returns query with all of the fields correctly substituted', () => { + const userQuery = 'from:9876,87654 to:janedoe@example.com hello amount:150 test'; - test('returns query with all of the fields correctly substituted', () => { - const userQuery = 'from:9876,87654 to:janedoe@example.com hello amount:150 test'; + const result = getQueryWithUpdatedValues(userQuery); - const result = getQueryWithUpdatedValues(userQuery); + expect(result).toEqual(`${defaultQuery} from:9876,87654 to:78901 amount:15000 hello test`); + }); + }); - expect(result).toEqual(`${defaultQuery} from:9876,87654 to:78901 amount:15000 hello test`); + describe('buildQueryStringFromFilterFormValues', () => { + test('simple filter value', () => { + const filterValues: Partial = { + type: 'expense', + status: 'all', + policyID: '12345', + lessThan: '100', + }; + + const result = buildQueryStringFromFilterFormValues(filterValues); + + expect(result).toEqual('sortBy:date sortOrder:desc type:expense status:all policyID:12345 amount<100'); + }); + + test('with Policy ID', () => { + const filterValues: Partial = { + policyID: '12345', + }; + + const result = buildQueryStringFromFilterFormValues(filterValues); + + expect(result).toEqual('sortBy:date sortOrder:desc type:expense status:all policyID:12345'); + }); + + test('with keywords', () => { + const filterValues: Partial = { + type: 'expense', + status: 'all', + policyID: '67890', + merchant: 'Amazon', + description: 'Electronics', + keyword: 'laptop', + category: ['electronics', 'gadgets'], + }; + + const result = buildQueryStringFromFilterFormValues(filterValues); + + expect(result).toEqual('sortBy:date sortOrder:desc type:expense status:all policyID:67890 merchant:Amazon description:Electronics laptop category:electronics,gadgets'); + }); + + test('currencies and categories', () => { + const filterValues: Partial = { + type: 'expense', + status: 'all', + category: ['services', 'consulting'], + currency: ['USD', 'EUR'], + }; + + const result = buildQueryStringFromFilterFormValues(filterValues); + + expect(result).toEqual('sortBy:date sortOrder:desc type:expense status:all category:services,consulting currency:USD,EUR'); + }); + + test('empty filter values', () => { + const filterValues: Partial = {}; + + const result = buildQueryStringFromFilterFormValues(filterValues); + + expect(result).toEqual('sortBy:date sortOrder:desc'); + }); + + test('array of from', () => { + const filterValues: Partial = { + type: 'expense', + from: ['user1@gmail.com', 'user2@gmail.com'], + to: ['user3@gmail.com'], + }; + const result = buildQueryStringFromFilterFormValues(filterValues); + + expect(result).toEqual('sortBy:date sortOrder:desc type:expense from:user1@gmail.com,user2@gmail.com to:user3@gmail.com'); + }); + + test('complex filter values', () => { + const filterValues: Partial = { + type: 'expense', + from: ['user1@gmail.com', 'user2@gmail.com'], + to: ['user3@gmail.com'], + dateAfter: '2025-03-01', + dateBefore: '2025-03-10', + lessThan: '1000', + greaterThan: '1', + category: ['finance', 'insurance'], + }; + const result = buildQueryStringFromFilterFormValues(filterValues); + + expect(result).toEqual( + 'sortBy:date sortOrder:desc type:expense from:user1@gmail.com,user2@gmail.com to:user3@gmail.com category:finance,insurance date<2025-03-10 date>2025-03-01 amount>1 amount<1000', + ); + }); }); }); From 06aa6fc1bdfc43cb479d3a031e5bb165cf37d4ba Mon Sep 17 00:00:00 2001 From: daledah Date: Thu, 13 Mar 2025 18:08:37 +0700 Subject: [PATCH 2/2] fix: incorrect expected test --- tests/unit/Search/SearchQueryUtilsTest.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/unit/Search/SearchQueryUtilsTest.ts b/tests/unit/Search/SearchQueryUtilsTest.ts index e82b95dd550e..df547fce841e 100644 --- a/tests/unit/Search/SearchQueryUtilsTest.ts +++ b/tests/unit/Search/SearchQueryUtilsTest.ts @@ -88,7 +88,7 @@ describe('SearchQueryUtils', () => { const result = buildQueryStringFromFilterFormValues(filterValues); - expect(result).toEqual('sortBy:date sortOrder:desc type:expense status:all policyID:12345'); + expect(result).toEqual('sortBy:date sortOrder:desc policyID:12345'); }); test('with keywords', () => {