From e1348a98ea50583ad85a7cf493e07425c14170b4 Mon Sep 17 00:00:00 2001
From: Tifenn Guillas <tifenn.guillas@lam.fr>
Date: Wed, 15 Dec 2021 15:53:05 +0100
Subject: [PATCH] Tests and comments on metamodel selectors => DONE

---
 .../metamodel/reducers/survey.reducer.spec.ts |  2 -
 .../attribute-distinct.selector.spec.ts       | 39 ++++++++++
 .../selectors/attribute.selector.spec.ts      | 39 ++++++++++
 .../selectors/column.selector.spec.ts         | 54 +++++++++++++
 .../criteria-family.selector.spec.ts          | 39 ++++++++++
 .../selectors/database.selector.spec.ts       | 54 +++++++++++++
 .../selectors/dataset-family.selector.spec.ts | 39 ++++++++++
 .../selectors/dataset.selector.spec.ts        | 76 +++++++++++++++++++
 .../selectors/group.selector.spec.ts          | 54 +++++++++++++
 .../selectors/instance.selector.spec.ts       | 59 ++++++++++++++
 .../output-category.selector.spec.ts          | 39 ++++++++++
 .../selectors/output-family.selector.spec.ts  | 39 ++++++++++
 .../selectors/root-directory.selector.spec.ts | 39 ++++++++++
 client/src/test-data.ts                       |  6 +-
 14 files changed, 574 insertions(+), 4 deletions(-)
 create mode 100644 client/src/app/metamodel/selectors/attribute-distinct.selector.spec.ts
 create mode 100644 client/src/app/metamodel/selectors/attribute.selector.spec.ts
 create mode 100644 client/src/app/metamodel/selectors/column.selector.spec.ts
 create mode 100644 client/src/app/metamodel/selectors/criteria-family.selector.spec.ts
 create mode 100644 client/src/app/metamodel/selectors/database.selector.spec.ts
 create mode 100644 client/src/app/metamodel/selectors/dataset-family.selector.spec.ts
 create mode 100644 client/src/app/metamodel/selectors/dataset.selector.spec.ts
 create mode 100644 client/src/app/metamodel/selectors/group.selector.spec.ts
 create mode 100644 client/src/app/metamodel/selectors/instance.selector.spec.ts
 create mode 100644 client/src/app/metamodel/selectors/output-category.selector.spec.ts
 create mode 100644 client/src/app/metamodel/selectors/output-family.selector.spec.ts
 create mode 100644 client/src/app/metamodel/selectors/root-directory.selector.spec.ts

diff --git a/client/src/app/metamodel/reducers/survey.reducer.spec.ts b/client/src/app/metamodel/reducers/survey.reducer.spec.ts
index e96ec98b..95c4c461 100644
--- a/client/src/app/metamodel/reducers/survey.reducer.spec.ts
+++ b/client/src/app/metamodel/reducers/survey.reducer.spec.ts
@@ -17,8 +17,6 @@ describe('[Metamodel][Reducers] Survey reducer', () => {
         const { initialState } = fromSurvey;
         const action = surveyActions.loadSurveyListSuccess({ surveys: SURVEY_LIST });
         const state = fromSurvey.surveyReducer(initialState, action);
-
-        console.log(state);
         // expect(state.coneSearch).toEqual(coneSearch);
         // expect(state.resolver).toBeNull();
         // expect(state.resolverIsLoading).toBeFalsy();
diff --git a/client/src/app/metamodel/selectors/attribute-distinct.selector.spec.ts b/client/src/app/metamodel/selectors/attribute-distinct.selector.spec.ts
new file mode 100644
index 00000000..27fd5254
--- /dev/null
+++ b/client/src/app/metamodel/selectors/attribute-distinct.selector.spec.ts
@@ -0,0 +1,39 @@
+import * as attributeDistinctSelector from './attribute-distinct.selector';
+import * as fromAttributeDistinct from '../reducers/attribute-distinct.reducer';
+
+describe('[Metamodel][Selector] AttributeDistinct selector', () => {
+    it('should get attributeDistinct state', () => {
+        const state = { metamodel: { attributeDistinct: { ...fromAttributeDistinct.initialState }}};
+        expect(attributeDistinctSelector.selectAttributeDistinctState(state)).toEqual(state.metamodel.attributeDistinct);
+    });
+
+    it('should get attributeDistinct IDs', () => {
+        const state = { metamodel: { attributeDistinct: { ...fromAttributeDistinct.initialState }}};
+        expect(attributeDistinctSelector.selectAttributeDistinctIds(state).length).toEqual(0);
+    });
+
+    it('should get attributeDistinct entities', () => {
+        const state = { metamodel: { attributeDistinct: { ...fromAttributeDistinct.initialState }}};
+        expect(attributeDistinctSelector.selectAttributeDistinctEntities(state)).toEqual({ });
+    });
+
+    it('should get all attributeDistincts', () => {
+        const state = { metamodel: { attributeDistinct: { ...fromAttributeDistinct.initialState }}};
+        expect(attributeDistinctSelector.selectAllAttributeDistincts(state).length).toEqual(0);
+    });
+
+    it('should get attributeDistinct count', () => {
+        const state = { metamodel: { attributeDistinct: { ...fromAttributeDistinct.initialState }}};
+        expect(attributeDistinctSelector.selectAttributeDistinctTotal(state)).toEqual(0);
+    });
+
+    it('should get attributeDistinctListIsLoading', () => {
+        const state = { metamodel: { attributeDistinct: { ...fromAttributeDistinct.initialState }}};
+        expect(attributeDistinctSelector.selectAttributeDistinctListIsLoading(state)).toBe(false);
+    });
+
+    it('should get attributeDistinctListIsLoaded', () => {
+        const state = { metamodel: { attributeDistinct: { ...fromAttributeDistinct.initialState }}};
+        expect(attributeDistinctSelector.selectAttributeDistinctListIsLoaded(state)).toBe(false);
+    });
+});
diff --git a/client/src/app/metamodel/selectors/attribute.selector.spec.ts b/client/src/app/metamodel/selectors/attribute.selector.spec.ts
new file mode 100644
index 00000000..28e634af
--- /dev/null
+++ b/client/src/app/metamodel/selectors/attribute.selector.spec.ts
@@ -0,0 +1,39 @@
+import * as attributeSelector from './attribute.selector';
+import * as fromAttribute from '../reducers/attribute.reducer';
+
+describe('[Metamodel][Selector] Attribute selector', () => {
+    it('should get attribute state', () => {
+        const state = { metamodel: { attribute: { ...fromAttribute.initialState }}};
+        expect(attributeSelector.selectAttributeState(state)).toEqual(state.metamodel.attribute);
+    });
+
+    it('should get attribute IDs', () => {
+        const state = { metamodel: { attribute: { ...fromAttribute.initialState }}};
+        expect(attributeSelector.selectAttributeIds(state).length).toEqual(0);
+    });
+
+    it('should get attribute entities', () => {
+        const state = { metamodel: { attribute: { ...fromAttribute.initialState }}};
+        expect(attributeSelector.selectAttributeEntities(state)).toEqual({ });
+    });
+
+    it('should get all attributes', () => {
+        const state = { metamodel: { attribute: { ...fromAttribute.initialState }}};
+        expect(attributeSelector.selectAllAttributes(state).length).toEqual(0);
+    });
+
+    it('should get attribute count', () => {
+        const state = { metamodel: { attribute: { ...fromAttribute.initialState }}};
+        expect(attributeSelector.selectAttributeTotal(state)).toEqual(0);
+    });
+
+    it('should get attributeListIsLoading', () => {
+        const state = { metamodel: { attribute: { ...fromAttribute.initialState }}};
+        expect(attributeSelector.selectAttributeListIsLoading(state)).toBe(false);
+    });
+
+    it('should get attributeListIsLoaded', () => {
+        const state = { metamodel: { attribute: { ...fromAttribute.initialState }}};
+        expect(attributeSelector.selectAttributeListIsLoaded(state)).toBe(false);
+    });
+});
diff --git a/client/src/app/metamodel/selectors/column.selector.spec.ts b/client/src/app/metamodel/selectors/column.selector.spec.ts
new file mode 100644
index 00000000..16e1076a
--- /dev/null
+++ b/client/src/app/metamodel/selectors/column.selector.spec.ts
@@ -0,0 +1,54 @@
+import * as columnSelector from './column.selector';
+import * as fromColumn from '../reducers/column.reducer';
+import { COLUMN } from '../../../test-data';
+
+describe('[Metamodel][Selector] Column selector', () => {
+    it('should get column state', () => {
+        const state = { metamodel: { column: { ...fromColumn.initialState }}};
+        expect(columnSelector.selectColumnState(state)).toEqual(state.metamodel.column);
+    });
+
+    it('should get column IDs', () => {
+        const state = { metamodel: { column: { ...fromColumn.initialState }}};
+        expect(columnSelector.selectColumnIds(state).length).toEqual(0);
+    });
+
+    it('should get column entities', () => {
+        const state = { metamodel: { column: { ...fromColumn.initialState }}};
+        expect(columnSelector.selectColumnEntities(state)).toEqual({ });
+    });
+
+    it('should get all columns', () => {
+        const state = { metamodel: { column: { ...fromColumn.initialState }}};
+        expect(columnSelector.selectAllColumns(state).length).toEqual(0);
+    });
+
+    it('should get column count', () => {
+        const state = { metamodel: { column: { ...fromColumn.initialState }}};
+        expect(columnSelector.selectColumnTotal(state)).toEqual(0);
+    });
+
+    it('should get columnListIsLoading', () => {
+        const state = { metamodel: { column: { ...fromColumn.initialState }}};
+        expect(columnSelector.selectColumnListIsLoading(state)).toBe(false);
+    });
+
+    it('should get columnListIsLoaded', () => {
+        const state = { metamodel: { column: { ...fromColumn.initialState }}};
+        expect(columnSelector.selectColumnListIsLoaded(state)).toBe(false);
+    });
+
+    it('should get column by route', () => {
+        const state = {
+            router: { state: { params: { name: 'myCol' }}},
+            metamodel: {
+                column: {
+                    ...fromColumn.initialState,
+                    ids: ['myCol'],
+                    entities: { 'myCol': COLUMN }
+                }
+            }
+        };
+        expect(columnSelector.selectColumnByRouteName(state)).toEqual(COLUMN);
+    });
+});
diff --git a/client/src/app/metamodel/selectors/criteria-family.selector.spec.ts b/client/src/app/metamodel/selectors/criteria-family.selector.spec.ts
new file mode 100644
index 00000000..43dadd84
--- /dev/null
+++ b/client/src/app/metamodel/selectors/criteria-family.selector.spec.ts
@@ -0,0 +1,39 @@
+import * as criteriaFamilySelector from './criteria-family.selector';
+import * as fromCriteriaFamily from '../reducers/criteria-family.reducer';
+
+describe('[Metamodel][Selector] CriteriaFamily selector', () => {
+    it('should get criteriaFamily state', () => {
+        const state = { metamodel: { criteriaFamily: { ...fromCriteriaFamily.initialState }}};
+        expect(criteriaFamilySelector.selectCriteriaFamilyState(state)).toEqual(state.metamodel.criteriaFamily);
+    });
+
+    it('should get criteriaFamily IDs', () => {
+        const state = { metamodel: { criteriaFamily: { ...fromCriteriaFamily.initialState }}};
+        expect(criteriaFamilySelector.selectCriteriaFamilyIds(state).length).toEqual(0);
+    });
+
+    it('should get criteriaFamily entities', () => {
+        const state = { metamodel: { criteriaFamily: { ...fromCriteriaFamily.initialState }}};
+        expect(criteriaFamilySelector.selectCriteriaFamilyEntities(state)).toEqual({ });
+    });
+
+    it('should get all criteriaFamilies', () => {
+        const state = { metamodel: { criteriaFamily: { ...fromCriteriaFamily.initialState }}};
+        expect(criteriaFamilySelector.selectAllCriteriaFamilies(state).length).toEqual(0);
+    });
+
+    it('should get criteriaFamily count', () => {
+        const state = { metamodel: { criteriaFamily: { ...fromCriteriaFamily.initialState }}};
+        expect(criteriaFamilySelector.selectCriteriaFamilyTotal(state)).toEqual(0);
+    });
+
+    it('should get criteriaFamilyListIsLoading', () => {
+        const state = { metamodel: { criteriaFamily: { ...fromCriteriaFamily.initialState }}};
+        expect(criteriaFamilySelector.selectCriteriaFamilyListIsLoading(state)).toBe(false);
+    });
+
+    it('should get criteriaFamilyListIsLoaded', () => {
+        const state = { metamodel: { criteriaFamily: { ...fromCriteriaFamily.initialState }}};
+        expect(criteriaFamilySelector.selectCriteriaFamilyListIsLoaded(state)).toBe(false);
+    });
+});
diff --git a/client/src/app/metamodel/selectors/database.selector.spec.ts b/client/src/app/metamodel/selectors/database.selector.spec.ts
new file mode 100644
index 00000000..149b4fd4
--- /dev/null
+++ b/client/src/app/metamodel/selectors/database.selector.spec.ts
@@ -0,0 +1,54 @@
+import * as databaseSelector from './database.selector';
+import * as fromDatabase from '../reducers/database.reducer';
+import { DATABASE } from '../../../test-data';
+
+describe('[Metamodel][Selector] Database selector', () => {
+    it('should get database state', () => {
+        const state = { metamodel: { database: { ...fromDatabase.initialState }}};
+        expect(databaseSelector.selectDatabaseState(state)).toEqual(state.metamodel.database);
+    });
+
+    it('should get database IDs', () => {
+        const state = { metamodel: { database: { ...fromDatabase.initialState }}};
+        expect(databaseSelector.selectDatabaseIds(state).length).toEqual(0);
+    });
+
+    it('should get database entities', () => {
+        const state = { metamodel: { database: { ...fromDatabase.initialState }}};
+        expect(databaseSelector.selectDatabaseEntities(state)).toEqual({ });
+    });
+
+    it('should get all databases', () => {
+        const state = { metamodel: { database: { ...fromDatabase.initialState }}};
+        expect(databaseSelector.selectAllDatabases(state).length).toEqual(0);
+    });
+
+    it('should get database count', () => {
+        const state = { metamodel: { database: { ...fromDatabase.initialState }}};
+        expect(databaseSelector.selectDatabaseTotal(state)).toEqual(0);
+    });
+
+    it('should get databaseListIsLoading', () => {
+        const state = { metamodel: { database: { ...fromDatabase.initialState }}};
+        expect(databaseSelector.selectDatabaseListIsLoading(state)).toBe(false);
+    });
+
+    it('should get databaseListIsLoaded', () => {
+        const state = { metamodel: { database: { ...fromDatabase.initialState }}};
+        expect(databaseSelector.selectDatabaseListIsLoaded(state)).toBe(false);
+    });
+
+    it('should get database by route', () => {
+        const state = {
+            router: { state: { params: { id: 1 }}},
+            metamodel: {
+                database: {
+                    ...fromDatabase.initialState,
+                    ids: [1],
+                    entities: { 1: DATABASE }
+                }
+            }
+        };
+        expect(databaseSelector.selectDatabaseByRouteId(state)).toEqual(DATABASE);
+    });
+});
diff --git a/client/src/app/metamodel/selectors/dataset-family.selector.spec.ts b/client/src/app/metamodel/selectors/dataset-family.selector.spec.ts
new file mode 100644
index 00000000..3c7d7e69
--- /dev/null
+++ b/client/src/app/metamodel/selectors/dataset-family.selector.spec.ts
@@ -0,0 +1,39 @@
+import * as datasetFamilySelector from './dataset-family.selector';
+import * as fromDatasetFamily from '../reducers/dataset-family.reducer';
+
+describe('[Metamodel][Selector] DatasetFamily selector', () => {
+    it('should get datasetFamily state', () => {
+        const state = { metamodel: { datasetFamily: { ...fromDatasetFamily.initialState }}};
+        expect(datasetFamilySelector.selectDatasetFamilyState(state)).toEqual(state.metamodel.datasetFamily);
+    });
+
+    it('should get datasetFamily IDs', () => {
+        const state = { metamodel: { datasetFamily: { ...fromDatasetFamily.initialState }}};
+        expect(datasetFamilySelector.selectDatasetFamilyIds(state).length).toEqual(0);
+    });
+
+    it('should get datasetFamily entities', () => {
+        const state = { metamodel: { datasetFamily: { ...fromDatasetFamily.initialState }}};
+        expect(datasetFamilySelector.selectDatasetFamilyEntities(state)).toEqual({ });
+    });
+
+    it('should get all datasetFamilies', () => {
+        const state = { metamodel: { datasetFamily: { ...fromDatasetFamily.initialState }}};
+        expect(datasetFamilySelector.selectAllDatasetFamilies(state).length).toEqual(0);
+    });
+
+    it('should get datasetFamily count', () => {
+        const state = { metamodel: { datasetFamily: { ...fromDatasetFamily.initialState }}};
+        expect(datasetFamilySelector.selectDatasetFamilyTotal(state)).toEqual(0);
+    });
+
+    it('should get datasetFamilyListIsLoading', () => {
+        const state = { metamodel: { datasetFamily: { ...fromDatasetFamily.initialState }}};
+        expect(datasetFamilySelector.selectDatasetFamilyListIsLoading(state)).toBe(false);
+    });
+
+    it('should get datasetFamilyListIsLoaded', () => {
+        const state = { metamodel: { datasetFamily: { ...fromDatasetFamily.initialState }}};
+        expect(datasetFamilySelector.selectDatasetFamilyListIsLoaded(state)).toBe(false);
+    });
+});
diff --git a/client/src/app/metamodel/selectors/dataset.selector.spec.ts b/client/src/app/metamodel/selectors/dataset.selector.spec.ts
new file mode 100644
index 00000000..9551f9d1
--- /dev/null
+++ b/client/src/app/metamodel/selectors/dataset.selector.spec.ts
@@ -0,0 +1,76 @@
+import * as datasetSelector from './dataset.selector';
+import * as fromDataset from '../reducers/dataset.reducer';
+import { DATASET, DATASET_LIST } from '../../../test-data';
+
+describe('[Metamodel][Selector] Dataset selector', () => {
+    it('should get dataset state', () => {
+        const state = { metamodel: { dataset: { ...fromDataset.initialState }}};
+        expect(datasetSelector.selectDatasetState(state)).toEqual(state.metamodel.dataset);
+    });
+
+    it('should get dataset IDs', () => {
+        const state = { metamodel: { dataset: { ...fromDataset.initialState }}};
+        expect(datasetSelector.selectDatasetIds(state).length).toEqual(0);
+    });
+
+    it('should get dataset entities', () => {
+        const state = { metamodel: { dataset: { ...fromDataset.initialState }}};
+        expect(datasetSelector.selectDatasetEntities(state)).toEqual({ });
+    });
+
+    it('should get all datasets', () => {
+        const state = { metamodel: { dataset: { ...fromDataset.initialState }}};
+        expect(datasetSelector.selectAllDatasets(state).length).toEqual(0);
+    });
+
+    it('should get dataset count', () => {
+        const state = { metamodel: { dataset: { ...fromDataset.initialState }}};
+        expect(datasetSelector.selectDatasetTotal(state)).toEqual(0);
+    });
+
+    it('should get datasetListIsLoading', () => {
+        const state = { metamodel: { dataset: { ...fromDataset.initialState }}};
+        expect(datasetSelector.selectDatasetListIsLoading(state)).toBe(false);
+    });
+
+    it('should get datasetListIsLoaded', () => {
+        const state = { metamodel: { dataset: { ...fromDataset.initialState }}};
+        expect(datasetSelector.selectDatasetListIsLoaded(state)).toBe(false);
+    });
+
+    it('should get dataset by route', () => {
+        const state = {
+            router: { state: { params: { dname: 'myDataset' }}},
+            metamodel: {
+                dataset: {
+                    ...fromDataset.initialState,
+                    ids: ['myDataset'],
+                    entities: { 'myDataset': DATASET }
+                }
+            }
+        };
+        expect(datasetSelector.selectDatasetByRouteName(state)).toEqual(DATASET);
+    });
+
+    it('should get dataset name by route', () => {
+        const state = {router: { state: { params: { dname: 'myDataset' }}}};
+        expect(datasetSelector.selectDatasetNameByRoute(state)).toEqual('myDataset');
+    });
+
+    it('should get datasets with cone search', () => {
+        const state = {
+            metamodel: {
+                dataset: {
+                    ...fromDataset.initialState,
+                    ids: ['myDataset', 'anotherDataset'],
+                    entities: {
+                        'myDataset': DATASET_LIST[0],
+                        'anotherDataset': DATASET_LIST[1]
+                    }
+                }
+            }
+        };
+        expect(datasetSelector.selectAllConeSearchDatasets(state).length).toEqual(1);
+        expect(datasetSelector.selectAllConeSearchDatasets(state)).toContain(DATASET_LIST[0]);
+    });
+});
diff --git a/client/src/app/metamodel/selectors/group.selector.spec.ts b/client/src/app/metamodel/selectors/group.selector.spec.ts
new file mode 100644
index 00000000..cc8366f5
--- /dev/null
+++ b/client/src/app/metamodel/selectors/group.selector.spec.ts
@@ -0,0 +1,54 @@
+import * as groupSelector from './group.selector';
+import * as fromGroup from '../reducers/group.reducer';
+import { GROUP } from '../../../test-data';
+
+describe('[Metamodel][Selector] Group selector', () => {
+    it('should get group state', () => {
+        const state = { metamodel: { group: { ...fromGroup.initialState }}};
+        expect(groupSelector.selectGroupState(state)).toEqual(state.metamodel.group);
+    });
+
+    it('should get group IDs', () => {
+        const state = { metamodel: { group: { ...fromGroup.initialState }}};
+        expect(groupSelector.selectGroupIds(state).length).toEqual(0);
+    });
+
+    it('should get group entities', () => {
+        const state = { metamodel: { group: { ...fromGroup.initialState }}};
+        expect(groupSelector.selectGroupEntities(state)).toEqual({ });
+    });
+
+    it('should get all groups', () => {
+        const state = { metamodel: { group: { ...fromGroup.initialState }}};
+        expect(groupSelector.selectAllGroups(state).length).toEqual(0);
+    });
+
+    it('should get group count', () => {
+        const state = { metamodel: { group: { ...fromGroup.initialState }}};
+        expect(groupSelector.selectGroupTotal(state)).toEqual(0);
+    });
+
+    it('should get groupListIsLoading', () => {
+        const state = { metamodel: { group: { ...fromGroup.initialState }}};
+        expect(groupSelector.selectGroupListIsLoading(state)).toBe(false);
+    });
+
+    it('should get groupListIsLoaded', () => {
+        const state = { metamodel: { group: { ...fromGroup.initialState }}};
+        expect(groupSelector.selectGroupListIsLoaded(state)).toBe(false);
+    });
+
+    it('should get group ID by route', () => {
+        const state = {
+            router: { state: { params: { id: 1 }}},
+            metamodel: {
+                group: {
+                    ...fromGroup.initialState,
+                    ids: [1],
+                    entities: { 1: GROUP }
+                }
+            }
+        };
+        expect(groupSelector.selectGroupByRouteId(state)).toEqual(GROUP);
+    });
+});
diff --git a/client/src/app/metamodel/selectors/instance.selector.spec.ts b/client/src/app/metamodel/selectors/instance.selector.spec.ts
new file mode 100644
index 00000000..137da338
--- /dev/null
+++ b/client/src/app/metamodel/selectors/instance.selector.spec.ts
@@ -0,0 +1,59 @@
+import * as instanceSelector from './instance.selector';
+import * as fromInstance from '../reducers/instance.reducer';
+import { INSTANCE } from '../../../test-data';
+
+describe('[Metamodel][Selector] Instance selector', () => {
+    it('should get instance state', () => {
+        const state = { metamodel: { instance: { ...fromInstance.initialState }}};
+        expect(instanceSelector.selectInstanceState(state)).toEqual(state.metamodel.instance);
+    });
+
+    it('should get instance IDs', () => {
+        const state = { metamodel: { instance: { ...fromInstance.initialState }}};
+        expect(instanceSelector.selectInstanceIds(state).length).toEqual(0);
+    });
+
+    it('should get instance entities', () => {
+        const state = { metamodel: { instance: { ...fromInstance.initialState }}};
+        expect(instanceSelector.selectInstanceEntities(state)).toEqual({ });
+    });
+
+    it('should get all instances', () => {
+        const state = { metamodel: { instance: { ...fromInstance.initialState }}};
+        expect(instanceSelector.selectAllInstances(state).length).toEqual(0);
+    });
+
+    it('should get instance count', () => {
+        const state = { metamodel: { instance: { ...fromInstance.initialState }}};
+        expect(instanceSelector.selectInstanceTotal(state)).toEqual(0);
+    });
+
+    it('should get instanceListIsLoading', () => {
+        const state = { metamodel: { instance: { ...fromInstance.initialState }}};
+        expect(instanceSelector.selectInstanceListIsLoading(state)).toBe(false);
+    });
+
+    it('should get instanceListIsLoaded', () => {
+        const state = { metamodel: { instance: { ...fromInstance.initialState }}};
+        expect(instanceSelector.selectInstanceListIsLoaded(state)).toBe(false);
+    });
+
+    it('should get instance by route', () => {
+        const state = {
+            router: { state: { params: { iname: 'myInstance' }}},
+            metamodel: {
+                instance: {
+                    ...fromInstance.initialState,
+                    ids: ['myInstance'],
+                    entities: { 'myInstance': INSTANCE }
+                }
+            }
+        };
+        expect(instanceSelector.selectInstanceByRouteName(state)).toEqual(INSTANCE);
+    });
+
+    it('should get instance name by route', () => {
+        const state = { router: { state: { params: { iname: 'myInstance' }}}};
+        expect(instanceSelector.selectInstanceNameByRoute(state)).toEqual('myInstance');
+    });
+});
diff --git a/client/src/app/metamodel/selectors/output-category.selector.spec.ts b/client/src/app/metamodel/selectors/output-category.selector.spec.ts
new file mode 100644
index 00000000..eeb4e606
--- /dev/null
+++ b/client/src/app/metamodel/selectors/output-category.selector.spec.ts
@@ -0,0 +1,39 @@
+import * as outputCategorySelector from './output-category.selector';
+import * as fromOutputCategory from '../reducers/output-category.reducer';
+
+describe('[Metamodel][Selector] OutputCategory selector', () => {
+    it('should get outputCategory state', () => {
+        const state = { metamodel: { outputCategory: { ...fromOutputCategory.initialState }}};
+        expect(outputCategorySelector.selectOutputCategoryState(state)).toEqual(state.metamodel.outputCategory);
+    });
+
+    it('should get outputCategory IDs', () => {
+        const state = { metamodel: { outputCategory: { ...fromOutputCategory.initialState }}};
+        expect(outputCategorySelector.selectOutputCategoryIds(state).length).toEqual(0);
+    });
+
+    it('should get outputCategory entities', () => {
+        const state = { metamodel: { outputCategory: { ...fromOutputCategory.initialState }}};
+        expect(outputCategorySelector.selectOutputCategoryEntities(state)).toEqual({ });
+    });
+
+    it('should get all outputCategories', () => {
+        const state = { metamodel: { outputCategory: { ...fromOutputCategory.initialState }}};
+        expect(outputCategorySelector.selectAllOutputCategories(state).length).toEqual(0);
+    });
+
+    it('should get outputCategory count', () => {
+        const state = { metamodel: { outputCategory: { ...fromOutputCategory.initialState }}};
+        expect(outputCategorySelector.selectOutputCategoryTotal(state)).toEqual(0);
+    });
+
+    it('should get outputCategoryListIsLoading', () => {
+        const state = { metamodel: { outputCategory: { ...fromOutputCategory.initialState }}};
+        expect(outputCategorySelector.selectOutputCategoryListIsLoading(state)).toBe(false);
+    });
+
+    it('should get outputCategoryListIsLoaded', () => {
+        const state = { metamodel: { outputCategory: { ...fromOutputCategory.initialState }}};
+        expect(outputCategorySelector.selectOutputCategoryListIsLoaded(state)).toBe(false);
+    });
+});
diff --git a/client/src/app/metamodel/selectors/output-family.selector.spec.ts b/client/src/app/metamodel/selectors/output-family.selector.spec.ts
new file mode 100644
index 00000000..58e18fd6
--- /dev/null
+++ b/client/src/app/metamodel/selectors/output-family.selector.spec.ts
@@ -0,0 +1,39 @@
+import * as outputFamilySelector from './output-family.selector';
+import * as fromOutputFamily from '../reducers/output-family.reducer';
+
+describe('[Metamodel][Selector] Output family selector', () => {
+    it('should get outputFamily state', () => {
+        const state = { metamodel: { outputFamily: { ...fromOutputFamily.initialState }}};
+        expect(outputFamilySelector.selectOutputFamilyState(state)).toEqual(state.metamodel.outputFamily);
+    });
+
+    it('should get outputFamily IDs', () => {
+        const state = { metamodel: { outputFamily: { ...fromOutputFamily.initialState }}};
+        expect(outputFamilySelector.selectOutputFamilyIds(state).length).toEqual(0);
+    });
+
+    it('should get outputFamily entities', () => {
+        const state = { metamodel: { outputFamily: { ...fromOutputFamily.initialState }}};
+        expect(outputFamilySelector.selectOutputFamilyEntities(state)).toEqual({ });
+    });
+
+    it('should get all outputFamilies', () => {
+        const state = { metamodel: { outputFamily: { ...fromOutputFamily.initialState }}};
+        expect(outputFamilySelector.selectAllOutputFamilies(state).length).toEqual(0);
+    });
+
+    it('should get outputFamily count', () => {
+        const state = { metamodel: { outputFamily: { ...fromOutputFamily.initialState }}};
+        expect(outputFamilySelector.selectOutputFamilyTotal(state)).toEqual(0);
+    });
+
+    it('should get outputFamilyListIsLoading', () => {
+        const state = { metamodel: { outputFamily: { ...fromOutputFamily.initialState }}};
+        expect(outputFamilySelector.selectOutputFamilyListIsLoading(state)).toBe(false);
+    });
+
+    it('should get outputFamilyListIsLoaded', () => {
+        const state = { metamodel: { outputFamily: { ...fromOutputFamily.initialState }}};
+        expect(outputFamilySelector.selectOutputFamilyListIsLoaded(state)).toBe(false);
+    });
+});
diff --git a/client/src/app/metamodel/selectors/root-directory.selector.spec.ts b/client/src/app/metamodel/selectors/root-directory.selector.spec.ts
new file mode 100644
index 00000000..ab145eb0
--- /dev/null
+++ b/client/src/app/metamodel/selectors/root-directory.selector.spec.ts
@@ -0,0 +1,39 @@
+import * as rootDirectorySelector from './root-directory.selector';
+import * as fromRootDirectory from '../reducers/root-directory.reducer';
+
+describe('[Metamodel][Selector] Root Directory selector', () => {
+    it('should get rootDirectory state', () => {
+        const state = { metamodel: { rootDirectory: { ...fromRootDirectory.initialState }}};
+        expect(rootDirectorySelector.selectRootDirectoryState(state)).toEqual(state.metamodel.rootDirectory);
+    });
+
+    it('should get file info IDs', () => {
+        const state = { metamodel: { rootDirectory: { ...fromRootDirectory.initialState }}};
+        expect(rootDirectorySelector.selectFileInfoIds(state).length).toEqual(0);
+    });
+
+    it('should get file info entities', () => {
+        const state = { metamodel: { rootDirectory: { ...fromRootDirectory.initialState }}};
+        expect(rootDirectorySelector.selectFileInfoEntities(state)).toEqual({ });
+    });
+
+    it('should get all file info', () => {
+        const state = { metamodel: { rootDirectory: { ...fromRootDirectory.initialState }}};
+        expect(rootDirectorySelector.selectAllFileInfo(state).length).toEqual(0);
+    });
+
+    it('should get file info count', () => {
+        const state = { metamodel: { rootDirectory: { ...fromRootDirectory.initialState }}};
+        expect(rootDirectorySelector.selectFileInfoTotal(state)).toEqual(0);
+    });
+
+    it('should get rootDirectoryIsLoading', () => {
+        const state = { metamodel: { rootDirectory: { ...fromRootDirectory.initialState }}};
+        expect(rootDirectorySelector.selectRootDirectoryIsLoading(state)).toBe(false);
+    });
+
+    it('should get rootDirectoryIsLoading', () => {
+        const state = { metamodel: { rootDirectory: { ...fromRootDirectory.initialState }}};
+        expect(rootDirectorySelector.selectRootDirectoryIsLoaded(state)).toBe(false);
+    });
+});
diff --git a/client/src/test-data.ts b/client/src/test-data.ts
index 8d5bfd81..f2701681 100644
--- a/client/src/test-data.ts
+++ b/client/src/test-data.ts
@@ -1,5 +1,5 @@
 import {
-    Attribute, CriteriaFamily, Database,
+    Attribute, Column, CriteriaFamily, Database,
     Dataset,
     DatasetFamily, Group,
     Instance,
@@ -240,7 +240,7 @@ export const DATASET_LIST: Dataset[] = [
                 survey_label: 'More about this survey'
             },
             cone_search: {
-                cone_search_enabled: true,
+                cone_search_enabled: false,
                 cone_search_opened: true,
                 cone_search_column_ra: 1,
                 cone_search_column_dec: 2,
@@ -442,6 +442,8 @@ export const ATTRIBUTE: Attribute = {
     id_output_category: 2
 };
 
+export const COLUMN: Column = { name: 'myCol', type: 'type' };
+
 export const CATEGORY_LIST: OutputCategory[] = [
     {
         id: 1,
-- 
GitLab