From ede919c4fd08f9a059291dcfdea91d125844054d Mon Sep 17 00:00:00 2001
From: dangapay <divin.angapay@lam.fr>
Date: Thu, 3 Nov 2022 15:47:57 +0100
Subject: [PATCH] add test for admin/instance/dataset/components

---
 .../add-attribute.component.spec.ts           | 74 +++++++++++++++
 .../instance-buttons.component.spec.ts        | 59 ++++++++++++
 .../configure-dataset-title.resolver.spec.ts  | 91 +++++++++++++++++++
 .../dataset/dataset-title.resolver.spec.ts    | 79 ++++++++++++++++
 .../instance/dataset/dataset.module.spec.ts   | 17 ++++
 5 files changed, 320 insertions(+)
 create mode 100644 client/src/app/admin/instance/dataset/components/add-attribute.component.spec.ts
 create mode 100644 client/src/app/admin/instance/dataset/components/instance-buttons.component.spec.ts
 create mode 100644 client/src/app/admin/instance/dataset/configure-dataset-title.resolver.spec.ts
 create mode 100644 client/src/app/admin/instance/dataset/dataset-title.resolver.spec.ts
 create mode 100644 client/src/app/admin/instance/dataset/dataset.module.spec.ts

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 00000000..a1b3e9e9
--- /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 00000000..df9a981d
--- /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 00000000..9acbc58b
--- /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 00000000..302ecf08
--- /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 00000000..292dbd38
--- /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');
+    });
+});
+
-- 
GitLab