From 8eaae9bdfea31f0b8808821df100d399bb8b47b6 Mon Sep 17 00:00:00 2001 From: dangapay <divin.angapay@lam.fr> Date: Mon, 3 Oct 2022 15:35:36 +0200 Subject: [PATCH] add tests for [admin][instance][dataset-group] --- .../dataset-group-form.component.spec.ts | 105 ++++++++++++++++++ .../dataset-group-table.component.spec.ts | 41 +++++++ .../dataset-group/components/index.spec.ts | 17 +++ .../dataset-group-list.component.spec.ts | 61 ++++++++++ .../edit-dataset-group.component.spec.ts | 51 +++++++++ .../new-dataset-group.component.spec.ts | 61 ++++++++++ .../dataset-group-title.resolver.spec.ts | 64 +++++++++++ .../dataset-group.module.spec.ts | 16 +++ .../edit-dataset-group-title.resolver.spec.ts | 64 +++++++++++ 9 files changed, 480 insertions(+) create mode 100644 client/src/app/admin/instance/dataset-group/components/dataset-group-form.component.spec.ts create mode 100644 client/src/app/admin/instance/dataset-group/components/dataset-group-table.component.spec.ts create mode 100644 client/src/app/admin/instance/dataset-group/components/index.spec.ts create mode 100644 client/src/app/admin/instance/dataset-group/containers/dataset-group-list.component.spec.ts create mode 100644 client/src/app/admin/instance/dataset-group/containers/edit-dataset-group.component.spec.ts create mode 100644 client/src/app/admin/instance/dataset-group/containers/new-dataset-group.component.spec.ts create mode 100644 client/src/app/admin/instance/dataset-group/dataset-group-title.resolver.spec.ts create mode 100644 client/src/app/admin/instance/dataset-group/dataset-group.module.spec.ts create mode 100644 client/src/app/admin/instance/dataset-group/edit-dataset-group-title.resolver.spec.ts diff --git a/client/src/app/admin/instance/dataset-group/components/dataset-group-form.component.spec.ts b/client/src/app/admin/instance/dataset-group/components/dataset-group-form.component.spec.ts new file mode 100644 index 00000000..4231b6e9 --- /dev/null +++ b/client/src/app/admin/instance/dataset-group/components/dataset-group-form.component.spec.ts @@ -0,0 +1,105 @@ +/** + * This file is part of Anis Client. + * + * @copyright Laboratoire d'Astrophysique de Marseille / CNRS + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; +import { MockStore, provideMockStore } from '@ngrx/store/testing'; +import { Dataset, DatasetGroup } from 'src/app/metamodel/models'; +import { DatasetGroupFormComponent } from './dataset-group-form.component'; + +describe('[admin][instance][dataset-group][components] DatasetGroupFormComponent', () => { + let component: DatasetGroupFormComponent; + let fixture: ComponentFixture<DatasetGroupFormComponent>; + let store: MockStore; + let spy; + let datasetGroup: DatasetGroup = { datasets: [], id: 1, instance_name: 'test', role: '' }; + let dataset: Dataset = { + cone_search_config_id: 1, + data_path: '', + datatable_enabled: false, + datatable_selectable_rows: true, + description: '', + display: 10, + download_ascii: true, + download_csv: false, + download_json: false, + download_vo: false, + full_data_path: '', + id_database: 10, + id_dataset_family: 1, + label: '', + name: '', + public: true, + server_link_enabled: false, + table_ref: '' + + }; + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [ + DatasetGroupFormComponent, + ], + imports: [ + BrowserAnimationsModule, + ], + providers: [ + provideMockStore({}) + ] + }); + fixture = TestBed.createComponent(DatasetGroupFormComponent); + component = fixture.componentInstance; + store = TestBed.inject(MockStore); + + component.datasetList = []; + component.datasetGroup = datasetGroup; + spy = jest.spyOn(component.onSubmit, 'emit'); + fixture.detectChanges(); + }); + + it('should create the component', () => { + expect(component).toBeTruthy(); + }); + + it('submit() should emit datasetgroup, form.value and datasets', () => { + component.submit(); + expect(spy).toHaveBeenCalledTimes(1); + expect(spy).toHaveBeenCalledWith({ ...datasetGroup, ...component.form.value, datasets: component.groupDatasets }) + }); + it('submit() should emit form.value and datasets', () => { + component.datasetGroup = null; + component.submit(); + expect(spy).toHaveBeenCalledTimes(1); + expect(spy).toHaveBeenCalledWith({ ...component.form.value, datasets: component.groupDatasets }) + }); + it('getAvailableDatasets() should return an array with 2 elements', () => { + + component.datasetList = [{ ...dataset, name: 'test1' }, { ...dataset, name: 'test2' }, { ...dataset, name: 'test1' }]; + component.groupDatasets = ['test2']; + let result = component.getAvailableDatasets(); + expect(result.length).toEqual(2); + + }); + it('addDatasets(selectElement) should add the dataset in groupDataSets array', () => { + let selectElement = { options: [{ selected: true, value: { ...dataset, name: 'test' } }] }; + component.groupDatasets = []; + expect(component.groupDatasets.length).toEqual(0) + component.addDatasets(selectElement); + expect(component.groupDatasets.length).toEqual(1); + expect(component.groupDatasets[0]).toEqual(selectElement.options[0].value) + }); + it('removeDatasets(selectElement) should remove the dataset from groupDataSets', () => { + let selectElement = { options: [{ selected: true, value: dataset }] }; + component.groupDatasets = [dataset]; + expect(component.groupDatasets.length).toEqual(1); + component.removeDatasets(selectElement) + expect(component.groupDatasets.length).toEqual(0); + }); + + +}) diff --git a/client/src/app/admin/instance/dataset-group/components/dataset-group-table.component.spec.ts b/client/src/app/admin/instance/dataset-group/components/dataset-group-table.component.spec.ts new file mode 100644 index 00000000..4964ae90 --- /dev/null +++ b/client/src/app/admin/instance/dataset-group/components/dataset-group-table.component.spec.ts @@ -0,0 +1,41 @@ +/** + * This file is part of Anis Client. + * + * @copyright Laboratoire d'Astrophysique de Marseille / CNRS + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; +import { MockStore, provideMockStore } from '@ngrx/store/testing'; +import { DatasetGroupTableComponent } from './dataset-group-table.component'; + +describe('[admin][instance][dataset-group][components] DatasetGroupTableComponent', () => { + let component: DatasetGroupTableComponent; + let fixture: ComponentFixture<DatasetGroupTableComponent>; + let store: MockStore; + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [ + DatasetGroupTableComponent, + ], + imports: [ + BrowserAnimationsModule, + ], + providers: [ + provideMockStore({}) + ] + }); + fixture = TestBed.createComponent(DatasetGroupTableComponent); + component = fixture.componentInstance; + store = TestBed.inject(MockStore); + fixture.detectChanges(); + }); + + it('should create the component', () => { + expect(component).toBeTruthy(); + }); + +}) diff --git a/client/src/app/admin/instance/dataset-group/components/index.spec.ts b/client/src/app/admin/instance/dataset-group/components/index.spec.ts new file mode 100644 index 00000000..51090ec5 --- /dev/null +++ b/client/src/app/admin/instance/dataset-group/components/index.spec.ts @@ -0,0 +1,17 @@ +/** + * This file is part of Anis Client. + * + * @copyright Laboratoire d'Astrophysique de Marseille / CNRS + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + + import { dummiesComponents } from './index'; + + describe('[[admin][instance][webpage][components]index', () => { + it('Test index components', () => { + expect(dummiesComponents.length).toEqual(2); + }); + }); + \ No newline at end of file diff --git a/client/src/app/admin/instance/dataset-group/containers/dataset-group-list.component.spec.ts b/client/src/app/admin/instance/dataset-group/containers/dataset-group-list.component.spec.ts new file mode 100644 index 00000000..7c3f93db --- /dev/null +++ b/client/src/app/admin/instance/dataset-group/containers/dataset-group-list.component.spec.ts @@ -0,0 +1,61 @@ +/** + * This file is part of Anis Client. + * + * @copyright Laboratoire d'Astrophysique de Marseille / CNRS + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +import { Component } from '@angular/core'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; +import { RouterTestingModule } from '@angular/router/testing'; +import { MockStore, provideMockStore } from '@ngrx/store/testing'; +import { DatasetGroup } from 'src/app/metamodel/models'; +import { DatasetGroupListComponent } from './dataset-group-list.component'; +import * as datasetGroupActions from 'src/app/metamodel/actions/dataset-group.actions'; +@Component({ + template: '' +}) +class DummyComponent { +} + +describe('[admin][instance][dataset-group][containers] DatasetGroupListComponent', () => { + let component: DatasetGroupListComponent; + let fixture: ComponentFixture<DatasetGroupListComponent>; + let store: MockStore; + let spy; + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [ + DatasetGroupListComponent, + ], + imports: [ + BrowserAnimationsModule, + RouterTestingModule.withRoutes([ + { path: 'test', component: DummyComponent } + ]) + ], + providers: [ + provideMockStore({}) + ] + }); + fixture = TestBed.createComponent(DatasetGroupListComponent); + component = fixture.componentInstance; + store = TestBed.inject(MockStore); + fixture.detectChanges(); + }); + + it('should create the component', () => { + expect(component).toBeTruthy(); + }); + it('deleteDatasetGroup(datasetGroup: DatasetGroup) should dispatch deleteDatasetGroup action', () => { + let datasetGroup: DatasetGroup = { datasets: [], id: 1, instance_name: 'test', role: 'test' }; + spy = jest.spyOn(store, 'dispatch'); + component.deleteDatasetGroup(datasetGroup); + expect(spy).toHaveBeenCalledTimes(1); + expect(spy).toHaveBeenCalledWith(datasetGroupActions.deleteDatasetGroup({ datasetGroup })) + }); + +}) diff --git a/client/src/app/admin/instance/dataset-group/containers/edit-dataset-group.component.spec.ts b/client/src/app/admin/instance/dataset-group/containers/edit-dataset-group.component.spec.ts new file mode 100644 index 00000000..811312f3 --- /dev/null +++ b/client/src/app/admin/instance/dataset-group/containers/edit-dataset-group.component.spec.ts @@ -0,0 +1,51 @@ +/** + * This file is part of Anis Client. + * + * @copyright Laboratoire d'Astrophysique de Marseille / CNRS + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; +import { MockStore, provideMockStore } from '@ngrx/store/testing'; +import { DatasetGroup } from 'src/app/metamodel/models'; +import * as datasetGroupActions from 'src/app/metamodel/actions/dataset-group.actions'; +import { EditDatasetGroupComponent } from './edit-dataset-group.component'; + +describe('[admin][instance][dataset-group][containers] EditDatasetGroupComponent', () => { + let component: EditDatasetGroupComponent; + let fixture: ComponentFixture<EditDatasetGroupComponent>; + let store: MockStore; + let spy; + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [ + EditDatasetGroupComponent, + ], + imports: [ + BrowserAnimationsModule, + ], + providers: [ + provideMockStore({}) + ] + }); + fixture = TestBed.createComponent(EditDatasetGroupComponent); + component = fixture.componentInstance; + store = TestBed.inject(MockStore); + fixture.detectChanges(); + }); + + it('should create the component', () => { + expect(component).toBeTruthy(); + }); + it('deleteDatasetGroup(datasetGroup: DatasetGroup) should dispatch deleteDatasetGroup action', () => { + let datasetGroup: DatasetGroup = { datasets: [], id: 1, instance_name: 'test', role: 'test' }; + spy = jest.spyOn(store, 'dispatch'); + component.editDatasetGroup(datasetGroup); + expect(spy).toHaveBeenCalledTimes(1); + expect(spy).toHaveBeenCalledWith(datasetGroupActions.editDatasetGroup({ datasetGroup })) + }); + +}) diff --git a/client/src/app/admin/instance/dataset-group/containers/new-dataset-group.component.spec.ts b/client/src/app/admin/instance/dataset-group/containers/new-dataset-group.component.spec.ts new file mode 100644 index 00000000..0c869c20 --- /dev/null +++ b/client/src/app/admin/instance/dataset-group/containers/new-dataset-group.component.spec.ts @@ -0,0 +1,61 @@ +/** + * This file is part of Anis Client. + * + * @copyright Laboratoire d'Astrophysique de Marseille / CNRS + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; +import { MockStore, provideMockStore } from '@ngrx/store/testing'; +import { DatasetGroup } from 'src/app/metamodel/models'; +import * as datasetGroupActions from 'src/app/metamodel/actions/dataset-group.actions'; +import { NewDatasetGroupComponent } from './new-dataset-group.component'; +import { Component } from '@angular/core'; +import { RouterTestingModule } from '@angular/router/testing'; + +@Component({ + template: '' +}) +class DummyComponent { +} +describe('[admin][instance][dataset-group][containers] NewDatasetGroupComponent', () => { + let component: NewDatasetGroupComponent; + let fixture: ComponentFixture<NewDatasetGroupComponent>; + let store: MockStore; + let spy; + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [ + NewDatasetGroupComponent, + ], + imports: [ + BrowserAnimationsModule, + RouterTestingModule.withRoutes([ + { path: 'test', component: DummyComponent } + ]) + ], + providers: [ + provideMockStore({}) + ] + }); + fixture = TestBed.createComponent(NewDatasetGroupComponent); + component = fixture.componentInstance; + store = TestBed.inject(MockStore); + fixture.detectChanges(); + }); + + it('should create the component', () => { + expect(component).toBeTruthy(); + }); + it('deleteDatasetGroup(datasetGroup: DatasetGroup) should dispatch deleteDatasetGroup action', () => { + let datasetGroup: DatasetGroup = { datasets: [], id: 1, instance_name: 'test', role: 'test' }; + spy = jest.spyOn(store, 'dispatch'); + component.addNewDatasetGroup(datasetGroup); + expect(spy).toHaveBeenCalledTimes(1); + expect(spy).toHaveBeenCalledWith(datasetGroupActions.addDatasetGroup({ datasetGroup })) + }); + +}) diff --git a/client/src/app/admin/instance/dataset-group/dataset-group-title.resolver.spec.ts b/client/src/app/admin/instance/dataset-group/dataset-group-title.resolver.spec.ts new file mode 100644 index 00000000..2f98ad70 --- /dev/null +++ b/client/src/app/admin/instance/dataset-group/dataset-group-title.resolver.spec.ts @@ -0,0 +1,64 @@ +/** + * This file is part of Anis Client. + * + * @copyright Laboratoire d'Astrophysique de Marseille / CNRS + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +import { TestBed } from '@angular/core/testing'; +import { MockStore, provideMockStore } from '@ngrx/store/testing'; +import { cold } from 'jasmine-marbles'; +import { DatasetGroupTitleResolver } from './dataset-group-title.resolver'; +import * as instanceSelector from 'src/app/metamodel/selectors/instance.selector'; +import { Instance } from 'src/app/metamodel/models'; +import { ActivatedRouteSnapshot } from '@angular/router'; + +describe('[admin][instance][dataset-group] DatasetGroupTitleResolver', () => { + let datasetGroupTitleResolver: DatasetGroupTitleResolver; + let store: MockStore; + let mockInstanceSelectorSelectInstanceByRouteName; + let instance: Instance; + let component; + + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [], + providers: [ + DatasetGroupTitleResolver, + provideMockStore({}), + ] + }) + instance = { ...instance, label: 'test_label', } + store = TestBed.inject(MockStore); + datasetGroupTitleResolver = TestBed.inject(DatasetGroupTitleResolver); + mockInstanceSelectorSelectInstanceByRouteName = store.overrideSelector(instanceSelector.selectInstanceByRouteName, instance); + + }); + + it('should be created', () => { + expect(datasetGroupTitleResolver).toBeTruthy(); + }); + it('resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) should return test_label - Dataset-groups list ', () => { + const expected = cold('a', { a: instance.label + ' - Dataset-groups list' }); + let route: ActivatedRouteSnapshot; + component = { name: 'DatasetGroupListComponent' } + route = { ...route, component: component, children: [], root: null, parent: null, firstChild: null, pathFromRoot: null, paramMap: null, queryParamMap: null }; + let result = datasetGroupTitleResolver.resolve(route, null); + expect(result).toBeObservable(expected); + + }); + it('resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) should return test_label - New dataset-group ', () => { + const expected = cold('a', { a: instance.label + ' - New dataset-group' }); + let route: ActivatedRouteSnapshot; + component = { name: 'TestComponent' } + route = { ...route, component: component, children: [], root: null, parent: null, firstChild: null, pathFromRoot: null, paramMap: null, queryParamMap: null }; + let result = datasetGroupTitleResolver.resolve(route, null); + expect(result).toBeObservable(expected); + + }); + + +}); diff --git a/client/src/app/admin/instance/dataset-group/dataset-group.module.spec.ts b/client/src/app/admin/instance/dataset-group/dataset-group.module.spec.ts new file mode 100644 index 00000000..892bdc74 --- /dev/null +++ b/client/src/app/admin/instance/dataset-group/dataset-group.module.spec.ts @@ -0,0 +1,16 @@ +/** + * This file is part of Anis Client. + * + * @copyright Laboratoire d'Astrophysique de Marseille / CNRS + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +import { DatasetGroupModule } from './dataset-group.module'; + +describe('[admin][instance][dataset-group]DatasetGroupModule', () => { + it('Test DatasetGroupModule module', () => { + expect(DatasetGroupModule.name).toEqual('DatasetGroupModule'); + }); +}); diff --git a/client/src/app/admin/instance/dataset-group/edit-dataset-group-title.resolver.spec.ts b/client/src/app/admin/instance/dataset-group/edit-dataset-group-title.resolver.spec.ts new file mode 100644 index 00000000..93457230 --- /dev/null +++ b/client/src/app/admin/instance/dataset-group/edit-dataset-group-title.resolver.spec.ts @@ -0,0 +1,64 @@ +/** + * This file is part of Anis Client. + * + * @copyright Laboratoire d'Astrophysique de Marseille / CNRS + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +import { TestBed } from '@angular/core/testing'; +import { MockStore, provideMockStore } from '@ngrx/store/testing'; +import { cold, hot } from 'jasmine-marbles'; +import * as instanceSelector from 'src/app/metamodel/selectors/instance.selector'; +import { DatasetGroup, Instance } from 'src/app/metamodel/models'; +import { EditDatasetGroupTitleResolver } from './edit-dataset-group-title.resolver'; +import * as datasetGroupSelector from 'src/app/metamodel/selectors/dataset-group.selector'; + +describe('[admin][instance][dataset-group] DatasetGroupTitleResolver', () => { + let editDatasetGroupTitleResolver: EditDatasetGroupTitleResolver; + let store: MockStore; + let mockDatasetGroupSelectorGroupListIsLoaded; + let mockInstanceSelectorInstanceByRouteName; + let mockDatasetGroupSelectorDatasetGroupByRouteId; + let instance: Instance; + let datasetGroup: DatasetGroup; + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [], + providers: [ + EditDatasetGroupTitleResolver, + provideMockStore({}), + ] + }) + instance = { ...instance, label: 'instance_test_label' } + + store = TestBed.inject(MockStore); + datasetGroup = { datasets: [], id: 1, instance_name: 'test', role: 'test' }; + + editDatasetGroupTitleResolver = TestBed.inject(EditDatasetGroupTitleResolver); + mockDatasetGroupSelectorDatasetGroupByRouteId = store.overrideSelector(datasetGroupSelector.selectDatasetGroupByRouteId, datasetGroup); + mockDatasetGroupSelectorGroupListIsLoaded = store.overrideSelector(datasetGroupSelector.selectDatasetGroupListIsLoaded, false); + mockInstanceSelectorInstanceByRouteName = store.overrideSelector(instanceSelector.selectInstanceByRouteName, instance); + }); + + it('should be created', () => { + expect(editDatasetGroupTitleResolver).toBeTruthy(); + }); + it('shoud dispatch datasetGroupActions.loadDatasetGroupList() action and return datasetGroupListIsLoaded', () => { + const expected = cold('a', { a: [] }); + let spy = jest.spyOn(store, 'dispatch'); + let result = hot('a', { a: editDatasetGroupTitleResolver.resolve(null, null) }); + + expect(result).toBeObservable(expected); + expect(spy).toHaveBeenCalledTimes(1); + }); + it('should return test - Edit dataset-group test', () => { + mockDatasetGroupSelectorGroupListIsLoaded = store.overrideSelector(datasetGroupSelector.selectDatasetGroupListIsLoaded, true); + let result = editDatasetGroupTitleResolver.resolve(null, null); + const expected = cold('a', { a: instance.label + " - Edit dataset-group " + datasetGroup.role }); + expect(result).toBeObservable(expected); + }); + +}); + -- GitLab