@@ -131,4 +131,196 @@ final class NestedFieldSupportForArrayData: XCTestCase {
131
131
let matchedCriteriaId = CriteriaCompletionChecker ( anonymousCriteria: data ( from: mockData) !, anonymousEvents: eventItems) . getMatchedCriteria ( )
132
132
XCTAssertEqual ( matchedCriteriaId, nil )
133
133
}
134
+
135
+ private let mokeDataForUserArray = """
136
+ {
137
+ " count " : 1,
138
+ " criteriaSets " : [
139
+ {
140
+ " criteriaId " : " 436 " ,
141
+ " name " : " Criteria 2.1 - 09252024 Bug Bash " ,
142
+ " createdAt " : 1727286807360,
143
+ " updatedAt " : 1727950464167,
144
+ " searchQuery " : {
145
+ " combinator " : " And " ,
146
+ " searchQueries " : [
147
+ {
148
+ " combinator " : " And " ,
149
+ " searchQueries " : [
150
+ {
151
+ " dataType " : " user " ,
152
+ " searchCombo " : {
153
+ " combinator " : " And " ,
154
+ " searchQueries " : [
155
+ {
156
+ " dataType " : " user " ,
157
+ " field " : " furniture.material.type " ,
158
+ " comparatorType " : " Contains " ,
159
+ " value " : " table " ,
160
+ " fieldType " : " string "
161
+ },
162
+ {
163
+ " dataType " : " user " ,
164
+ " field " : " furniture.material.color " ,
165
+ " comparatorType " : " Equals " ,
166
+ " values " : [
167
+ " black "
168
+ ]
169
+ }
170
+ ]
171
+ }
172
+ }
173
+ ]
174
+ }
175
+ ]
176
+ }
177
+ }
178
+ ]
179
+ }
180
+ """
181
+ func testNestedFieldArrayValueUserSuccess( ) {
182
+
183
+ let eventItems : [ [ AnyHashable : Any ] ] = [
184
+ [
185
+ " dataType " : " user " ,
186
+ " dataFields " : [
187
+ " furniture " : [
188
+ " material " : [
189
+ [
190
+ " type " : " table " ,
191
+ " color " : " black " ,
192
+ " lengthInches " : 40 ,
193
+ " widthInches " : 60
194
+ ] ,
195
+ [
196
+ " type " : " Sofa " ,
197
+ " color " : " Gray " ,
198
+ " lengthInches " : 20 ,
199
+ " widthInches " : 30
200
+ ]
201
+ ]
202
+ ]
203
+ ]
204
+ ]
205
+ ]
206
+
207
+
208
+ let expectedCriteriaId = " 436 "
209
+ let matchedCriteriaId = CriteriaCompletionChecker ( anonymousCriteria: data ( from: mokeDataForUserArray) !, anonymousEvents: eventItems) . getMatchedCriteria ( )
210
+ XCTAssertEqual ( matchedCriteriaId, expectedCriteriaId)
211
+ }
212
+
213
+ func testNestedFieldArrayUserValueFail( ) {
214
+
215
+ let eventItems : [ [ AnyHashable : Any ] ] = [
216
+ [
217
+ " dataType " : " user " ,
218
+ " dataFields " : [
219
+ " furniture " : [
220
+ " material " : [
221
+ [
222
+ " type " : " Chair " ,
223
+ " color " : " black " ,
224
+ " lengthInches " : 40 ,
225
+ " widthInches " : 60
226
+ ] ,
227
+ [
228
+ " type " : " Sofa " ,
229
+ " color " : " black " ,
230
+ " lengthInches " : 20 ,
231
+ " widthInches " : 30
232
+ ]
233
+ ]
234
+ ]
235
+ ]
236
+ ]
237
+ ]
238
+
239
+ let matchedCriteriaId = CriteriaCompletionChecker ( anonymousCriteria: data ( from: mokeDataForUserArray) !, anonymousEvents: eventItems) . getMatchedCriteria ( )
240
+ XCTAssertEqual ( matchedCriteriaId, nil )
241
+ }
242
+
243
+ private let mokeDataForEventArray = """
244
+ {
245
+ " count " : 1,
246
+ " criteriaSets " : [
247
+ {
248
+ " criteriaId " : " 459 " ,
249
+ " name " : " event a.h.b=d && a.h.c=g " ,
250
+ " createdAt " : 1727717997842,
251
+ " updatedAt " : 1728024187962,
252
+ " searchQuery " : {
253
+ " combinator " : " And " ,
254
+ " searchQueries " : [
255
+ {
256
+ " combinator " : " And " ,
257
+ " searchQueries " : [
258
+ {
259
+ " dataType " : " customEvent " ,
260
+ " searchCombo " : {
261
+ " combinator " : " And " ,
262
+ " searchQueries " : [
263
+ {
264
+ " dataType " : " customEvent " ,
265
+ " field " : " TopLevelArrayObject.a.h.b " ,
266
+ " comparatorType " : " Equals " ,
267
+ " value " : " d " ,
268
+ " fieldType " : " string "
269
+ },
270
+ {
271
+ " dataType " : " customEvent " ,
272
+ " field " : " TopLevelArrayObject.a.h.c " ,
273
+ " comparatorType " : " Equals " ,
274
+ " value " : " g " ,
275
+ " fieldType " : " string "
276
+ }
277
+ ]
278
+ }
279
+ }
280
+ ]
281
+ }
282
+ ]
283
+ }
284
+ }
285
+ ]
286
+ }
287
+ """
288
+ func testNestedFieldArrayValueEventSuccess( ) {
289
+ let eventItems : [ [ AnyHashable : Any ] ] = [
290
+ [
291
+ " dataType " : " customEvent " ,
292
+ " eventName " : " TopLevelArrayObject " ,
293
+ " dataFields " : [
294
+ " a " : [ " h " : [ [ " b " : " e " ,
295
+ " c " : " h " ] ,
296
+ [ " b " : " d " ,
297
+ " c " : " g " ] ] ]
298
+ ]
299
+ ]
300
+ ]
301
+
302
+
303
+ let expectedCriteriaId = " 459 "
304
+ let matchedCriteriaId = CriteriaCompletionChecker ( anonymousCriteria: data ( from: mokeDataForEventArray) !, anonymousEvents: eventItems) . getMatchedCriteria ( )
305
+ XCTAssertEqual ( matchedCriteriaId, expectedCriteriaId)
306
+ }
307
+
308
+ func testNestedFieldArrayEventValueFail( ) {
309
+
310
+ let eventItems : [ [ AnyHashable : Any ] ] = [
311
+ [
312
+ " dataType " : " customEvent " ,
313
+ " eventName " : " TopLevelArrayObject " ,
314
+ " dataFields " : [
315
+ " a " : [ " h " : [ [ " b " : " d " ,
316
+ " c " : " h " ] ,
317
+ [ " b " : " e " ,
318
+ " c " : " g " ] ] ]
319
+ ]
320
+ ]
321
+ ]
322
+
323
+ let matchedCriteriaId = CriteriaCompletionChecker ( anonymousCriteria: data ( from: mokeDataForEventArray) !, anonymousEvents: eventItems) . getMatchedCriteria ( )
324
+ XCTAssertEqual ( matchedCriteriaId, nil )
325
+ }
134
326
}
0 commit comments