From b25ba3fe64667d07fd3aed6be38c279415ecb756 Mon Sep 17 00:00:00 2001 From: Tifenn Guillas <tifenn.guillas@gmail.com> Date: Wed, 8 Sep 2021 17:00:13 +0200 Subject: [PATCH] WIP: Tests on criterion functions --- .../store/models/criterion.model.spec.ts | 193 ++++++++++++++++++ .../instance/store/models/criterion.model.ts | 11 + 2 files changed, 204 insertions(+) create mode 100644 client/src/app/instance/store/models/criterion.model.spec.ts diff --git a/client/src/app/instance/store/models/criterion.model.spec.ts b/client/src/app/instance/store/models/criterion.model.spec.ts new file mode 100644 index 00000000..8a4153f1 --- /dev/null +++ b/client/src/app/instance/store/models/criterion.model.spec.ts @@ -0,0 +1,193 @@ +import { Observable } from 'rxjs'; +import { ConeSearchEffects } from '../effects/cone-search.effects'; +import { EffectsMetadata, getEffectsMetadata } from '@ngrx/effects'; +import { ConeSearchService } from '../services/cone-search.service'; +import { ToastrService } from 'ngx-toastr'; +import { TestBed } from '@angular/core/testing'; +import { provideMockActions } from '@ngrx/effects/testing'; +import { criterionToString, stringToCriterion } from './'; +// import { criterionToString, getCriterionStr, getHost } from './criterion.model'; +import { + FieldCriterion, + JsonCriterion, + SelectMultipleCriterion, + BetweenCriterion, + Criterion, + ListCriterion +} from '.'; +import { Attribute, Option, RendererConfig } from '../../../metamodel/models'; +// import { +// BetweenCriterion, +// FieldCriterion, +// JsonCriterion, +// SelectMultipleCriterion, +// ListCriterion +// } from './criterion'; + + +describe('CriterionModel', () => { + it('#criterionToString should convert criterion object to string', () => { + let betweenCriterion: BetweenCriterion = { id: 1, type: 'between', min: 'un', max: null }; + let expected = '1::gte::un'; + expect(criterionToString(betweenCriterion)).toEqual(expected); + betweenCriterion = { id: 1, type: 'between', min: null, max: 'deux' }; + expected = '1::lte::deux'; + expect(criterionToString(betweenCriterion)).toEqual(expected); + betweenCriterion = { id: 1, type: 'between', min: 'un', max: 'deux' }; + expected = '1::bw::un|deux'; + expect(criterionToString(betweenCriterion)).toEqual(expected); + const fieldCriterion = { id: 1, type: 'field', operator: 'eq', value: 'value' } as FieldCriterion; + expected = '1::eq::value'; + expect(criterionToString(fieldCriterion)).toEqual(expected); + const listCriterion = { id: 1, type: 'list', values: ['un', 'deux'] } as ListCriterion; + expected = '1::in::un|deux'; + expect(criterionToString(listCriterion)).toEqual(expected); + const jsonCriterion = { id: 1, type: 'json', path: 'path', operator: 'eq', value: 'value' } as JsonCriterion; + expected = '1::js::path|eq|value'; + expect(criterionToString(jsonCriterion)).toEqual(expected); + const selectMultipleCriterion = { id: 1, type: 'multiple', options: [{ label: 'un', value: '1', display: 1 }, { label: 'deux', value: '2', display: 2 }] } as SelectMultipleCriterion; + expected = '1::in::1|2'; + expect(criterionToString(selectMultipleCriterion)).toEqual(expected); + }); + + // id: 1, + // name: 'myAttribute', + // label: 'my attribute', + // form_label: 'My Attribute', + // output_display: 1, + // criteria_display: 1, + // search_type: 'field', + // operator: 'eq', + // type: 'field', + // min: 'one', // optional + // max: 'two', // optional + // display_detail: 1, + // options: [{ label: 'option1', value: 'one', display: 1 }, { label: 'option2', value: 'two', display: 2 }] // optional + it.only('#stringToCriterion should convert string criterion into object', () => { + let attribute: Attribute = { + id: 1, + name: 'myAttribute', + label: 'my attribute', + form_label: 'My Attribute', + output_display: 1, + criteria_display: 1, + search_type: 'field', + operator: 'eq', + type: 'field', + display_detail: 1 + }; + let expected: Criterion = { id: 1, type: 'field', operator: 'neq', value: 'otherValue' } as FieldCriterion; + expect(stringToCriterion(attribute, ['', 'neq', 'otherValue'])).toEqual(expected); + attribute = { + id: 1, + name: 'myAttribute', + label: 'my attribute', + form_label: 'My Attribute', + output_display: 1, + criteria_display: 1, + search_type: 'field', + operator: 'eq', + type: 'field', + min: 'value', + display_detail: 1 + }; + expected = { id: 1, type: 'field', operator: 'eq', value: 'value' } as FieldCriterion; + expect(stringToCriterion(attribute)).toEqual(expected); + attribute = { + id: 1, + name: 'myAttribute', + label: 'my attribute', + form_label: 'My Attribute', + output_display: 1, + criteria_display: 1, + search_type: 'list', + operator: 'eq', + type: 'field', + display_detail: 1 + }; + expected = { id: 1, type: 'list', values: ['one', 'two'] } as ListCriterion; + expect(stringToCriterion(attribute, ['', '', 'one|two'])).toEqual(expected); + attribute = { + id: 1, + name: 'myAttribute', + label: 'my attribute', + form_label: 'My Attribute', + output_display: 1, + criteria_display: 1, + search_type: 'list', + operator: 'eq', + type: 'field', + min: 'valueA|valueB', + display_detail: 1 + }; + expected = { id: 1, type: 'list', values: ['valueA', 'valueB'] } as ListCriterion; + expect(stringToCriterion(attribute)).toEqual(expected); + attribute = { + id: 1, + name: 'myAttribute', + label: 'my attribute', + form_label: 'My Attribute', + output_display: 1, + criteria_display: 1, + search_type: 'between', + operator: 'eq', + type: 'field', + min: 'one', + max: 'two', + display_detail: 1 + }; + expected = { id: 1, type: 'between', min: 'valueA', max: 'valueB' } as BetweenCriterion; + expect(stringToCriterion(attribute, ['', 'bw', 'valueA|valueB'])).toEqual(expected); + expected = { id: 1, type: 'between', min: 'valueA', max: null } as BetweenCriterion; + expect(stringToCriterion(attribute, ['', 'gte', 'valueA'])).toEqual(expected); + expected = { id: 1, type: 'between', min: null, max: 'valueB' } as BetweenCriterion; + expect(stringToCriterion(attribute, ['', 'lte', 'valueB'])).toEqual(expected); + expected = { id: 1, type: 'between', min: 'one', max: 'two' } as BetweenCriterion; + expect(stringToCriterion(attribute)).toEqual(expected); + attribute = { + id: 1, + name: 'myAttribute', + label: 'my attribute', + form_label: 'My Attribute', + output_display: 1, + criteria_display: 1, + search_type: 'select-multiple', + operator: 'eq', + type: 'field', + min: 'one|two', + display_detail: 1, + options: [{ label: 'one', value: '1', display: 1 }, { label: 'two', value: '2', display: 2 }, { label: 'three', value: '3', display: 3 }] + }; + expected = { id: 1, type: 'multiple', options: [{ label: 'one', value: '1', display: 1 }, { label: 'two', value: '2', display: 2 }] } as SelectMultipleCriterion; + expect(stringToCriterion(attribute)).toEqual(expected); + }); + + // it('#getPrettyCriterion should print criterion correctly', () => { + // const fieldCriterion = { id: 1, type: 'field', operator: 'eq', value: 'value' } as FieldCriterion; + // let expectedPrintedCriterion = '= value'; + // expect(getPrettyCriterion(fieldCriterion)).toEqual(expectedPrintedCriterion); + // const jsonCriterion = { id: 1, type: 'json', path: 'path', operator: 'eq', value: 'value' } as JsonCriterion; + // expectedPrintedCriterion = 'path eq value'; + // expect(getPrettyCriterion(jsonCriterion)).toEqual(expectedPrintedCriterion); + // const selectMultipleCriterion = { id: 1, type: 'multiple', options: [{label: 'un', value: '1', display: 1}, {label: 'deux', value: '2', display: 2}] } as SelectMultipleCriterion; + // expectedPrintedCriterion = '[un,deux]'; + // expect(getPrettyCriterion(selectMultipleCriterion)).toEqual(expectedPrintedCriterion); + // let betweenCriterion = { id: 1, type: 'between', min: 'un', max: null } as BetweenCriterion; + // expectedPrintedCriterion = '>= un'; + // expect(getPrettyCriterion(betweenCriterion)).toEqual(expectedPrintedCriterion); + // betweenCriterion = { id: 1, type: 'between', min: null, max: 'deux' } as BetweenCriterion; + // expectedPrintedCriterion = '<= deux'; + // expect(getPrettyCriterion(betweenCriterion)).toEqual(expectedPrintedCriterion); + // betweenCriterion = { id: 1, type: 'between', min: 'un', max: 'deux' } as BetweenCriterion; + // expectedPrintedCriterion = '∈ [un;deux]'; + // expect(getPrettyCriterion(betweenCriterion)).toEqual(expectedPrintedCriterion); + // const listCriterion = { id: 1, type: 'list', values: ['un', 'deux'] } as ListCriterion; + // expectedPrintedCriterion = '= [un,deux]'; + // expect(getPrettyCriterion(listCriterion)).toEqual(expectedPrintedCriterion); + // const notCriterion = {id: 1, type: null} as Criterion; + // expectedPrintedCriterion = 'Criterion type not valid!'; + // expect(getPrettyCriterion(notCriterion)).toEqual(expectedPrintedCriterion); + // }); + + +}); diff --git a/client/src/app/instance/store/models/criterion.model.ts b/client/src/app/instance/store/models/criterion.model.ts index 81d6161c..a6118e88 100644 --- a/client/src/app/instance/store/models/criterion.model.ts +++ b/client/src/app/instance/store/models/criterion.model.ts @@ -66,6 +66,17 @@ export const criterionToString = (criterion: Criterion): string => { return str; } +/** + * Returns criterion object from serialized criterion notation. + * + * @param {Attribute} attribute - The criterion to transform. + * @param {string[]} params - The criterion parameters. + * + * @return Criterion + * + * @example + * stringToCriterion(myAttribute, ['firstParameter', 'secondParameter']) + */ export const stringToCriterion = (attribute: Attribute, params: string[] = null): Criterion => { switch (attribute.search_type) { case 'field': -- GitLab