@fincity/kirun-js 3.2.0 → 3.2.2

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.
@@ -0,0 +1,8 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "Bash(npm test:*)",
5
+ "Bash(mvn test:*)"
6
+ ]
7
+ }
8
+ }
@@ -596,6 +596,58 @@ test('ternary expression with displayValue equality check', () => {
596
596
  expect(ev.evaluate(MapUtil.of(ttv.getPrefix(), ttv))).toBe('11');
597
597
  });
598
598
 
599
+ class StoreTokenValueExtractor extends TokenValueExtractor {
600
+ private store: any;
601
+
602
+ constructor(store: any) {
603
+ super();
604
+ this.store = store;
605
+ }
606
+
607
+ protected getValueInternal(token: string): any {
608
+ return this.retrieveElementFrom(token, token.split('.'), 1, this.store);
609
+ }
610
+ public getPrefix(): string {
611
+ return 'Store.';
612
+ }
613
+ public getStore(): any {
614
+ return this.store;
615
+ }
616
+ }
617
+
618
+ test('String vs Number equality with nested expression substitution', () => {
619
+ // Setup store with string "413" and number 413
620
+ let stv = new StoreTokenValueExtractor({ strNumber: '413', number: 413 });
621
+ let valuesMap: Map<string, TokenValueExtractor> = MapUtil.of(stv.getPrefix(), stv);
622
+
623
+ // Direct comparison: Store.strNumber = Store.number should return false
624
+ // because "413" (string) != 413 (number) - different types
625
+ let ev = new ExpressionEvaluator('Store.strNumber = Store.number');
626
+ expect(ev.evaluate(valuesMap)).toBe(false);
627
+
628
+ // Nested expression substitution: {{Store.strNumber}} = Store.number should return true
629
+ // because {{Store.strNumber}} is replaced with "413" making the expression "413 = Store.number"
630
+ // which evaluates to 413 = 413 (both numbers) and returns true
631
+ ev = new ExpressionEvaluator('{{Store.strNumber}} = Store.number');
632
+ expect(ev.evaluate(valuesMap)).toBe(true);
633
+
634
+ // Additional test: verify the string value directly
635
+ ev = new ExpressionEvaluator('Store.strNumber');
636
+ expect(ev.evaluate(valuesMap)).toBe('413');
637
+
638
+ // Additional test: verify the number value directly
639
+ ev = new ExpressionEvaluator('Store.number');
640
+ expect(ev.evaluate(valuesMap)).toBe(413);
641
+
642
+ // Additional test: string to string comparison should return true
643
+ ev = new ExpressionEvaluator("Store.strNumber = '413'");
644
+ expect(ev.evaluate(valuesMap)).toBe(true);
645
+
646
+ // Additional test: number to number comparison should return true
647
+ ev = new ExpressionEvaluator('Store.number = 413');
648
+ expect(ev.evaluate(valuesMap)).toBe(true);
649
+ });
650
+
599
651
  test('unary minus operator', () => {
600
652
  // Simple negative number
601
653
  let ev = new ExpressionEvaluator('-5');
@@ -602,7 +602,7 @@ describe('Original Expression Parsing Tests', () => {
602
602
  expect(ev.evaluate(valuesMapWithValue)).toBe('Application : My Application Title');
603
603
 
604
604
  // Store with value null - should return location.expression
605
-
605
+ // Note: expression value includes quotes so it becomes a valid string literal when substituted
606
606
  const storeValueNull = new TestTokenValueExtractor('Store.', {
607
607
  urlDetails: { pageName: 'home' },
608
608
  pageDefinition: {
@@ -611,7 +611,7 @@ describe('Original Expression Parsing Tests', () => {
611
611
  title: {
612
612
  name: {
613
613
  value: null,
614
- location: { expression: 'Expression Fallback Title' },
614
+ location: { expression: "'Expression Fallback Title'" },
615
615
  },
616
616
  },
617
617
  },
@@ -632,7 +632,7 @@ describe('Original Expression Parsing Tests', () => {
632
632
  properties: {
633
633
  title: {
634
634
  name: {
635
- location: { expression: 'Expression Fallback Title' },
635
+ location: { expression: "'Expression Fallback Title'" },
636
636
  },
637
637
  },
638
638
  },
@@ -55,3 +55,31 @@ test('ObjectValueSetterExtractor Test', async () => {
55
55
  extractor.setValue('Store.plain', 'plainString', false, false);
56
56
  expect(extractor.getValue('Store.plain')).toStrictEqual('plainString');
57
57
  });
58
+
59
+ test('ObjectValueSetterExtractor - set empty object then set nested property with numeric key', async () => {
60
+ let store = {};
61
+
62
+ let extractor: ObjectValueSetterExtractor = new ObjectValueSetterExtractor(store, 'Store');
63
+
64
+ extractor.setValue('Store.x', {});
65
+ expect(extractor.getValue('Store.x')).toMatchObject({});
66
+
67
+ extractor.setValue('Store.x.1', 'kiran');
68
+ expect(extractor.getValue('Store.x.1')).toBe('kiran');
69
+ expect(extractor.getValue('Store.x')).toMatchObject({ '1': 'kiran' });
70
+ });
71
+
72
+ test('ObjectValueSetterExtractor - set empty array then set element with numeric index', async () => {
73
+ let store = {};
74
+
75
+ let extractor: ObjectValueSetterExtractor = new ObjectValueSetterExtractor(store, 'Store');
76
+
77
+ extractor.setValue('Store.arr', []);
78
+ expect(extractor.getValue('Store.arr')).toMatchObject([]);
79
+
80
+ extractor.setValue('Store.arr.1', 'value');
81
+ expect(extractor.getValue('Store.arr.1')).toBe('value');
82
+ const arr = extractor.getValue('Store.arr');
83
+ expect(arr.length).toBe(2);
84
+ expect(arr[1]).toBe('value');
85
+ });