diff --git a/client/src/app/admin/instance/dataset/components/add-attribute.component.spec.ts b/client/src/app/admin/instance/dataset/components/add-attribute.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..a1b3e9e9f77f79baac3cb235352ea076782aabd3 --- /dev/null +++ b/client/src/app/admin/instance/dataset/components/add-attribute.component.spec.ts @@ -0,0 +1,74 @@ +/** + * 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 { TemplateRef } from '@angular/core'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { ReactiveFormsModule } from '@angular/forms'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; +import { BsModalRef, BsModalService } from 'ngx-bootstrap/modal'; +import { Column } from 'src/app/admin/store/models'; +import { Attribute } from 'src/app/metamodel/models'; +import { AddAttributeComponent } from './add-attribute.component'; + +describe('[admin][instance][dataset][components] AddAttributeComponent', () => { + let component: AddAttributeComponent; + let fixture: ComponentFixture<AddAttributeComponent>; + const modalServiceStub = { + show: jest.fn(), + }; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [ + AddAttributeComponent, + ], + providers: [ + BsModalRef, + { provide: BsModalService, useValue: modalServiceStub } + ], + imports: [ + BrowserAnimationsModule, + ReactiveFormsModule + ], + }); + fixture = TestBed.createComponent(AddAttributeComponent); + component = fixture.componentInstance; + let attribute: Attribute; + component.attributeList = [{ ...attribute, name: 'test1' }, { ...attribute, name: 'test2test' }] + fixture.detectChanges(); + }); + + it('should create the component', () => { + expect(component).toBeTruthy(); + }); + + it('should call modalRef.show(template)', () => { + let template: TemplateRef<any> = null; + let spyOnLoadColumnList = jest.spyOn(component.loadColumnList, 'emit'); + let spy = jest.spyOn(modalServiceStub, 'show'); + component.openModal(template); + expect(spy).toHaveBeenCalledTimes(1); + expect(spy).toHaveBeenCalledWith(template); + expect(spyOnLoadColumnList).toHaveBeenCalledTimes(1); + }); + + it('alreadyExists(columnName: string) should return true', () => { + expect(component.alreadyExists('test1')).toEqual(true); + expect(component.alreadyExists('test')).toEqual(false); + }); + it('alreadyExists(columnName: string) should call emit on add', () => { + let spy = jest.spyOn(component.add, 'emit'); + let column: Column = { name: 'test', type: 'test' }; + component.addNewAttribute(column); + expect(spy).toHaveBeenCalledTimes(1); + + }); + +}); + diff --git a/client/src/app/admin/instance/dataset/components/instance-buttons.component.spec.ts b/client/src/app/admin/instance/dataset/components/instance-buttons.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..df9a981d32ee4604a3fe80c59aa07e2ba28856f0 --- /dev/null +++ b/client/src/app/admin/instance/dataset/components/instance-buttons.component.spec.ts @@ -0,0 +1,59 @@ +/** + * 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 { TemplateRef } from '@angular/core'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { ReactiveFormsModule } from '@angular/forms'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; +import { BsModalRef, BsModalService } from 'ngx-bootstrap/modal'; +import { Instance } from 'src/app/metamodel/models'; +import { InstanceButtonsComponent } from './instance-buttons.component'; + +describe('[admin][instance][dataset][components] InstanceButtonsComponent', () => { + let component: InstanceButtonsComponent; + let fixture: ComponentFixture<InstanceButtonsComponent>; + const modalServiceStub = { + show: jest.fn(), + }; + let instance: Instance; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [ + InstanceButtonsComponent, + ], + providers: [ + BsModalRef, + { provide: BsModalService, useValue: modalServiceStub } + ], + imports: [ + BrowserAnimationsModule, + ReactiveFormsModule + ], + }); + fixture = TestBed.createComponent(InstanceButtonsComponent); + component = fixture.componentInstance; + component.instance = { ...instance, name: 'test' }; + fixture.detectChanges(); + }); + + it('should create the component', () => { + expect(component).toBeTruthy(); + }); + + it('should call modalRef.show(template)', () => { + let template: TemplateRef<any> = null; + let spy = jest.spyOn(modalServiceStub, 'show'); + component.openModal(template); + expect(spy).toHaveBeenCalledTimes(1); + expect(spy).toHaveBeenCalledWith(template); + }); + +}); + diff --git a/client/src/app/admin/instance/dataset/configure-dataset-title.resolver.spec.ts b/client/src/app/admin/instance/dataset/configure-dataset-title.resolver.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..9acbc58b14cb08462afaa97b29c4702fcc49119d --- /dev/null +++ b/client/src/app/admin/instance/dataset/configure-dataset-title.resolver.spec.ts @@ -0,0 +1,91 @@ +/** + * 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 datasetSelector from 'src/app/metamodel/selectors/dataset.selector'; +import * as datasetActions from 'src/app/metamodel/actions/dataset.actions'; +import { ConfigureDatasetTitleResolver } from './configure-dataset-title.resolver'; +import { Dataset, Instance } from 'src/app/metamodel/models'; +import * as instanceSelector from 'src/app/metamodel/selectors/instance.selector'; +import { ActivatedRouteSnapshot } from '@angular/router'; +import { Type } from '@angular/core'; + +class MockActivatedRouteSnapshot extends ActivatedRouteSnapshot{ + constructor() { + super() + } + component: any; + +} +describe('[admin][instance][dataset] ConfigureDatasetTitleResolver', () => { + let configureDatasetTitleResolver: ConfigureDatasetTitleResolver; + let store: MockStore; + let mockDatabaseSelectorDatasetListIsLoaded; + let mockDatabaseSelectorDatasetByRouteName; + let mockInstanceSelectorInstanceByRouteName; + let dataset: Dataset; + dataset = { ...dataset, label: 'test_dataset_label' }; + let instance: Instance; + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [], + providers: [ + ConfigureDatasetTitleResolver, + provideMockStore({}), + ] + }) + + store = TestBed.inject(MockStore); + configureDatasetTitleResolver = TestBed.inject(ConfigureDatasetTitleResolver); + mockDatabaseSelectorDatasetListIsLoaded = store.overrideSelector(datasetSelector.selectDatasetListIsLoaded, false); + mockDatabaseSelectorDatasetByRouteName = store.overrideSelector(datasetSelector.selectDatasetByRouteName, dataset); + + }); + + it('should be created', () => { + expect(configureDatasetTitleResolver).toBeTruthy(); + }); + + it('should dispatch datasetActions loadDatasetList action and return datasetListIsLoaded ', () => { + const expected = cold('a', { a: [] }); + let spy = jest.spyOn(store, 'dispatch'); + let result = hot('a', { a: configureDatasetTitleResolver.resolve(null, null) }); + + expect(result).toBeObservable(expected); + expect(spy).toHaveBeenCalledTimes(1); + expect(spy).toHaveBeenCalledWith(datasetActions.loadDatasetList()); + + }); + it('should return test_instance_label - Edit dataset test_dataset_label ', () => { + const expected = cold('a', { a: "test_instance_label - Edit dataset test_dataset_label" }); + instance = {...instance, label: 'test_instance_label'} + mockDatabaseSelectorDatasetListIsLoaded = store.overrideSelector(datasetSelector.selectDatasetListIsLoaded, true); + mockInstanceSelectorInstanceByRouteName = store.overrideSelector(instanceSelector.selectInstanceByRouteName, instance); + let route: MockActivatedRouteSnapshot; + route = { ...route, component: { name: 'test'}, firstChild: null,root: null, parent: null, children: null, paramMap: null, queryParamMap: null, pathFromRoot: null} + let result = configureDatasetTitleResolver.resolve(route, null); + expect(result).toBeObservable(expected); + + }); + it('should return test_instance_label - Configure dataset test_dataset_label', () => { + const expected = cold('a', { a: 'test_instance_label - Configure dataset test_dataset_label' }); + instance = {...instance, label: 'test_instance_label'} + mockDatabaseSelectorDatasetListIsLoaded = store.overrideSelector(datasetSelector.selectDatasetListIsLoaded, true); + mockInstanceSelectorInstanceByRouteName = store.overrideSelector(instanceSelector.selectInstanceByRouteName, instance); + let route: MockActivatedRouteSnapshot; + route = { ...route, component: { name: 'ConfigureDatasetComponent'}, firstChild: null,root: null, parent: null, children: null, paramMap: null, queryParamMap: null, pathFromRoot: null} + let result = configureDatasetTitleResolver.resolve(route, null); + expect(result).toBeObservable(expected); + + }); +}); + diff --git a/client/src/app/admin/instance/dataset/dataset-title.resolver.spec.ts b/client/src/app/admin/instance/dataset/dataset-title.resolver.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..302ecf0837487c01c010650982e964ffca297bab --- /dev/null +++ b/client/src/app/admin/instance/dataset/dataset-title.resolver.spec.ts @@ -0,0 +1,79 @@ +/** + * 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 { ActivatedRouteSnapshot } from '@angular/router'; +import { DatasetTitleResolver } from './dataset-title.resolver'; +import { Instance } from 'src/app/metamodel/models'; + +class MockActivatedRouteSnapshot extends ActivatedRouteSnapshot { + constructor() { + super() + } + component: any; +} +describe('[admin][instance][dataset] DatasetTitleResolver', () => { + let datasetTitleResolver: DatasetTitleResolver; + let store: MockStore; + let mockInstanceSelectorInstanceByRouteName; + let instance: Instance; + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [], + providers: [ + DatasetTitleResolver, + provideMockStore({}), + ] + }) + + store = TestBed.inject(MockStore); + datasetTitleResolver = TestBed.inject(DatasetTitleResolver); + mockInstanceSelectorInstanceByRouteName = store.overrideSelector(instanceSelector.selectInstanceByRouteName, instance); + instance = { ...instance, label: 'test_instance_label' } + + }); + + it('should be created', () => { + expect(datasetTitleResolver).toBeTruthy(); + }); + + it('should return test_instance_label - New dataset', () => { + const expected = cold('a', { a: "test_instance_label - New dataset" }); + let route: MockActivatedRouteSnapshot; + route = { ...route, component: { name: 'test' }, firstChild: null, root: null, parent: null, children: null, paramMap: null, queryParamMap: null, pathFromRoot: null } + let result = datasetTitleResolver.resolve(route, null); + expect(result).toBeObservable(expected); + + }); + it('should return test_instance_label - Datasets list', () => { + const expected = cold('a', { a: 'test_instance_label - Datasets list' }); + instance = { ...instance, label: 'test_instance_label' } + + mockInstanceSelectorInstanceByRouteName = store.overrideSelector(instanceSelector.selectInstanceByRouteName, instance); + let route: MockActivatedRouteSnapshot; + route = { + ...route, + component: { name: 'DatasetListComponent' }, + firstChild: null, + root: null, + parent: null, + children: null, + paramMap: null, + queryParamMap: null, + pathFromRoot: null + } + let result = datasetTitleResolver.resolve(route, null); + expect(result).toBeObservable(expected); + + }); +}); + diff --git a/client/src/app/admin/instance/dataset/dataset.module.spec.ts b/client/src/app/admin/instance/dataset/dataset.module.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..292dbd38a2422e59efc03b21849645e62da2a1a4 --- /dev/null +++ b/client/src/app/admin/instance/dataset/dataset.module.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 { DatasetModule } from './dataset.module'; + +describe('[Database] DatabaseModule', () => { + it('Test Dataset module', () => { + expect(DatasetModule.name).toEqual('DatasetModule'); + }); +}); +