@usertour/helpers 0.0.29 → 0.0.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__tests__/attribute.test.cjs +505 -67
- package/dist/__tests__/attribute.test.js +495 -60
- package/dist/__tests__/condition.test.cjs +15 -12
- package/dist/__tests__/condition.test.js +9 -5
- package/dist/{chunk-PBZSPV5R.js → chunk-P46FJFKP.js} +20 -10
- package/dist/{chunk-E2IJQFKH.js → chunk-RVCKVUQF.js} +2 -6
- package/dist/conditions/attribute.cjs +16 -9
- package/dist/conditions/attribute.d.cts +5 -7
- package/dist/conditions/attribute.d.ts +5 -7
- package/dist/conditions/attribute.js +1 -1
- package/dist/conditions/condition.cjs +13 -10
- package/dist/conditions/condition.js +2 -2
- package/dist/conditions/index.cjs +13 -10
- package/dist/conditions/index.js +2 -2
- package/dist/index.cjs +13 -10
- package/dist/index.js +2 -2
- package/package.json +2 -2
|
@@ -6,14 +6,14 @@ var import_types2 = require("@usertour/types");
|
|
|
6
6
|
// src/conditions/attribute.ts
|
|
7
7
|
var import_types = require("@usertour/types");
|
|
8
8
|
var import_date_fns = require("date-fns");
|
|
9
|
-
function evaluateFilterConditions(conditions,
|
|
9
|
+
function evaluateFilterConditions(conditions, options) {
|
|
10
10
|
if (!conditions || !conditions.length) {
|
|
11
11
|
return true;
|
|
12
12
|
}
|
|
13
|
-
const result = evaluateAttributeConditionsGroup(conditions,
|
|
13
|
+
const result = evaluateAttributeConditionsGroup(conditions, options);
|
|
14
14
|
return evaluateFilterResult(result);
|
|
15
15
|
}
|
|
16
|
-
function evaluateAttributeConditionsGroup(conditions,
|
|
16
|
+
function evaluateAttributeConditionsGroup(conditions, options) {
|
|
17
17
|
if (!conditions || !conditions.length) {
|
|
18
18
|
return false;
|
|
19
19
|
}
|
|
@@ -21,7 +21,7 @@ function evaluateAttributeConditionsGroup(conditions, attributes, userAttributes
|
|
|
21
21
|
const OR = [];
|
|
22
22
|
for (const condition of conditions) {
|
|
23
23
|
const { operators } = condition;
|
|
24
|
-
const item = condition.type !== "group" ? evaluateAttributeCondition(condition,
|
|
24
|
+
const item = condition.type !== "group" ? evaluateAttributeCondition(condition, options) : evaluateAttributeConditionsGroup(condition.conditions || [], options);
|
|
25
25
|
if (!item) {
|
|
26
26
|
continue;
|
|
27
27
|
}
|
|
@@ -43,20 +43,27 @@ function evaluateAttributeConditionsGroup(conditions, attributes, userAttributes
|
|
|
43
43
|
}
|
|
44
44
|
return filter;
|
|
45
45
|
}
|
|
46
|
-
function evaluateAttributeCondition(condition,
|
|
46
|
+
function evaluateAttributeCondition(condition, options) {
|
|
47
47
|
const { data } = condition;
|
|
48
48
|
if (!data) {
|
|
49
49
|
return false;
|
|
50
50
|
}
|
|
51
51
|
const { logic, value, attrId, value2, listValues = [] } = data;
|
|
52
|
-
|
|
52
|
+
const {
|
|
53
|
+
attributes,
|
|
54
|
+
userAttributes = {},
|
|
55
|
+
companyAttributes = {},
|
|
56
|
+
membershipAttributes = {}
|
|
57
|
+
} = options;
|
|
58
|
+
if (!attrId || !attributes) {
|
|
53
59
|
return false;
|
|
54
60
|
}
|
|
55
61
|
const attr = attributes.find((attr2) => attr2.id === attrId);
|
|
56
62
|
if (!attr) {
|
|
57
63
|
return false;
|
|
58
64
|
}
|
|
59
|
-
const
|
|
65
|
+
const bizAttributes = attr.bizType === import_types.AttributeBizTypes.Company ? companyAttributes : attr.bizType === import_types.AttributeBizTypes.Membership ? membershipAttributes : userAttributes;
|
|
66
|
+
const actualValue = getAttributeValue(attr.codeName, bizAttributes);
|
|
60
67
|
if (attr.dataType === import_types.BizAttributeTypes.String) {
|
|
61
68
|
return evaluateStringCondition(logic, actualValue, value);
|
|
62
69
|
}
|
|
@@ -74,8 +81,8 @@ function evaluateAttributeCondition(condition, attributes, userAttributes) {
|
|
|
74
81
|
}
|
|
75
82
|
return false;
|
|
76
83
|
}
|
|
77
|
-
function getAttributeValue(codeName,
|
|
78
|
-
return
|
|
84
|
+
function getAttributeValue(codeName, attributes) {
|
|
85
|
+
return attributes == null ? void 0 : attributes[codeName];
|
|
79
86
|
}
|
|
80
87
|
function evaluateStringCondition(logic, actualValue, expectedValue) {
|
|
81
88
|
const stringValue = actualValue === null || actualValue === void 0 ? "" : String(actualValue);
|
|
@@ -243,32 +250,64 @@ var testAttributes = [
|
|
|
243
250
|
{
|
|
244
251
|
id: "email-attr",
|
|
245
252
|
codeName: "email",
|
|
246
|
-
dataType: import_types2.BizAttributeTypes.String
|
|
253
|
+
dataType: import_types2.BizAttributeTypes.String,
|
|
254
|
+
bizType: import_types2.AttributeBizTypes.User
|
|
247
255
|
},
|
|
248
256
|
{
|
|
249
257
|
id: "age-attr",
|
|
250
258
|
codeName: "age",
|
|
251
|
-
dataType: import_types2.BizAttributeTypes.Number
|
|
259
|
+
dataType: import_types2.BizAttributeTypes.Number,
|
|
260
|
+
bizType: import_types2.AttributeBizTypes.User
|
|
252
261
|
},
|
|
253
262
|
{
|
|
254
263
|
id: "isPremium-attr",
|
|
255
264
|
codeName: "isPremium",
|
|
256
|
-
dataType: import_types2.BizAttributeTypes.Boolean
|
|
265
|
+
dataType: import_types2.BizAttributeTypes.Boolean,
|
|
266
|
+
bizType: import_types2.AttributeBizTypes.User
|
|
257
267
|
},
|
|
258
268
|
{
|
|
259
269
|
id: "roles-attr",
|
|
260
270
|
codeName: "roles",
|
|
261
|
-
dataType: import_types2.BizAttributeTypes.List
|
|
271
|
+
dataType: import_types2.BizAttributeTypes.List,
|
|
272
|
+
bizType: import_types2.AttributeBizTypes.User
|
|
262
273
|
},
|
|
263
274
|
{
|
|
264
275
|
id: "signUpDate-attr",
|
|
265
276
|
codeName: "signUpDate",
|
|
266
|
-
dataType: import_types2.BizAttributeTypes.DateTime
|
|
277
|
+
dataType: import_types2.BizAttributeTypes.DateTime,
|
|
278
|
+
bizType: import_types2.AttributeBizTypes.User
|
|
267
279
|
},
|
|
268
280
|
{
|
|
269
281
|
id: "score-attr",
|
|
270
282
|
codeName: "score",
|
|
271
|
-
dataType: import_types2.BizAttributeTypes.Number
|
|
283
|
+
dataType: import_types2.BizAttributeTypes.Number,
|
|
284
|
+
bizType: import_types2.AttributeBizTypes.User
|
|
285
|
+
},
|
|
286
|
+
// Company attributes
|
|
287
|
+
{
|
|
288
|
+
id: "company-name-attr",
|
|
289
|
+
codeName: "companyName",
|
|
290
|
+
dataType: import_types2.BizAttributeTypes.String,
|
|
291
|
+
bizType: import_types2.AttributeBizTypes.Company
|
|
292
|
+
},
|
|
293
|
+
{
|
|
294
|
+
id: "company-size-attr",
|
|
295
|
+
codeName: "companySize",
|
|
296
|
+
dataType: import_types2.BizAttributeTypes.Number,
|
|
297
|
+
bizType: import_types2.AttributeBizTypes.Company
|
|
298
|
+
},
|
|
299
|
+
// Membership attributes
|
|
300
|
+
{
|
|
301
|
+
id: "membership-level-attr",
|
|
302
|
+
codeName: "membershipLevel",
|
|
303
|
+
dataType: import_types2.BizAttributeTypes.String,
|
|
304
|
+
bizType: import_types2.AttributeBizTypes.Membership
|
|
305
|
+
},
|
|
306
|
+
{
|
|
307
|
+
id: "membership-duration-attr",
|
|
308
|
+
codeName: "membershipDuration",
|
|
309
|
+
dataType: import_types2.BizAttributeTypes.Number,
|
|
310
|
+
bizType: import_types2.AttributeBizTypes.Membership
|
|
272
311
|
}
|
|
273
312
|
];
|
|
274
313
|
var testUserAttributes = {
|
|
@@ -279,6 +318,20 @@ var testUserAttributes = {
|
|
|
279
318
|
signUpDate: "2024-01-15T10:30:00Z",
|
|
280
319
|
score: 85.5
|
|
281
320
|
};
|
|
321
|
+
var testCompanyAttributes = {
|
|
322
|
+
companyName: "Example Corp",
|
|
323
|
+
companySize: 500
|
|
324
|
+
};
|
|
325
|
+
var testMembershipAttributes = {
|
|
326
|
+
membershipLevel: "premium",
|
|
327
|
+
membershipDuration: 12
|
|
328
|
+
};
|
|
329
|
+
var defaultOptions = {
|
|
330
|
+
attributes: testAttributes,
|
|
331
|
+
userAttributes: testUserAttributes,
|
|
332
|
+
companyAttributes: testCompanyAttributes,
|
|
333
|
+
membershipAttributes: testMembershipAttributes
|
|
334
|
+
};
|
|
282
335
|
describe("Attribute Filter - Complete Test Suite", () => {
|
|
283
336
|
describe("String conditions (8 cases)", () => {
|
|
284
337
|
test('should evaluate "is" condition correctly', () => {
|
|
@@ -294,7 +347,7 @@ describe("Attribute Filter - Complete Test Suite", () => {
|
|
|
294
347
|
}
|
|
295
348
|
}
|
|
296
349
|
];
|
|
297
|
-
expect(evaluateFilterConditions(condition,
|
|
350
|
+
expect(evaluateFilterConditions(condition, defaultOptions)).toBe(true);
|
|
298
351
|
});
|
|
299
352
|
test('should evaluate "not" condition correctly', () => {
|
|
300
353
|
const condition = [
|
|
@@ -309,7 +362,7 @@ describe("Attribute Filter - Complete Test Suite", () => {
|
|
|
309
362
|
}
|
|
310
363
|
}
|
|
311
364
|
];
|
|
312
|
-
expect(evaluateFilterConditions(condition,
|
|
365
|
+
expect(evaluateFilterConditions(condition, defaultOptions)).toBe(true);
|
|
313
366
|
});
|
|
314
367
|
test('should evaluate "contains" condition correctly', () => {
|
|
315
368
|
const condition = [
|
|
@@ -324,7 +377,7 @@ describe("Attribute Filter - Complete Test Suite", () => {
|
|
|
324
377
|
}
|
|
325
378
|
}
|
|
326
379
|
];
|
|
327
|
-
expect(evaluateFilterConditions(condition,
|
|
380
|
+
expect(evaluateFilterConditions(condition, defaultOptions)).toBe(true);
|
|
328
381
|
});
|
|
329
382
|
test('should evaluate "notContain" condition correctly', () => {
|
|
330
383
|
const condition = [
|
|
@@ -339,7 +392,7 @@ describe("Attribute Filter - Complete Test Suite", () => {
|
|
|
339
392
|
}
|
|
340
393
|
}
|
|
341
394
|
];
|
|
342
|
-
expect(evaluateFilterConditions(condition,
|
|
395
|
+
expect(evaluateFilterConditions(condition, defaultOptions)).toBe(true);
|
|
343
396
|
});
|
|
344
397
|
test('should evaluate "startsWith" condition correctly', () => {
|
|
345
398
|
const condition = [
|
|
@@ -354,7 +407,7 @@ describe("Attribute Filter - Complete Test Suite", () => {
|
|
|
354
407
|
}
|
|
355
408
|
}
|
|
356
409
|
];
|
|
357
|
-
expect(evaluateFilterConditions(condition,
|
|
410
|
+
expect(evaluateFilterConditions(condition, defaultOptions)).toBe(true);
|
|
358
411
|
});
|
|
359
412
|
test('should evaluate "endsWith" condition correctly', () => {
|
|
360
413
|
const condition = [
|
|
@@ -369,7 +422,7 @@ describe("Attribute Filter - Complete Test Suite", () => {
|
|
|
369
422
|
}
|
|
370
423
|
}
|
|
371
424
|
];
|
|
372
|
-
expect(evaluateFilterConditions(condition,
|
|
425
|
+
expect(evaluateFilterConditions(condition, defaultOptions)).toBe(true);
|
|
373
426
|
});
|
|
374
427
|
test('should evaluate "empty" condition correctly', () => {
|
|
375
428
|
const condition = [
|
|
@@ -383,7 +436,7 @@ describe("Attribute Filter - Complete Test Suite", () => {
|
|
|
383
436
|
}
|
|
384
437
|
}
|
|
385
438
|
];
|
|
386
|
-
expect(evaluateFilterConditions(condition,
|
|
439
|
+
expect(evaluateFilterConditions(condition, defaultOptions)).toBe(false);
|
|
387
440
|
});
|
|
388
441
|
test('should evaluate "any" condition correctly', () => {
|
|
389
442
|
const condition = [
|
|
@@ -397,7 +450,7 @@ describe("Attribute Filter - Complete Test Suite", () => {
|
|
|
397
450
|
}
|
|
398
451
|
}
|
|
399
452
|
];
|
|
400
|
-
expect(evaluateFilterConditions(condition,
|
|
453
|
+
expect(evaluateFilterConditions(condition, defaultOptions)).toBe(true);
|
|
401
454
|
});
|
|
402
455
|
});
|
|
403
456
|
describe("Number conditions (9 cases)", () => {
|
|
@@ -414,7 +467,7 @@ describe("Attribute Filter - Complete Test Suite", () => {
|
|
|
414
467
|
}
|
|
415
468
|
}
|
|
416
469
|
];
|
|
417
|
-
expect(evaluateFilterConditions(condition,
|
|
470
|
+
expect(evaluateFilterConditions(condition, defaultOptions)).toBe(true);
|
|
418
471
|
});
|
|
419
472
|
test('should evaluate "not" condition correctly', () => {
|
|
420
473
|
const condition = [
|
|
@@ -429,7 +482,7 @@ describe("Attribute Filter - Complete Test Suite", () => {
|
|
|
429
482
|
}
|
|
430
483
|
}
|
|
431
484
|
];
|
|
432
|
-
expect(evaluateFilterConditions(condition,
|
|
485
|
+
expect(evaluateFilterConditions(condition, defaultOptions)).toBe(true);
|
|
433
486
|
});
|
|
434
487
|
test('should evaluate "isLessThan" condition correctly', () => {
|
|
435
488
|
const condition = [
|
|
@@ -444,7 +497,7 @@ describe("Attribute Filter - Complete Test Suite", () => {
|
|
|
444
497
|
}
|
|
445
498
|
}
|
|
446
499
|
];
|
|
447
|
-
expect(evaluateFilterConditions(condition,
|
|
500
|
+
expect(evaluateFilterConditions(condition, defaultOptions)).toBe(true);
|
|
448
501
|
});
|
|
449
502
|
test('should evaluate "isLessThanOrEqualTo" condition correctly', () => {
|
|
450
503
|
const condition = [
|
|
@@ -459,7 +512,7 @@ describe("Attribute Filter - Complete Test Suite", () => {
|
|
|
459
512
|
}
|
|
460
513
|
}
|
|
461
514
|
];
|
|
462
|
-
expect(evaluateFilterConditions(condition,
|
|
515
|
+
expect(evaluateFilterConditions(condition, defaultOptions)).toBe(true);
|
|
463
516
|
});
|
|
464
517
|
test('should evaluate "isGreaterThan" condition correctly', () => {
|
|
465
518
|
const condition = [
|
|
@@ -474,7 +527,7 @@ describe("Attribute Filter - Complete Test Suite", () => {
|
|
|
474
527
|
}
|
|
475
528
|
}
|
|
476
529
|
];
|
|
477
|
-
expect(evaluateFilterConditions(condition,
|
|
530
|
+
expect(evaluateFilterConditions(condition, defaultOptions)).toBe(true);
|
|
478
531
|
});
|
|
479
532
|
test('should evaluate "isGreaterThanOrEqualTo" condition correctly', () => {
|
|
480
533
|
const condition = [
|
|
@@ -489,7 +542,7 @@ describe("Attribute Filter - Complete Test Suite", () => {
|
|
|
489
542
|
}
|
|
490
543
|
}
|
|
491
544
|
];
|
|
492
|
-
expect(evaluateFilterConditions(condition,
|
|
545
|
+
expect(evaluateFilterConditions(condition, defaultOptions)).toBe(true);
|
|
493
546
|
});
|
|
494
547
|
test('should evaluate "between" condition correctly', () => {
|
|
495
548
|
const condition = [
|
|
@@ -505,7 +558,7 @@ describe("Attribute Filter - Complete Test Suite", () => {
|
|
|
505
558
|
}
|
|
506
559
|
}
|
|
507
560
|
];
|
|
508
|
-
expect(evaluateFilterConditions(condition,
|
|
561
|
+
expect(evaluateFilterConditions(condition, defaultOptions)).toBe(true);
|
|
509
562
|
});
|
|
510
563
|
test('should evaluate "empty" condition correctly', () => {
|
|
511
564
|
const condition = [
|
|
@@ -519,7 +572,7 @@ describe("Attribute Filter - Complete Test Suite", () => {
|
|
|
519
572
|
}
|
|
520
573
|
}
|
|
521
574
|
];
|
|
522
|
-
expect(evaluateFilterConditions(condition,
|
|
575
|
+
expect(evaluateFilterConditions(condition, defaultOptions)).toBe(false);
|
|
523
576
|
});
|
|
524
577
|
test('should evaluate "any" condition correctly', () => {
|
|
525
578
|
const condition = [
|
|
@@ -533,7 +586,7 @@ describe("Attribute Filter - Complete Test Suite", () => {
|
|
|
533
586
|
}
|
|
534
587
|
}
|
|
535
588
|
];
|
|
536
|
-
expect(evaluateFilterConditions(condition,
|
|
589
|
+
expect(evaluateFilterConditions(condition, defaultOptions)).toBe(true);
|
|
537
590
|
});
|
|
538
591
|
});
|
|
539
592
|
describe("Boolean conditions (4 cases)", () => {
|
|
@@ -549,7 +602,7 @@ describe("Attribute Filter - Complete Test Suite", () => {
|
|
|
549
602
|
}
|
|
550
603
|
}
|
|
551
604
|
];
|
|
552
|
-
expect(evaluateFilterConditions(condition,
|
|
605
|
+
expect(evaluateFilterConditions(condition, defaultOptions)).toBe(true);
|
|
553
606
|
});
|
|
554
607
|
test('should evaluate "false" condition correctly', () => {
|
|
555
608
|
const condition = [
|
|
@@ -563,7 +616,7 @@ describe("Attribute Filter - Complete Test Suite", () => {
|
|
|
563
616
|
}
|
|
564
617
|
}
|
|
565
618
|
];
|
|
566
|
-
expect(evaluateFilterConditions(condition,
|
|
619
|
+
expect(evaluateFilterConditions(condition, defaultOptions)).toBe(false);
|
|
567
620
|
});
|
|
568
621
|
test('should evaluate "empty" condition correctly', () => {
|
|
569
622
|
const condition = [
|
|
@@ -577,7 +630,7 @@ describe("Attribute Filter - Complete Test Suite", () => {
|
|
|
577
630
|
}
|
|
578
631
|
}
|
|
579
632
|
];
|
|
580
|
-
expect(evaluateFilterConditions(condition,
|
|
633
|
+
expect(evaluateFilterConditions(condition, defaultOptions)).toBe(false);
|
|
581
634
|
});
|
|
582
635
|
test('should evaluate "any" condition correctly', () => {
|
|
583
636
|
const condition = [
|
|
@@ -591,7 +644,7 @@ describe("Attribute Filter - Complete Test Suite", () => {
|
|
|
591
644
|
}
|
|
592
645
|
}
|
|
593
646
|
];
|
|
594
|
-
expect(evaluateFilterConditions(condition,
|
|
647
|
+
expect(evaluateFilterConditions(condition, defaultOptions)).toBe(true);
|
|
595
648
|
});
|
|
596
649
|
});
|
|
597
650
|
describe("List conditions (6 cases)", () => {
|
|
@@ -608,7 +661,7 @@ describe("Attribute Filter - Complete Test Suite", () => {
|
|
|
608
661
|
}
|
|
609
662
|
}
|
|
610
663
|
];
|
|
611
|
-
expect(evaluateFilterConditions(condition,
|
|
664
|
+
expect(evaluateFilterConditions(condition, defaultOptions)).toBe(true);
|
|
612
665
|
});
|
|
613
666
|
test('should evaluate "includesAll" condition correctly', () => {
|
|
614
667
|
const condition = [
|
|
@@ -623,7 +676,7 @@ describe("Attribute Filter - Complete Test Suite", () => {
|
|
|
623
676
|
}
|
|
624
677
|
}
|
|
625
678
|
];
|
|
626
|
-
expect(evaluateFilterConditions(condition,
|
|
679
|
+
expect(evaluateFilterConditions(condition, defaultOptions)).toBe(true);
|
|
627
680
|
});
|
|
628
681
|
test('should evaluate "notIncludesAtLeastOne" condition correctly', () => {
|
|
629
682
|
const condition = [
|
|
@@ -638,7 +691,7 @@ describe("Attribute Filter - Complete Test Suite", () => {
|
|
|
638
691
|
}
|
|
639
692
|
}
|
|
640
693
|
];
|
|
641
|
-
expect(evaluateFilterConditions(condition,
|
|
694
|
+
expect(evaluateFilterConditions(condition, defaultOptions)).toBe(true);
|
|
642
695
|
});
|
|
643
696
|
test('should evaluate "notIncludesAll" condition correctly', () => {
|
|
644
697
|
const condition = [
|
|
@@ -653,7 +706,7 @@ describe("Attribute Filter - Complete Test Suite", () => {
|
|
|
653
706
|
}
|
|
654
707
|
}
|
|
655
708
|
];
|
|
656
|
-
expect(evaluateFilterConditions(condition,
|
|
709
|
+
expect(evaluateFilterConditions(condition, defaultOptions)).toBe(true);
|
|
657
710
|
});
|
|
658
711
|
test('should evaluate "empty" condition correctly', () => {
|
|
659
712
|
const condition = [
|
|
@@ -667,7 +720,7 @@ describe("Attribute Filter - Complete Test Suite", () => {
|
|
|
667
720
|
}
|
|
668
721
|
}
|
|
669
722
|
];
|
|
670
|
-
expect(evaluateFilterConditions(condition,
|
|
723
|
+
expect(evaluateFilterConditions(condition, defaultOptions)).toBe(false);
|
|
671
724
|
});
|
|
672
725
|
test('should evaluate "any" condition correctly', () => {
|
|
673
726
|
const condition = [
|
|
@@ -681,7 +734,7 @@ describe("Attribute Filter - Complete Test Suite", () => {
|
|
|
681
734
|
}
|
|
682
735
|
}
|
|
683
736
|
];
|
|
684
|
-
expect(evaluateFilterConditions(condition,
|
|
737
|
+
expect(evaluateFilterConditions(condition, defaultOptions)).toBe(true);
|
|
685
738
|
});
|
|
686
739
|
});
|
|
687
740
|
describe("DateTime conditions (8 cases)", () => {
|
|
@@ -693,13 +746,13 @@ describe("Attribute Filter - Complete Test Suite", () => {
|
|
|
693
746
|
operators: "and",
|
|
694
747
|
data: {
|
|
695
748
|
logic: "lessThan",
|
|
696
|
-
value:
|
|
697
|
-
//
|
|
749
|
+
value: 30,
|
|
750
|
+
// Check if signUpDate is within the last 30 days (it's not, so should be false)
|
|
698
751
|
attrId: "signUpDate-attr"
|
|
699
752
|
}
|
|
700
753
|
}
|
|
701
754
|
];
|
|
702
|
-
expect(evaluateFilterConditions(condition,
|
|
755
|
+
expect(evaluateFilterConditions(condition, defaultOptions)).toBe(false);
|
|
703
756
|
});
|
|
704
757
|
test('should evaluate "exactly" condition correctly', () => {
|
|
705
758
|
const condition = [
|
|
@@ -715,7 +768,7 @@ describe("Attribute Filter - Complete Test Suite", () => {
|
|
|
715
768
|
}
|
|
716
769
|
}
|
|
717
770
|
];
|
|
718
|
-
expect(evaluateFilterConditions(condition,
|
|
771
|
+
expect(evaluateFilterConditions(condition, defaultOptions)).toBe(false);
|
|
719
772
|
});
|
|
720
773
|
test('should evaluate "moreThan" condition correctly', () => {
|
|
721
774
|
const condition = [
|
|
@@ -731,7 +784,7 @@ describe("Attribute Filter - Complete Test Suite", () => {
|
|
|
731
784
|
}
|
|
732
785
|
}
|
|
733
786
|
];
|
|
734
|
-
expect(evaluateFilterConditions(condition,
|
|
787
|
+
expect(evaluateFilterConditions(condition, defaultOptions)).toBe(true);
|
|
735
788
|
});
|
|
736
789
|
test('should evaluate "before" condition correctly', () => {
|
|
737
790
|
const condition = [
|
|
@@ -746,7 +799,7 @@ describe("Attribute Filter - Complete Test Suite", () => {
|
|
|
746
799
|
}
|
|
747
800
|
}
|
|
748
801
|
];
|
|
749
|
-
expect(evaluateFilterConditions(condition,
|
|
802
|
+
expect(evaluateFilterConditions(condition, defaultOptions)).toBe(true);
|
|
750
803
|
});
|
|
751
804
|
test('should evaluate "on" condition correctly', () => {
|
|
752
805
|
const condition = [
|
|
@@ -761,7 +814,7 @@ describe("Attribute Filter - Complete Test Suite", () => {
|
|
|
761
814
|
}
|
|
762
815
|
}
|
|
763
816
|
];
|
|
764
|
-
expect(evaluateFilterConditions(condition,
|
|
817
|
+
expect(evaluateFilterConditions(condition, defaultOptions)).toBe(true);
|
|
765
818
|
});
|
|
766
819
|
test('should evaluate "after" condition correctly', () => {
|
|
767
820
|
const condition = [
|
|
@@ -776,7 +829,7 @@ describe("Attribute Filter - Complete Test Suite", () => {
|
|
|
776
829
|
}
|
|
777
830
|
}
|
|
778
831
|
];
|
|
779
|
-
expect(evaluateFilterConditions(condition,
|
|
832
|
+
expect(evaluateFilterConditions(condition, defaultOptions)).toBe(true);
|
|
780
833
|
});
|
|
781
834
|
test('should evaluate "empty" condition correctly', () => {
|
|
782
835
|
const condition = [
|
|
@@ -790,7 +843,7 @@ describe("Attribute Filter - Complete Test Suite", () => {
|
|
|
790
843
|
}
|
|
791
844
|
}
|
|
792
845
|
];
|
|
793
|
-
expect(evaluateFilterConditions(condition,
|
|
846
|
+
expect(evaluateFilterConditions(condition, defaultOptions)).toBe(false);
|
|
794
847
|
});
|
|
795
848
|
test('should evaluate "any" condition correctly', () => {
|
|
796
849
|
const condition = [
|
|
@@ -804,7 +857,7 @@ describe("Attribute Filter - Complete Test Suite", () => {
|
|
|
804
857
|
}
|
|
805
858
|
}
|
|
806
859
|
];
|
|
807
|
-
expect(evaluateFilterConditions(condition,
|
|
860
|
+
expect(evaluateFilterConditions(condition, defaultOptions)).toBe(true);
|
|
808
861
|
});
|
|
809
862
|
});
|
|
810
863
|
describe("Complex conditions with AND/OR logic", () => {
|
|
@@ -839,7 +892,7 @@ describe("Attribute Filter - Complete Test Suite", () => {
|
|
|
839
892
|
]
|
|
840
893
|
}
|
|
841
894
|
];
|
|
842
|
-
expect(evaluateFilterConditions(condition,
|
|
895
|
+
expect(evaluateFilterConditions(condition, defaultOptions)).toBe(true);
|
|
843
896
|
});
|
|
844
897
|
test("should evaluate OR condition correctly", () => {
|
|
845
898
|
const condition = [
|
|
@@ -872,7 +925,7 @@ describe("Attribute Filter - Complete Test Suite", () => {
|
|
|
872
925
|
]
|
|
873
926
|
}
|
|
874
927
|
];
|
|
875
|
-
expect(evaluateFilterConditions(condition,
|
|
928
|
+
expect(evaluateFilterConditions(condition, defaultOptions)).toBe(true);
|
|
876
929
|
});
|
|
877
930
|
test("should evaluate mixed AND/OR condition correctly", () => {
|
|
878
931
|
const condition = [
|
|
@@ -923,15 +976,15 @@ describe("Attribute Filter - Complete Test Suite", () => {
|
|
|
923
976
|
]
|
|
924
977
|
}
|
|
925
978
|
];
|
|
926
|
-
expect(evaluateFilterConditions(condition,
|
|
979
|
+
expect(evaluateFilterConditions(condition, defaultOptions)).toBe(true);
|
|
927
980
|
});
|
|
928
981
|
});
|
|
929
982
|
describe("Edge cases and error handling", () => {
|
|
930
983
|
test("should handle empty conditions array", () => {
|
|
931
|
-
expect(evaluateFilterConditions([],
|
|
984
|
+
expect(evaluateFilterConditions([], defaultOptions)).toBe(true);
|
|
932
985
|
});
|
|
933
986
|
test("should handle null/undefined conditions", () => {
|
|
934
|
-
expect(evaluateFilterConditions(null,
|
|
987
|
+
expect(evaluateFilterConditions(null, defaultOptions)).toBe(true);
|
|
935
988
|
});
|
|
936
989
|
test("should handle missing attribute", () => {
|
|
937
990
|
const condition = [
|
|
@@ -946,7 +999,7 @@ describe("Attribute Filter - Complete Test Suite", () => {
|
|
|
946
999
|
}
|
|
947
1000
|
}
|
|
948
1001
|
];
|
|
949
|
-
expect(evaluateFilterConditions(condition,
|
|
1002
|
+
expect(evaluateFilterConditions(condition, defaultOptions)).toBe(false);
|
|
950
1003
|
});
|
|
951
1004
|
test("should handle missing user attribute value", () => {
|
|
952
1005
|
const userAttributesWithoutEmail = {
|
|
@@ -965,17 +1018,21 @@ describe("Attribute Filter - Complete Test Suite", () => {
|
|
|
965
1018
|
}
|
|
966
1019
|
}
|
|
967
1020
|
];
|
|
968
|
-
expect(
|
|
969
|
-
|
|
970
|
-
|
|
1021
|
+
expect(
|
|
1022
|
+
evaluateFilterConditions(condition, {
|
|
1023
|
+
...defaultOptions,
|
|
1024
|
+
userAttributes: userAttributesWithoutEmail
|
|
1025
|
+
})
|
|
1026
|
+
).toBe(false);
|
|
971
1027
|
});
|
|
972
1028
|
test("should handle invalid data type", () => {
|
|
973
1029
|
const invalidAttribute = [
|
|
974
1030
|
{
|
|
975
1031
|
id: "invalid-attr",
|
|
976
1032
|
codeName: "invalid",
|
|
977
|
-
dataType: 999
|
|
978
|
-
// Invalid data type
|
|
1033
|
+
dataType: 999,
|
|
1034
|
+
// Invalid data type for testing
|
|
1035
|
+
bizType: import_types2.AttributeBizTypes.User
|
|
979
1036
|
}
|
|
980
1037
|
];
|
|
981
1038
|
const condition = [
|
|
@@ -990,7 +1047,12 @@ describe("Attribute Filter - Complete Test Suite", () => {
|
|
|
990
1047
|
}
|
|
991
1048
|
}
|
|
992
1049
|
];
|
|
993
|
-
expect(
|
|
1050
|
+
expect(
|
|
1051
|
+
evaluateFilterConditions(condition, {
|
|
1052
|
+
...defaultOptions,
|
|
1053
|
+
attributes: invalidAttribute
|
|
1054
|
+
})
|
|
1055
|
+
).toBe(false);
|
|
994
1056
|
});
|
|
995
1057
|
test("should handle invalid logic", () => {
|
|
996
1058
|
const condition = [
|
|
@@ -1005,7 +1067,7 @@ describe("Attribute Filter - Complete Test Suite", () => {
|
|
|
1005
1067
|
}
|
|
1006
1068
|
}
|
|
1007
1069
|
];
|
|
1008
|
-
expect(evaluateFilterConditions(condition,
|
|
1070
|
+
expect(evaluateFilterConditions(condition, defaultOptions)).toBe(false);
|
|
1009
1071
|
});
|
|
1010
1072
|
test("should handle missing data in condition", () => {
|
|
1011
1073
|
const condition = [
|
|
@@ -1016,7 +1078,7 @@ describe("Attribute Filter - Complete Test Suite", () => {
|
|
|
1016
1078
|
data: void 0
|
|
1017
1079
|
}
|
|
1018
1080
|
];
|
|
1019
|
-
expect(evaluateFilterConditions(condition,
|
|
1081
|
+
expect(evaluateFilterConditions(condition, defaultOptions)).toBe(false);
|
|
1020
1082
|
});
|
|
1021
1083
|
test("should handle missing attrId in condition", () => {
|
|
1022
1084
|
const condition = [
|
|
@@ -1030,7 +1092,383 @@ describe("Attribute Filter - Complete Test Suite", () => {
|
|
|
1030
1092
|
}
|
|
1031
1093
|
}
|
|
1032
1094
|
];
|
|
1033
|
-
expect(evaluateFilterConditions(condition,
|
|
1095
|
+
expect(evaluateFilterConditions(condition, defaultOptions)).toBe(false);
|
|
1096
|
+
});
|
|
1097
|
+
});
|
|
1098
|
+
describe("Company attributes evaluation", () => {
|
|
1099
|
+
test("should evaluate company string attribute correctly", () => {
|
|
1100
|
+
const condition = [
|
|
1101
|
+
{
|
|
1102
|
+
id: "company-condition-1",
|
|
1103
|
+
type: "condition",
|
|
1104
|
+
operators: "and",
|
|
1105
|
+
data: {
|
|
1106
|
+
logic: "is",
|
|
1107
|
+
value: "Example Corp",
|
|
1108
|
+
attrId: "company-name-attr"
|
|
1109
|
+
}
|
|
1110
|
+
}
|
|
1111
|
+
];
|
|
1112
|
+
expect(evaluateFilterConditions(condition, defaultOptions)).toBe(true);
|
|
1113
|
+
});
|
|
1114
|
+
test("should evaluate company number attribute correctly", () => {
|
|
1115
|
+
const condition = [
|
|
1116
|
+
{
|
|
1117
|
+
id: "company-condition-2",
|
|
1118
|
+
type: "condition",
|
|
1119
|
+
operators: "and",
|
|
1120
|
+
data: {
|
|
1121
|
+
logic: "isGreaterThan",
|
|
1122
|
+
value: 100,
|
|
1123
|
+
attrId: "company-size-attr"
|
|
1124
|
+
}
|
|
1125
|
+
}
|
|
1126
|
+
];
|
|
1127
|
+
expect(evaluateFilterConditions(condition, defaultOptions)).toBe(true);
|
|
1128
|
+
});
|
|
1129
|
+
test("should handle missing company attribute value", () => {
|
|
1130
|
+
const condition = [
|
|
1131
|
+
{
|
|
1132
|
+
id: "company-condition-3",
|
|
1133
|
+
type: "condition",
|
|
1134
|
+
operators: "and",
|
|
1135
|
+
data: {
|
|
1136
|
+
logic: "is",
|
|
1137
|
+
value: "Test Corp",
|
|
1138
|
+
attrId: "company-name-attr"
|
|
1139
|
+
}
|
|
1140
|
+
}
|
|
1141
|
+
];
|
|
1142
|
+
const optionsWithoutCompany = {
|
|
1143
|
+
...defaultOptions,
|
|
1144
|
+
companyAttributes: {}
|
|
1145
|
+
};
|
|
1146
|
+
expect(evaluateFilterConditions(condition, optionsWithoutCompany)).toBe(false);
|
|
1147
|
+
});
|
|
1148
|
+
});
|
|
1149
|
+
describe("Membership attributes evaluation", () => {
|
|
1150
|
+
test("should evaluate membership string attribute correctly", () => {
|
|
1151
|
+
const condition = [
|
|
1152
|
+
{
|
|
1153
|
+
id: "membership-condition-1",
|
|
1154
|
+
type: "condition",
|
|
1155
|
+
operators: "and",
|
|
1156
|
+
data: {
|
|
1157
|
+
logic: "is",
|
|
1158
|
+
value: "premium",
|
|
1159
|
+
attrId: "membership-level-attr"
|
|
1160
|
+
}
|
|
1161
|
+
}
|
|
1162
|
+
];
|
|
1163
|
+
expect(evaluateFilterConditions(condition, defaultOptions)).toBe(true);
|
|
1164
|
+
});
|
|
1165
|
+
test("should evaluate membership number attribute correctly", () => {
|
|
1166
|
+
const condition = [
|
|
1167
|
+
{
|
|
1168
|
+
id: "membership-condition-2",
|
|
1169
|
+
type: "condition",
|
|
1170
|
+
operators: "and",
|
|
1171
|
+
data: {
|
|
1172
|
+
logic: "isGreaterThanOrEqualTo",
|
|
1173
|
+
value: 12,
|
|
1174
|
+
attrId: "membership-duration-attr"
|
|
1175
|
+
}
|
|
1176
|
+
}
|
|
1177
|
+
];
|
|
1178
|
+
expect(evaluateFilterConditions(condition, defaultOptions)).toBe(true);
|
|
1179
|
+
});
|
|
1180
|
+
test("should handle missing membership attribute value", () => {
|
|
1181
|
+
const condition = [
|
|
1182
|
+
{
|
|
1183
|
+
id: "membership-condition-3",
|
|
1184
|
+
type: "condition",
|
|
1185
|
+
operators: "and",
|
|
1186
|
+
data: {
|
|
1187
|
+
logic: "is",
|
|
1188
|
+
value: "premium",
|
|
1189
|
+
attrId: "membership-level-attr"
|
|
1190
|
+
}
|
|
1191
|
+
}
|
|
1192
|
+
];
|
|
1193
|
+
const optionsWithoutMembership = {
|
|
1194
|
+
...defaultOptions,
|
|
1195
|
+
membershipAttributes: {}
|
|
1196
|
+
};
|
|
1197
|
+
expect(evaluateFilterConditions(condition, optionsWithoutMembership)).toBe(false);
|
|
1198
|
+
});
|
|
1199
|
+
});
|
|
1200
|
+
describe("Mixed attribute types in conditions", () => {
|
|
1201
|
+
test("should evaluate mixed user and company attributes with AND logic", () => {
|
|
1202
|
+
const condition = [
|
|
1203
|
+
{
|
|
1204
|
+
id: "mixed-condition-1",
|
|
1205
|
+
type: "group",
|
|
1206
|
+
operators: "and",
|
|
1207
|
+
data: {},
|
|
1208
|
+
conditions: [
|
|
1209
|
+
{
|
|
1210
|
+
id: "mixed-condition-1-1",
|
|
1211
|
+
type: "condition",
|
|
1212
|
+
operators: "and",
|
|
1213
|
+
data: {
|
|
1214
|
+
logic: "contains",
|
|
1215
|
+
value: "example.com",
|
|
1216
|
+
attrId: "email-attr"
|
|
1217
|
+
}
|
|
1218
|
+
},
|
|
1219
|
+
{
|
|
1220
|
+
id: "mixed-condition-1-2",
|
|
1221
|
+
type: "condition",
|
|
1222
|
+
operators: "and",
|
|
1223
|
+
data: {
|
|
1224
|
+
logic: "isGreaterThan",
|
|
1225
|
+
value: 100,
|
|
1226
|
+
attrId: "company-size-attr"
|
|
1227
|
+
}
|
|
1228
|
+
}
|
|
1229
|
+
]
|
|
1230
|
+
}
|
|
1231
|
+
];
|
|
1232
|
+
expect(evaluateFilterConditions(condition, defaultOptions)).toBe(true);
|
|
1233
|
+
});
|
|
1234
|
+
test("should evaluate mixed user, company, and membership attributes with OR logic", () => {
|
|
1235
|
+
const condition = [
|
|
1236
|
+
{
|
|
1237
|
+
id: "mixed-condition-2",
|
|
1238
|
+
type: "group",
|
|
1239
|
+
operators: "or",
|
|
1240
|
+
data: {},
|
|
1241
|
+
conditions: [
|
|
1242
|
+
{
|
|
1243
|
+
id: "mixed-condition-2-1",
|
|
1244
|
+
type: "condition",
|
|
1245
|
+
operators: "or",
|
|
1246
|
+
data: {
|
|
1247
|
+
logic: "is",
|
|
1248
|
+
value: "wrong@email.com",
|
|
1249
|
+
attrId: "email-attr"
|
|
1250
|
+
}
|
|
1251
|
+
},
|
|
1252
|
+
{
|
|
1253
|
+
id: "mixed-condition-2-2",
|
|
1254
|
+
type: "condition",
|
|
1255
|
+
operators: "or",
|
|
1256
|
+
data: {
|
|
1257
|
+
logic: "is",
|
|
1258
|
+
value: "Example Corp",
|
|
1259
|
+
attrId: "company-name-attr"
|
|
1260
|
+
}
|
|
1261
|
+
},
|
|
1262
|
+
{
|
|
1263
|
+
id: "mixed-condition-2-3",
|
|
1264
|
+
type: "condition",
|
|
1265
|
+
operators: "or",
|
|
1266
|
+
data: {
|
|
1267
|
+
logic: "is",
|
|
1268
|
+
value: "premium",
|
|
1269
|
+
attrId: "membership-level-attr"
|
|
1270
|
+
}
|
|
1271
|
+
}
|
|
1272
|
+
]
|
|
1273
|
+
}
|
|
1274
|
+
];
|
|
1275
|
+
expect(evaluateFilterConditions(condition, defaultOptions)).toBe(true);
|
|
1276
|
+
});
|
|
1277
|
+
});
|
|
1278
|
+
describe("evaluateAttributeCondition function tests", () => {
|
|
1279
|
+
test("should evaluate single attribute condition correctly", () => {
|
|
1280
|
+
const condition = {
|
|
1281
|
+
id: "single-condition-1",
|
|
1282
|
+
type: "condition",
|
|
1283
|
+
operators: "and",
|
|
1284
|
+
data: {
|
|
1285
|
+
logic: "is",
|
|
1286
|
+
value: "user@example.com",
|
|
1287
|
+
attrId: "email-attr"
|
|
1288
|
+
}
|
|
1289
|
+
};
|
|
1290
|
+
expect(evaluateAttributeCondition(condition, defaultOptions)).toBe(true);
|
|
1291
|
+
});
|
|
1292
|
+
test("should handle missing data in single condition", () => {
|
|
1293
|
+
const condition = {
|
|
1294
|
+
id: "single-condition-2",
|
|
1295
|
+
type: "condition",
|
|
1296
|
+
operators: "and",
|
|
1297
|
+
data: void 0
|
|
1298
|
+
};
|
|
1299
|
+
expect(evaluateAttributeCondition(condition, defaultOptions)).toBe(false);
|
|
1300
|
+
});
|
|
1301
|
+
test("should handle missing attribute in single condition", () => {
|
|
1302
|
+
const condition = {
|
|
1303
|
+
id: "single-condition-3",
|
|
1304
|
+
type: "condition",
|
|
1305
|
+
operators: "and",
|
|
1306
|
+
data: {
|
|
1307
|
+
logic: "is",
|
|
1308
|
+
value: "test",
|
|
1309
|
+
attrId: "non-existent-attr"
|
|
1310
|
+
}
|
|
1311
|
+
};
|
|
1312
|
+
expect(evaluateAttributeCondition(condition, defaultOptions)).toBe(false);
|
|
1313
|
+
});
|
|
1314
|
+
test("should handle missing attributes array", () => {
|
|
1315
|
+
const condition = {
|
|
1316
|
+
id: "single-condition-4",
|
|
1317
|
+
type: "condition",
|
|
1318
|
+
operators: "and",
|
|
1319
|
+
data: {
|
|
1320
|
+
logic: "is",
|
|
1321
|
+
value: "test",
|
|
1322
|
+
attrId: "email-attr"
|
|
1323
|
+
}
|
|
1324
|
+
};
|
|
1325
|
+
const optionsWithoutAttributes = {
|
|
1326
|
+
...defaultOptions,
|
|
1327
|
+
attributes: void 0
|
|
1328
|
+
};
|
|
1329
|
+
expect(evaluateAttributeCondition(condition, optionsWithoutAttributes)).toBe(false);
|
|
1330
|
+
});
|
|
1331
|
+
test("should evaluate company attribute in single condition", () => {
|
|
1332
|
+
const condition = {
|
|
1333
|
+
id: "single-condition-5",
|
|
1334
|
+
type: "condition",
|
|
1335
|
+
operators: "and",
|
|
1336
|
+
data: {
|
|
1337
|
+
logic: "is",
|
|
1338
|
+
value: "Example Corp",
|
|
1339
|
+
attrId: "company-name-attr"
|
|
1340
|
+
}
|
|
1341
|
+
};
|
|
1342
|
+
expect(evaluateAttributeCondition(condition, defaultOptions)).toBe(true);
|
|
1343
|
+
});
|
|
1344
|
+
test("should evaluate membership attribute in single condition", () => {
|
|
1345
|
+
const condition = {
|
|
1346
|
+
id: "single-condition-6",
|
|
1347
|
+
type: "condition",
|
|
1348
|
+
operators: "and",
|
|
1349
|
+
data: {
|
|
1350
|
+
logic: "is",
|
|
1351
|
+
value: "premium",
|
|
1352
|
+
attrId: "membership-level-attr"
|
|
1353
|
+
}
|
|
1354
|
+
};
|
|
1355
|
+
expect(evaluateAttributeCondition(condition, defaultOptions)).toBe(true);
|
|
1356
|
+
});
|
|
1357
|
+
});
|
|
1358
|
+
describe("Additional edge cases for new functionality", () => {
|
|
1359
|
+
test("should handle empty attribute contexts", () => {
|
|
1360
|
+
const condition = [
|
|
1361
|
+
{
|
|
1362
|
+
id: "empty-context-1",
|
|
1363
|
+
type: "condition",
|
|
1364
|
+
operators: "and",
|
|
1365
|
+
data: {
|
|
1366
|
+
logic: "is",
|
|
1367
|
+
value: "test",
|
|
1368
|
+
attrId: "email-attr"
|
|
1369
|
+
}
|
|
1370
|
+
}
|
|
1371
|
+
];
|
|
1372
|
+
const emptyOptions = {
|
|
1373
|
+
attributes: testAttributes,
|
|
1374
|
+
userAttributes: {},
|
|
1375
|
+
companyAttributes: {},
|
|
1376
|
+
membershipAttributes: {}
|
|
1377
|
+
};
|
|
1378
|
+
expect(evaluateFilterConditions(condition, emptyOptions)).toBe(false);
|
|
1379
|
+
});
|
|
1380
|
+
test("should handle missing attribute contexts", () => {
|
|
1381
|
+
const condition = [
|
|
1382
|
+
{
|
|
1383
|
+
id: "missing-context-1",
|
|
1384
|
+
type: "condition",
|
|
1385
|
+
operators: "and",
|
|
1386
|
+
data: {
|
|
1387
|
+
logic: "is",
|
|
1388
|
+
value: "test",
|
|
1389
|
+
attrId: "email-attr"
|
|
1390
|
+
}
|
|
1391
|
+
}
|
|
1392
|
+
];
|
|
1393
|
+
const minimalOptions = {
|
|
1394
|
+
attributes: testAttributes
|
|
1395
|
+
};
|
|
1396
|
+
expect(evaluateFilterConditions(condition, minimalOptions)).toBe(false);
|
|
1397
|
+
});
|
|
1398
|
+
test("should handle complex nested groups with mixed attribute types", () => {
|
|
1399
|
+
const condition = [
|
|
1400
|
+
{
|
|
1401
|
+
id: "complex-nested-1",
|
|
1402
|
+
type: "group",
|
|
1403
|
+
operators: "and",
|
|
1404
|
+
data: {},
|
|
1405
|
+
conditions: [
|
|
1406
|
+
{
|
|
1407
|
+
id: "complex-nested-1-1",
|
|
1408
|
+
type: "group",
|
|
1409
|
+
operators: "or",
|
|
1410
|
+
data: {},
|
|
1411
|
+
conditions: [
|
|
1412
|
+
{
|
|
1413
|
+
id: "complex-nested-1-1-1",
|
|
1414
|
+
type: "condition",
|
|
1415
|
+
operators: "or",
|
|
1416
|
+
data: {
|
|
1417
|
+
logic: "contains",
|
|
1418
|
+
value: "example.com",
|
|
1419
|
+
attrId: "email-attr"
|
|
1420
|
+
}
|
|
1421
|
+
},
|
|
1422
|
+
{
|
|
1423
|
+
id: "complex-nested-1-1-2",
|
|
1424
|
+
type: "condition",
|
|
1425
|
+
operators: "or",
|
|
1426
|
+
data: {
|
|
1427
|
+
logic: "is",
|
|
1428
|
+
value: "Test Corp",
|
|
1429
|
+
attrId: "company-name-attr"
|
|
1430
|
+
}
|
|
1431
|
+
}
|
|
1432
|
+
]
|
|
1433
|
+
},
|
|
1434
|
+
{
|
|
1435
|
+
id: "complex-nested-1-2",
|
|
1436
|
+
type: "condition",
|
|
1437
|
+
operators: "and",
|
|
1438
|
+
data: {
|
|
1439
|
+
logic: "is",
|
|
1440
|
+
value: "premium",
|
|
1441
|
+
attrId: "membership-level-attr"
|
|
1442
|
+
}
|
|
1443
|
+
}
|
|
1444
|
+
]
|
|
1445
|
+
}
|
|
1446
|
+
];
|
|
1447
|
+
expect(evaluateFilterConditions(condition, defaultOptions)).toBe(true);
|
|
1448
|
+
});
|
|
1449
|
+
test("should handle empty group conditions", () => {
|
|
1450
|
+
const condition = [
|
|
1451
|
+
{
|
|
1452
|
+
id: "empty-group-1",
|
|
1453
|
+
type: "group",
|
|
1454
|
+
operators: "and",
|
|
1455
|
+
data: {},
|
|
1456
|
+
conditions: []
|
|
1457
|
+
}
|
|
1458
|
+
];
|
|
1459
|
+
expect(evaluateFilterConditions(condition, defaultOptions)).toBe(false);
|
|
1460
|
+
});
|
|
1461
|
+
test("should handle group with undefined conditions", () => {
|
|
1462
|
+
const condition = [
|
|
1463
|
+
{
|
|
1464
|
+
id: "undefined-group-1",
|
|
1465
|
+
type: "group",
|
|
1466
|
+
operators: "and",
|
|
1467
|
+
data: {},
|
|
1468
|
+
conditions: void 0
|
|
1469
|
+
}
|
|
1470
|
+
];
|
|
1471
|
+
expect(evaluateFilterConditions(condition, defaultOptions)).toBe(false);
|
|
1034
1472
|
});
|
|
1035
1473
|
});
|
|
1036
1474
|
});
|