[AAE-19968] Field visibility condition using Integer and greater than not working (#9305)

* [AAE-19968] Fix

* [AAE-19968] Tests with small update

* [AAE-19968] Update

* [AAE-19968] Revert

* [AAE-19968] Small refactor

* [AAE-19968] Add test

* [AAE-19968] Tests

* [AAE-19968] Update model

* [AAE-19968] Small update

* [AAE-19968] Update

* Fix for failing unit tests

* [AAE-19968] Refactor

* [AAE-19968] Refactor

* [AAE-19968] Refactor

* [AAE-19968] Add test

* [AAE-19968] Refactor
This commit is contained in:
Wiktor Danielewski
2024-02-08 15:19:32 +01:00
committed by GitHub
parent a893fafa07
commit 9343fe65a6
2 changed files with 207 additions and 37 deletions

View File

@@ -38,7 +38,7 @@ export class WidgetVisibilityModel {
}
}
get leftType(): string {
get leftType(): string | null {
if (this.leftFormFieldId) {
return WidgetTypeEnum.field;
} else if (this.leftRestResponseId) {
@@ -54,20 +54,21 @@ export class WidgetVisibilityModel {
}
get leftValue(): any {
if (this.json.leftValue) {
if (this.json.leftValue?.toString()) {
return this.json.leftValue;
} else if (this.leftFormFieldId) {
return this.leftFormFieldId;
} else {
} else if(this.leftRestResponseId){
return this.leftRestResponseId;
}
return null;
}
set leftValue(leftValue: any) {
this.json.leftValue = leftValue;
}
get rightType(): string {
get rightType(): string | null {
if (this.json.rightType) {
return this.json.rightType;
} else if (this.json.rightValue) {
@@ -86,13 +87,14 @@ export class WidgetVisibilityModel {
}
get rightValue(): any {
if (this.json.rightValue) {
if (this.json.rightValue?.toString()) {
return this.json.rightValue;
} else if (this.rightFormFieldId) {
return this.rightFormFieldId;
} else {
} else if(this.rightRestResponseId){
return this.rightRestResponseId;
}
return null;
}
set rightValue(rightValue: any) {

View File

@@ -42,6 +42,15 @@ describe('WidgetVisibilityService', () => {
const stubFormWithFields = new FormModel(fakeFormJson);
const evaluateConditions = (conditionsArgs: [leftValue: any, rightValue: any][], operator: string ): (boolean | undefined)[] => {
const resultsArray: (boolean | undefined)[] = [];
conditionsArgs.forEach(([leftValue, rightValue]) => {
resultsArray.push(service.evaluateCondition(leftValue, rightValue, operator));
});
return resultsArray;
};
beforeEach(() => {
TestBed.configureTestingModule({
imports: [
@@ -55,28 +64,123 @@ describe('WidgetVisibilityService', () => {
describe('should be able to evaluate next condition operations', () => {
it('using == and return true', () => {
booleanResult = service.evaluateCondition('test', 'test', '==');
expect(booleanResult).toBeTruthy();
const resultsArray = evaluateConditions([
[true, true],
[false, false],
['true', true],
[true, 'true'],
['true', 'true'],
['test', 'test'],
['4', 4],
[0, 0]
], '==');
resultsArray.forEach((result) => {
expect(result).toBe(true);
});
});
it('using < and return true', () => {
booleanResult = service.evaluateCondition(1, 2, '<');
expect(booleanResult).toBeTruthy();
it('using == and return false', () => {
const resultsArray = evaluateConditions([
[true, false],
[false, true],
['false', true],
[false, 'true'],
['false', 'true'],
['test', 'testt'],
['2', 3],
[0, 1]
], '==');
resultsArray.forEach((result) => {
expect(result).toBe(false);
});
});
it('using != and return true', () => {
booleanResult = service.evaluateCondition(true, false, '!=');
expect(booleanResult).toBeTruthy();
const resultsArray = evaluateConditions([
['test', 'te'],
['4', 123],
[0, 1],
[true, false],
[false, true],
['false', true],
[false, 'true'],
['false', 'true']
], '!=');
resultsArray.forEach((result) => {
expect(result).toBe(true);
});
});
it('using != and return false', () => {
booleanResult = service.evaluateCondition(true, true, '!=');
expect(booleanResult).toBeFalsy();
const resultsArray = evaluateConditions([
['testtest', 'testtest'],
['7', 7],
[0, 0],
[true, true],
[false, false],
['true', true],
[true, 'true'],
['true', 'true']
], '!=');
resultsArray.forEach((result) => {
expect(result).toBe(false);
});
});
it('using < and return false', () => {
const resultsArray = evaluateConditions([
[2, 1],
[1, 0],
[0, -1]
], '<');
resultsArray.forEach((result) => {
expect(result).toBe(false);
});
});
it('using <= and return true', () => {
const resultsArray = evaluateConditions([
[3, 4],
[0, 1],
[0, 0],
[1, 1]
], '<=');
resultsArray.forEach((result) => {
expect(result).toBe(true);
});
});
it('using > and return false', () => {
const resultsArray = evaluateConditions([
[0, 1],
[0, 141],
[-144, 0],
[32, 44]
], '>');
resultsArray.forEach((result) => {
expect(result).toBe(false);
});
});
it('using >= and return true', () => {
booleanResult = service.evaluateCondition(2, 2, '>=');
expect(booleanResult).toBeTruthy();
const resultsArray = evaluateConditions([
[12, 2],
[2, 2],
[1, 0],
[0, 0],
[0, -10]
], '>=');
resultsArray.forEach((result) => {
expect(result).toBe(true);
});
});
it('using empty with null values and return true', () => {
@@ -94,11 +198,6 @@ describe('WidgetVisibilityService', () => {
expect(booleanResult).toBeFalsy();
});
it('using > and return false', () => {
booleanResult = service.evaluateCondition(2, 3, '>');
expect(booleanResult).toBeFalsy();
});
it('using not empty with null values and return false', () => {
booleanResult = service.evaluateCondition(null, null, '!empty');
expect(booleanResult).toBeFalsy();
@@ -109,21 +208,6 @@ describe('WidgetVisibilityService', () => {
expect(booleanResult).toBeFalsy();
});
it('using <= and return false', () => {
booleanResult = service.evaluateCondition(2, 1, '<=');
expect(booleanResult).toBeFalsy();
});
it('using <= and return true for different values', () => {
booleanResult = service.evaluateCondition(1, 2, '<=');
expect(booleanResult).toBeTruthy();
});
it('using <= and return true for same values', () => {
booleanResult = service.evaluateCondition(2, 2, '<=');
expect(booleanResult).toBeTruthy();
});
it('should return undefined for invalid operation', () => {
booleanResult = service.evaluateCondition(null, null, '');
expect(booleanResult).toBeUndefined();
@@ -331,6 +415,45 @@ describe('WidgetVisibilityService', () => {
expect(isVisible).toBeTruthy();
});
it('should return true when left field value is equal to true and rigth value is equal to "true"', () => {
spyOn(service, 'getFieldValue').and.returnValue(true);
spyOn(service, 'isFormFieldValid').and.returnValue(true);
visibilityObjTest.leftType = 'field';
visibilityObjTest.operator = '==';
visibilityObjTest.rightType = 'value';
visibilityObjTest.rightValue = 'true';
const isVisible = service.evaluateVisibility(formTest, visibilityObjTest);
expect(isVisible).toBeTruthy();
});
it('should return true when left field value is equal to 1 and rigth value is equal to 0', () => {
spyOn(service, 'getFieldValue').and.returnValue(1);
spyOn(service, 'isFormFieldValid').and.returnValue(true);
visibilityObjTest.leftType = 'field';
visibilityObjTest.operator = '>';
visibilityObjTest.rightType = 'value';
visibilityObjTest.rightValue = 0;
const isVisible = service.evaluateVisibility(formTest, visibilityObjTest);
expect(isVisible).toBeTruthy();
});
it('should return true when left variable value is equal to 10 and rigth value is equal to 0', () => {
spyOn(service, 'getVariableValue').and.returnValue('10');
visibilityObjTest.leftType = 'variable';
visibilityObjTest.operator = '>';
visibilityObjTest.rightType = 'value';
visibilityObjTest.rightValue = 0;
const isVisible = service.evaluateVisibility(formTest, visibilityObjTest);
expect(isVisible).toBeTruthy();
});
it('should return always true when field does not have a visibility condition', () => {
jsonFieldFake.visibilityCondition = undefined;
const fakeFormField: FormFieldModel = new FormFieldModel(fakeFormWithField, jsonFieldFake);
@@ -421,6 +544,51 @@ describe('WidgetVisibilityService', () => {
expect(rightValue).toBe('dropdown_label');
});
describe('getRightValue when rightType is set to value', () => {
beforeEach(() => {
visibilityObjTest.rightType = 'value';
});
it('should be able to return 0 when rightValue is a number', () => {
visibilityObjTest.rightValue = 0;
const rightValue: any = service.getRightValue(formTest, visibilityObjTest);
expect(rightValue).toBe(0);
});
it('should be able to return false when rightValue is a boolean', () => {
visibilityObjTest.rightValue = false;
const rightValue: any = service.getRightValue(formTest, visibilityObjTest);
expect(rightValue).toBe(false);
});
it('should be able to return "false" when rightValue is a string', () => {
visibilityObjTest.rightValue = 'false';
const rightValue: any = service.getRightValue(formTest, visibilityObjTest);
expect(rightValue).toBe('false');
});
it('should be able to return object when rightValue is an object', () => {
visibilityObjTest.rightValue = { key: 'value' };
const rightValue: any = service.getRightValue(formTest, visibilityObjTest);
expect(rightValue).toEqual({ key: 'value' });
});
it('should return null when rightValue is undefined or null', () => {
visibilityObjTest.rightValue = undefined;
const rightValueWhenUndefined: any = service.getRightValue(formTest, visibilityObjTest);
visibilityObjTest.rightValue = null;
const rightValueWhenNull: any = service.getRightValue(formTest, visibilityObjTest);
expect(rightValueWhenUndefined).toBe(null);
expect(rightValueWhenNull).toBe(null);
});
});
it('should be able to evaluate condition with a dropdown <label>', () => {
visibilityObjTest.leftFormFieldId = 'test_5';
visibilityObjTest.operator = '==';