Skip to content
Snippets Groups Projects
datatable.component.spec.ts 6.24 KiB
Newer Older
  • Learn to ignore specific revisions
  • import { ComponentFixture, TestBed } from '@angular/core/testing';
    
    import { Component, Input, Attribute } from '@angular/core';
    
    import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
    
    import { AccordionModule } from 'ngx-bootstrap';
    import { DatatableComponent } from './datatable.component';
    import { Dataset } from '../../../metamodel/model';
    import { ATTRIBUTE_LIST, DATASET_LIST } from '../../../../settings/test-data';
    
    describe('[Search][Result] Component: DatatableComponent', () => {
        @Component({ selector: 'app-img', template: '' })
        class ImgStubComponent {
            @Input() src: string;
        }
    
        @Component({ selector: 'app-thumbnail', template: '' })
        class ThumbnailStubComponent {
            @Input() src: string;
            @Input() attributeName: string;
        }
    
        @Component({ selector: 'app-link', template: '' })
        class LinkStubComponent {
            @Input() href: string;
        }
    
        @Component({ selector: 'app-btn', template: '' })
        class BtnStubComponent {
            @Input() href: string;
        }
    
        @Component({ selector: 'app-detail', template: '' })
        class DetailStubComponent {
            @Input() style: string;
            @Input() datasetName: string;
            @Input() data: string | number;
        }
    
        @Component({ selector: 'app-download', template: '' })
        class DownloadStubComponent {
            @Input() href: string;
        }
    
        @Component({ selector: 'app-json-renderer', template: '' })
        class JsonStubComponent {
            @Input() attributeName: string;
            @Input() json: string;
        }
    
        @Component({ selector: 'pagination', template: '' })
        class PaginationStubComponent {
            @Input() totalItems: number;
            @Input() boundaryLinks: boolean;
            @Input() rotate: boolean;
            @Input() maxSize: number;
        }
    
        let component: DatatableComponent;
        let fixture: ComponentFixture<DatatableComponent>;
    
        beforeEach(() => {
            TestBed.configureTestingModule({
                declarations: [
                    DatatableComponent,
                    ImgStubComponent,
                    ThumbnailStubComponent,
                    LinkStubComponent,
                    BtnStubComponent,
                    DetailStubComponent,
                    DownloadStubComponent,
                    JsonStubComponent,
                    PaginationStubComponent
                ],
                imports: [AccordionModule.forRoot(), BrowserAnimationsModule]
            });
            fixture = TestBed.createComponent(DatatableComponent);
            component = fixture.componentInstance;
        });
    
        it('should create the component', () => {
    
            expect(component).toBeTruthy();
    
        it('#getOutputList() should return filtered output list', () => {
            component.outputList = [2]
            component.datasetAttributeList = ATTRIBUTE_LIST;
            const outputList = component.getOutputList();
            expect(outputList.length).toBe(1);
    
        });
    
        it('#getDataset() should return dataset object', () => {
            component.datasetList = DATASET_LIST;
            component.datasetName = 'cat_1';
            const dataset: Dataset = component.getDataset();
            expect(dataset.name).toBe('cat_1');
            expect(dataset.label).toBe('Cat 1');
        });
    
        it('#getAttributeId(attributeName) should return id of attributeName', () => {
            component.datasetAttributeList = ATTRIBUTE_LIST;
            expect(component.getAttributeId('name_one')).toBe(1);
        });
    
        it('#getAttributeRenderer(attributeName) should return renderer type of attributeName', () => {
            component.datasetAttributeList = ATTRIBUTE_LIST;
            expect(component.getAttributeRenderer('name_one')).toBe('btn');
        });
    
        it('#getAttributeUriAction(attributeName, datum) should return uri action of attributeName', () => {
            component.datasetAttributeList = ATTRIBUTE_LIST;
            expect(component.getAttributeUriAction('name_one', 'test')).toBe('test');
            expect(component.getAttributeUriAction('name_two', 'test')).toBe('http://test.com/test');
        });
    
        it('#toggleSelection(datum) should return add datum to selectedData', () => {
            const datum = { label_one: 123456 };
            component.datasetAttributeList = ATTRIBUTE_LIST;
            component.selectedData = [];
            component.addSelectedData.subscribe((event: any) => expect(event).toBe(123456));
            component.toggleSelection(datum);
        });
    
        it('#toggleSelection(datum) should return remove datum to selectedData', () => {
            const datum = { label_one: 123456 };
            component.selectedData = [123456];
            component.datasetAttributeList = ATTRIBUTE_LIST;
            component.deleteSelectedData.subscribe((event: any) => expect(event).toBe(123456));
            component.toggleSelection(datum);
        });
    
        it('#isSelected(datum) should return true datum is selected', () => {
            const datum = { label_one: 123456 };
            component.datasetAttributeList = ATTRIBUTE_LIST;
            component.selectedData = [123456];
            expect(component.isSelected(datum)).toBeTruthy();
        });
    
        it('#isSelected(datum) should return false datum is not selected', () => {
            const datum = { label_one: 123456 };
            component.datasetAttributeList = ATTRIBUTE_LIST;
            component.selectedData = [];
            expect(component.isSelected(datum)).toBeFalsy();
        });
    
        it('#noSelectedData() should return true if no selectedData', () => {
            component.selectedData = [];
            expect(component.noSelectedData()).toBeTruthy();
        });
    
        it('#noSelectedData() should return false if there are selectedData', () => {
            component.selectedData = [123456];
            expect(component.noSelectedData()).toBeFalsy();
        });
    
    
        it('#changePage() should change page value and raise getSearchData event', () => {
            component.executeProcess.subscribe((event: string) => expect(event).toBe('test'));
            component.emitProcess('test');
        });
    
        it('#changePage() should change page value and raise getSearchData event', () => {
            component.getSearchData.subscribe((event: [number, number]) => expect(event).toEqual([2, 10]));
            component.changePage(2);
        });
    
        it('#changeNbItems() should change nbItems value and raise getSearchData event', () => {
            component.getSearchData.subscribe((event: [number, number]) => expect(event).toEqual([1, 20]));
            component.changeNbItems(20);
        });