From fb97373bef7dfe30b5fdb3e094a3d939824e7c0f Mon Sep 17 00:00:00 2001
From: Tifenn Guillas <tifenn.guillas@gmail.com>
Date: Fri, 10 Sep 2021 15:23:03 +0200
Subject: [PATCH] Tests on criterion model => DONE

---
 .../store/models/criterion.model.spec.ts      | 156 +++++++++++++-----
 1 file changed, 114 insertions(+), 42 deletions(-)

diff --git a/client/src/app/instance/store/models/criterion.model.spec.ts b/client/src/app/instance/store/models/criterion.model.spec.ts
index 8a4153f1..ed2fa4d2 100644
--- a/client/src/app/instance/store/models/criterion.model.spec.ts
+++ b/client/src/app/instance/store/models/criterion.model.spec.ts
@@ -5,7 +5,7 @@ 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, stringToCriterion, getPrettyCriterion, getPrettyOperator } from './';
 // import { criterionToString, getCriterionStr, getHost } from './criterion.model';
 import {
     FieldCriterion,
@@ -50,20 +50,7 @@ describe('CriterionModel', () => {
         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', () => {
+    it('#stringToCriterion should convert string criterion into object', () => {
         let attribute: Attribute = {
             id: 1,
             name: 'myAttribute',
@@ -154,40 +141,125 @@ describe('CriterionModel', () => {
             search_type: 'select-multiple',
             operator: 'eq',
             type: 'field',
-            min: 'one|two',
+            min: '1|2',
+            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: 'three', value: '3', display: 3 }] } as SelectMultipleCriterion;
+        expect(stringToCriterion(attribute, ['', '', '1|3'])).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: '1|2',
             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);
+        attribute = {
+            id: 1,
+            name: 'myAttribute',
+            label: 'my attribute',
+            form_label: 'My Attribute',
+            output_display: 1,
+            criteria_display: 1,
+            search_type: 'json',
+            operator: 'eq',
+            type: 'field',
+            display_detail: 1
+        };
+        expected = { id: 1, type: 'json', path: 'path', operator: 'op', value: 'value' } as JsonCriterion;
+        expect(stringToCriterion(attribute, ['', '', 'path|op|value'])).toEqual(expected);
+        attribute = {
+            id: 1,
+            name: 'myAttribute',
+            label: 'my attribute',
+            form_label: 'My Attribute',
+            output_display: 1,
+            criteria_display: 1,
+            search_type: 'json',
+            operator: 'eq',
+            type: 'field',
+            min: 'path|op|value',
+            display_detail: 1
+        };
+        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: '',
+            operator: 'eq',
+            type: 'field',
+            display_detail: 1
+        };
+        expect(stringToCriterion(attribute)).toBeNull();
     });
 
-    // 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);
-    // });
+    // 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('#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);
+    });
 
+    it('#getPrettyOperator() should prettify operator', () => {
+        expect(getPrettyOperator('eq')).toEqual('=');
+        expect(getPrettyOperator('neq')).toEqual('≠');
+        expect(getPrettyOperator('gt')).toEqual('>');
+        expect(getPrettyOperator('gte')).toEqual('>=');
+        expect(getPrettyOperator('lt')).toEqual('<');
+        expect(getPrettyOperator('lte')).toEqual('<=');
+        expect(getPrettyOperator('lk')).toEqual('like');
+        expect(getPrettyOperator('nlk')).toEqual('not like');
+        expect(getPrettyOperator('in')).toEqual('in');
+        expect(getPrettyOperator('nin')).toEqual('not in');
+        expect(getPrettyOperator('toto')).toEqual('toto');
+        expect(getPrettyOperator('')).toEqual('');
+        expect(getPrettyOperator('')).toEqual('');
+    });
 });
-- 
GitLab