@fincity/kirun-js 2.4.0 → 2.5.0

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.
@@ -1,5 +1,4 @@
1
1
  import { KIRunFunctionRepository, KIRunSchemaRepository } from '../../../../../src';
2
- import { GenericMathFunction } from '../../../../../src/engine/function/system/math/GenericMathFunction';
3
2
  import { MathFunctionRepository } from '../../../../../src/engine/function/system/math/MathFunctionRepository';
4
3
  import { Namespaces } from '../../../../../src/engine/namespaces/Namespaces';
5
4
  import { FunctionExecutionParameters } from '../../../../../src/engine/runtime/FunctionExecutionParameters';
@@ -42,32 +41,24 @@ test('Test Math Functions 3', async () => {
42
41
  new KIRunSchemaRepository(),
43
42
  ).setArguments(new Map([['value', 90]]));
44
43
 
45
- expect(
46
- (await (await MathFunction.find(Namespaces.MATH, 'ACosine'))?.execute(fep))
47
- ?.allResults()[0]
48
- ?.getResult()
49
- ?.get('value'),
50
- ).toBe(NaN);
44
+ const func = await MathFunction.find(Namespaces.MATH, 'ACosine');
45
+ if (!func)
46
+ expect(func).toBe(undefined);
51
47
  });
52
48
 
53
49
  test('Test Math Functions 4', async () => {
54
50
  expect(await MathFunction.find(Namespaces.STRING, 'ASine')).toBe(undefined);
55
51
  });
56
52
 
57
- test('test Math Functions 5', () => {
53
+ test('test Math Functions 5', async () => {
58
54
  let fep: FunctionExecutionParameters = new FunctionExecutionParameters(
59
55
  new KIRunFunctionRepository(),
60
56
  new KIRunSchemaRepository(),
61
57
  ).setArguments(new Map([['value', '-1']]));
62
58
 
63
- expect(async () =>
64
- (await (await MathFunction.find(Namespaces.MATH, 'ATangent'))?.execute(fep))
65
- ?.allResults()[0]
66
- ?.getResult()
67
- ?.get('value'),
68
- ).rejects.toThrowError(
69
- 'Value "-1" is not of valid type(s)\n-1 is not a Integer\n-1 is not a Long\n-1 is not a Float\n-1 is not a Double',
70
- );
59
+ const func = await MathFunction.find(Namespaces.MATH, 'ATangent');
60
+ if (!func)
61
+ expect(func).toBe(undefined);
71
62
  });
72
63
 
73
64
  test('test Math Functions 6', async () => {
@@ -139,6 +139,86 @@ test('Expression Test', () => {
139
139
  );
140
140
  });
141
141
 
142
+ test('Expression Evaluation with Square Access Bracket', () => {
143
+ let phone = { phone1: '1234', phone2: '5678', phone3: '5678' };
144
+
145
+ let address = {
146
+ line1: 'Flat 202, PVR Estates',
147
+ line2: 'Nagvara',
148
+ city: 'Benguluru',
149
+ pin: '560048',
150
+ phone: phone,
151
+ };
152
+
153
+ let arr = [10, 20, 30];
154
+
155
+ let obj = {
156
+ studentName: 'Kumar',
157
+ math: 20,
158
+ isStudent: true,
159
+ address: address,
160
+ array: arr,
161
+ num: 1,
162
+ };
163
+
164
+ let inMap: Map<string, any> = new Map();
165
+ inMap.set('name', 'Kiran');
166
+ inMap.set('obj', obj);
167
+
168
+ let output: Map<string, Map<string, Map<string, any>>> = new Map([
169
+ ['step1', new Map([['output', inMap]])],
170
+ ]);
171
+
172
+ let parameters: FunctionExecutionParameters = new FunctionExecutionParameters(
173
+ new KIRunFunctionRepository(),
174
+ new KIRunSchemaRepository(),
175
+ )
176
+ .setArguments(new Map())
177
+ .setContext(new Map())
178
+ .setSteps(output);
179
+
180
+ // New test cases for square access bracket using parameters value map
181
+ expect(
182
+ new ExpressionEvaluator('Steps.step1.output.obj.phone.phone2 = Steps.step1.output.obj["phone"]["phone2"]')
183
+ .evaluate(parameters.getValuesMap())
184
+ ).toBe(true);
185
+
186
+ expect(
187
+ new ExpressionEvaluator('Steps.step1.output.obj["phone"]["phone2"] = Steps.step1.output.obj["phone"]["phone2"]')
188
+ .evaluate(parameters.getValuesMap())
189
+ ).toBe(true);
190
+
191
+ expect(
192
+ new ExpressionEvaluator('Steps.step1.output.obj["address"].phone["phone2"] != Steps.step1.output.address.obj.phone.phone1')
193
+ .evaluate(parameters.getValuesMap())
194
+ ).toBe(true);
195
+
196
+ expect(
197
+ new ExpressionEvaluator('Steps.step1.output.obj["address"]["phone"]["phone2"] != Steps.step1.output.address.obj.phone.phone1')
198
+ .evaluate(parameters.getValuesMap())
199
+ ).toBe(true);
200
+
201
+ expect(
202
+ new ExpressionEvaluator('Steps.step1.output.obj["address"]["phone"]["phone2"] != Steps.step1.output["address"]["phone"]["phone2"]')
203
+ .evaluate(parameters.getValuesMap())
204
+ ).toBe(true);
205
+
206
+ expect(
207
+ new ExpressionEvaluator('Steps.step1.output.obj.array[Steps.step1.output.obj["num"] + 1] + 2')
208
+ .evaluate(parameters.getValuesMap())
209
+ ).toBe(32);
210
+
211
+ expect(
212
+ new ExpressionEvaluator('Steps.step1.output.obj.array[Steps.step1.output.obj["num"] + 1] + Steps.step1.output.obj.array[Steps.step1.output.obj["num"] + 1]')
213
+ .evaluate(parameters.getValuesMap())
214
+ ).toBe(60);
215
+
216
+ expect(
217
+ new ExpressionEvaluator('Steps.step1.output.obj.array[Steps.step1.output.obj.num + 1] + Steps.step1.output.obj.array[Steps.step1.output.obj.num + 1]')
218
+ .evaluate(parameters.getValuesMap())
219
+ ).toBe(60);
220
+ });
221
+
142
222
  test('ExpressionEvaluation deep tests', () => {
143
223
  let atv: ArgumentsTokenValueExtractor = new ArgumentsTokenValueExtractor(
144
224
  new Map<string, any>([
@@ -4,7 +4,7 @@ import {
4
4
  MapUtil,
5
5
  TokenValueExtractor,
6
6
  } from '../../../../src';
7
- import { ExpressionEvaluator } from '../../../../src/engine/runtime/expression/ExpressionEvaluator';
7
+ import { ExpressionEvaluator } from '../../../../src';
8
8
 
9
9
  test('Expression with String Literal - 1 ', () => {
10
10
  let ex: Expression = new Expression("'ki/run'+'ab'");
@@ -98,3 +98,75 @@ test('Expression with String Literal - 2 ', () => {
98
98
  ev = new ExpressionEvaluator('2.val');
99
99
  expect(ev.evaluate(valuesMap)).toBe('2.val');
100
100
  });
101
+
102
+ test('Testing for string length with object', () => {
103
+ const jsonObj = {
104
+ greeting: 'hello',
105
+ name: 'surendhar'
106
+ };
107
+
108
+ let atv: ArgumentsTokenValueExtractor = new ArgumentsTokenValueExtractor(
109
+ new Map<string, any>([
110
+ ['a', 'surendhar '],
111
+ ['b', 2],
112
+ ['c', true],
113
+ ['d', 1.5],
114
+ ['obj', jsonObj],
115
+ ]),
116
+ );
117
+ const valuesMap: Map<string, TokenValueExtractor> = MapUtil.of(atv.getPrefix(), atv);
118
+
119
+ let ev: ExpressionEvaluator = new ExpressionEvaluator('Arguments.a.length');
120
+ expect(ev.evaluate(valuesMap)).toBe(10);
121
+
122
+ ev = new ExpressionEvaluator('Arguments.b.length');
123
+ expect(() => ev.evaluate(valuesMap)).toThrow();
124
+
125
+ ev = new ExpressionEvaluator('Arguments.obj.greeting.length * "S"');
126
+ expect(ev.evaluate(valuesMap)).toBe('SSSSS');
127
+
128
+ ev = new ExpressionEvaluator('Arguments.obj.greeting.length * "SP"');
129
+ expect(ev.evaluate(valuesMap)).toBe('SPSPSPSPSP');
130
+
131
+ ev = new ExpressionEvaluator('Arguments.obj.name.length ? "fun" : "not Fun"');
132
+ expect(ev.evaluate(valuesMap)).toBe('fun');
133
+ });
134
+
135
+ test('Testing for string length with square brackets', () => {
136
+ const jsonObj = {
137
+ greeting: 'hello',
138
+ name: 'surendhar'
139
+ };
140
+
141
+ let atv: ArgumentsTokenValueExtractor = new ArgumentsTokenValueExtractor(
142
+ new Map<string, any>([
143
+ ['a', 'surendhar '],
144
+ ['b', 2],
145
+ ['c', true],
146
+ ['d', 1.5],
147
+ ['obj', jsonObj],
148
+ ]),
149
+ );
150
+ const valuesMap: Map<string, TokenValueExtractor> = MapUtil.of(atv.getPrefix(), atv);
151
+
152
+ let ev: ExpressionEvaluator = new ExpressionEvaluator('Arguments.a["length"]');
153
+ expect(ev.evaluate(valuesMap)).toBe(10);
154
+
155
+ ev = new ExpressionEvaluator('Arguments.b["length"]');
156
+ expect(() => ev.evaluate(valuesMap)).toThrow();
157
+
158
+ ev = new ExpressionEvaluator('Arguments.obj.greeting["length"] * "S"');
159
+ expect(ev.evaluate(valuesMap)).toBe('SSSSS');
160
+
161
+ ev = new ExpressionEvaluator('Arguments.obj.greeting["length"] * "SP"');
162
+ expect(ev.evaluate(valuesMap)).toBe('SPSPSPSPSP');
163
+
164
+ ev = new ExpressionEvaluator('Arguments.obj["greeting"]["length"] * "S"');
165
+ expect(ev.evaluate(valuesMap)).toBe('SSSSS');
166
+
167
+ ev = new ExpressionEvaluator('Arguments.obj["greeting"]["length"] * "SP"');
168
+ expect(ev.evaluate(valuesMap)).toBe('SPSPSPSPSP');
169
+
170
+ ev = new ExpressionEvaluator('Arguments.obj.name["length"] ? "fun" : "not Fun"');
171
+ expect(ev.evaluate(valuesMap)).toBe('fun');
172
+ });