Skip to content
Snippets Groups Projects
dataset-tabs.component.spec.ts 3.07 KiB
Newer Older
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { Component, Input, Output, EventEmitter, ViewChild } from '@angular/core';
François Agneray's avatar
François Agneray committed
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
François Agneray's avatar
François Agneray committed
import { AccordionModule } from 'ngx-bootstrap/accordion';
import { DatasetTabsComponent } from './dataset-tabs.component';
import { Project, Dataset, Family } from '../../../metamodel/model';
import { PROJECT_LIST, DATASET_LIST, DATASET_FAMILY_LIST, DATASET } from '../../../../settings/test-data';

describe('[Search][Dataset] Component: DatasetTabsComponent', () => {
    @Component({
        selector: `app-host`,
        template: `
            <app-dataset-tabs
                [projectList]="projectList"
                [datasetList]="datasetList"
                [datasetFamilyList]="datasetFamilyList"
                [datasetSelected]="datasetSelected">
            </app-dataset-tabs>
        `
    })
    class TestHostComponent {
        @ViewChild(DatasetTabsComponent, { static: false })
        testedComponent: DatasetTabsComponent;
        projectList: Project[] = PROJECT_LIST;
        datasetList: Dataset[] = DATASET_LIST;
        datasetFamilyList: Family[] = DATASET_FAMILY_LIST;
        datasetSelected = 'cat_1';
    }

    @Component({ selector: 'app-dataset-card', template: '' })
    class DatasetCardStubComponent {
        @Input() project: Project;
        @Input() dataset: Dataset;
        @Input() datasetSelected: string;
        @Output() select: EventEmitter<string> = new EventEmitter();
    }

    let testHostComponent: TestHostComponent;
    let testHostFixture: ComponentFixture<TestHostComponent>;
    let testedComponent: DatasetTabsComponent;

    beforeEach(async(() => {
        TestBed.configureTestingModule({
            declarations: [
                DatasetTabsComponent,
                TestHostComponent,
                DatasetCardStubComponent
            ],
François Agneray's avatar
François Agneray committed
            imports: [AccordionModule.forRoot(), BrowserAnimationsModule]
        });
        testHostFixture = TestBed.createComponent(TestHostComponent);
        testHostComponent = testHostFixture.componentInstance;
        testHostFixture.detectChanges();
        testedComponent = testHostComponent.testedComponent;
    }));

    it('should create the component', () => {
        expect(testedComponent).toBeTruthy();
    });

    it('#getDatasetListByFamily(idFamily) should filter datasets by idFamily', () => {
        const filteredDatasetList: Dataset[] = testedComponent.getDatasetListByFamily(1);
        expect(filteredDatasetList.length).toBe(1);
        expect(filteredDatasetList[0].name).toBe('cat_1');
    });

    it('#getProject(dataset) should return the dataset project', () => {
        const project = testedComponent.getProject(DATASET);
        expect(project.name).toBe('project_1');
    });
    
    it('should select dataset if only one dataset in instance', () => {
        testedComponent.select.subscribe((event: string) => expect(event).toBe('cat_1'));
        testHostComponent.datasetList = [DATASET]
        testHostFixture.detectChanges();
    });