1
1
/* eslint-disable @typescript-eslint/naming-convention */
2
2
// we need "dirty" object key names in these tests
3
- import { getQueryWithUpdatedValues } from '@src/libs/SearchQueryUtils' ;
3
+ import { buildQueryStringFromFilterFormValues , getQueryWithUpdatedValues } from '@src/libs/SearchQueryUtils' ;
4
+ import type { SearchAdvancedFiltersForm } from '@src/types/form' ;
4
5
5
6
const personalDetailsFakeData = {
6
7
@@ -23,44 +24,137 @@ jest.mock('@libs/PersonalDetailsUtils', () => {
23
24
// We don't want to test or mock the grammar and the parser, so we're simply defining this string directly here.
24
25
const defaultQuery = `type:expense status:all sortBy:date sortOrder:desc` ;
25
26
26
- describe ( 'getQueryWithUpdatedValues' , ( ) => {
27
- test ( 'returns default query for empty value' , ( ) => {
28
- const userQuery = '' ;
27
+ describe ( 'SearchQueryUtils' , ( ) => {
28
+ describe ( 'getQueryWithUpdatedValues' , ( ) => {
29
+ test ( 'returns default query for empty value' , ( ) => {
30
+ const userQuery = '' ;
29
31
30
- const result = getQueryWithUpdatedValues ( userQuery ) ;
32
+ const result = getQueryWithUpdatedValues ( userQuery ) ;
31
33
32
- expect ( result ) . toEqual ( defaultQuery ) ;
33
- } ) ;
34
+ expect ( result ) . toEqual ( defaultQuery ) ;
35
+ } ) ;
34
36
35
- test ( 'returns query with updated amounts' , ( ) => {
36
- const userQuery = 'foo test amount:20000' ;
37
+ test ( 'returns query with updated amounts' , ( ) => {
38
+ const userQuery = 'foo test amount:20000' ;
37
39
38
- const result = getQueryWithUpdatedValues ( userQuery ) ;
40
+ const result = getQueryWithUpdatedValues ( userQuery ) ;
39
41
40
- expect ( result ) . toEqual ( `${ defaultQuery } amount:2000000 foo test` ) ;
41
- } ) ;
42
+ expect ( result ) . toEqual ( `${ defaultQuery } amount:2000000 foo test` ) ;
43
+ } ) ;
42
44
43
- test ( 'returns query with user emails substituted' , ( ) => {
44
- const userQuery = 'from:[email protected] hello' ;
45
+ test ( 'returns query with user emails substituted' , ( ) => {
46
+ const userQuery = 'from:[email protected] hello' ;
45
47
46
- const result = getQueryWithUpdatedValues ( userQuery ) ;
48
+ const result = getQueryWithUpdatedValues ( userQuery ) ;
47
49
48
- expect ( result ) . toEqual ( `${ defaultQuery } from:12345 hello` ) ;
49
- } ) ;
50
+ expect ( result ) . toEqual ( `${ defaultQuery } from:12345 hello` ) ;
51
+ } ) ;
50
52
51
- test ( 'returns query with user emails substituted and preserves user ids' , ( ) => {
52
- const userQuery = 'from:[email protected] to:112233' ;
53
+ test ( 'returns query with user emails substituted and preserves user ids' , ( ) => {
54
+ const userQuery = 'from:[email protected] to:112233' ;
53
55
54
- const result = getQueryWithUpdatedValues ( userQuery ) ;
56
+ const result = getQueryWithUpdatedValues ( userQuery ) ;
55
57
56
- expect ( result ) . toEqual ( `${ defaultQuery } from:12345 to:112233` ) ;
57
- } ) ;
58
+ expect ( result ) . toEqual ( `${ defaultQuery } from:12345 to:112233` ) ;
59
+ } ) ;
60
+
61
+ test ( 'returns query with all of the fields correctly substituted' , ( ) => {
62
+ const userQuery = 'from:9876,87654 to:[email protected] hello amount:150 test' ;
58
63
59
- test ( 'returns query with all of the fields correctly substituted' , ( ) => {
60
- const userQuery = 'from:9876,87654 to:[email protected] hello amount:150 test' ;
64
+ const result = getQueryWithUpdatedValues ( userQuery ) ;
61
65
62
- const result = getQueryWithUpdatedValues ( userQuery ) ;
66
+ expect ( result ) . toEqual ( `${ defaultQuery } from:9876,87654 to:78901 amount:15000 hello test` ) ;
67
+ } ) ;
68
+ } ) ;
63
69
64
- expect ( result ) . toEqual ( `${ defaultQuery } from:9876,87654 to:78901 amount:15000 hello test` ) ;
70
+ describe ( 'buildQueryStringFromFilterFormValues' , ( ) => {
71
+ test ( 'simple filter value' , ( ) => {
72
+ const filterValues : Partial < SearchAdvancedFiltersForm > = {
73
+ type : 'expense' ,
74
+ status : 'all' ,
75
+ policyID : '12345' ,
76
+ lessThan : '100' ,
77
+ } ;
78
+
79
+ const result = buildQueryStringFromFilterFormValues ( filterValues ) ;
80
+
81
+ expect ( result ) . toEqual ( 'sortBy:date sortOrder:desc type:expense status:all policyID:12345 amount<100' ) ;
82
+ } ) ;
83
+
84
+ test ( 'with Policy ID' , ( ) => {
85
+ const filterValues : Partial < SearchAdvancedFiltersForm > = {
86
+ policyID : '12345' ,
87
+ } ;
88
+
89
+ const result = buildQueryStringFromFilterFormValues ( filterValues ) ;
90
+
91
+ expect ( result ) . toEqual ( 'sortBy:date sortOrder:desc policyID:12345' ) ;
92
+ } ) ;
93
+
94
+ test ( 'with keywords' , ( ) => {
95
+ const filterValues : Partial < SearchAdvancedFiltersForm > = {
96
+ type : 'expense' ,
97
+ status : 'all' ,
98
+ policyID : '67890' ,
99
+ merchant : 'Amazon' ,
100
+ description : 'Electronics' ,
101
+ keyword : 'laptop' ,
102
+ category : [ 'electronics' , 'gadgets' ] ,
103
+ } ;
104
+
105
+ const result = buildQueryStringFromFilterFormValues ( filterValues ) ;
106
+
107
+ expect ( result ) . toEqual ( 'sortBy:date sortOrder:desc type:expense status:all policyID:67890 merchant:Amazon description:Electronics laptop category:electronics,gadgets' ) ;
108
+ } ) ;
109
+
110
+ test ( 'currencies and categories' , ( ) => {
111
+ const filterValues : Partial < SearchAdvancedFiltersForm > = {
112
+ type : 'expense' ,
113
+ status : 'all' ,
114
+ category : [ 'services' , 'consulting' ] ,
115
+ currency : [ 'USD' , 'EUR' ] ,
116
+ } ;
117
+
118
+ const result = buildQueryStringFromFilterFormValues ( filterValues ) ;
119
+
120
+ expect ( result ) . toEqual ( 'sortBy:date sortOrder:desc type:expense status:all category:services,consulting currency:USD,EUR' ) ;
121
+ } ) ;
122
+
123
+ test ( 'empty filter values' , ( ) => {
124
+ const filterValues : Partial < SearchAdvancedFiltersForm > = { } ;
125
+
126
+ const result = buildQueryStringFromFilterFormValues ( filterValues ) ;
127
+
128
+ expect ( result ) . toEqual ( 'sortBy:date sortOrder:desc' ) ;
129
+ } ) ;
130
+
131
+ test ( 'array of from' , ( ) => {
132
+ const filterValues : Partial < SearchAdvancedFiltersForm > = {
133
+ type : 'expense' ,
134
+
135
+
136
+ } ;
137
+ const result = buildQueryStringFromFilterFormValues ( filterValues ) ;
138
+
139
+ expect ( result ) . toEqual ( 'sortBy:date sortOrder:desc type:expense from:[email protected] ,[email protected] to:[email protected] ' ) ;
140
+ } ) ;
141
+
142
+ test ( 'complex filter values' , ( ) => {
143
+ const filterValues : Partial < SearchAdvancedFiltersForm > = {
144
+ type : 'expense' ,
145
+
146
+
147
+ dateAfter : '2025-03-01' ,
148
+ dateBefore : '2025-03-10' ,
149
+ lessThan : '1000' ,
150
+ greaterThan : '1' ,
151
+ category : [ 'finance' , 'insurance' ] ,
152
+ } ;
153
+ const result = buildQueryStringFromFilterFormValues ( filterValues ) ;
154
+
155
+ expect ( result ) . toEqual (
156
+ 'sortBy:date sortOrder:desc type:expense from:[email protected] ,[email protected] to:[email protected] category:finance,insurance date<2025-03-10 date>2025-03-01 amount>1 amount<1000' ,
157
+ ) ;
158
+ } ) ;
65
159
} ) ;
66
160
} ) ;
0 commit comments