Skip to content
Snippets Groups Projects
Commit 6b5986a9 authored by Tifenn Guillas's avatar Tifenn Guillas
Browse files

WIP: tests on datatable components

parent 0519fc22
No related branches found
No related tags found
2 merge requests!29Develop,!21Resolve "Add tests for instance shared search module"
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { Component, Input } from '@angular/core';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { AccordionModule } from 'ngx-bootstrap/accordion';
import { DatatableComponent } from './datatable.component';
import { SearchQueryParams } from '../../../store/models';
import {
DetailRendererConfig,
DownloadRendererConfig,
ImageRendererConfig,
LinkRendererConfig,
RendererConfig
} from '../../../../metamodel/models/renderers';
describe('[Instance][SharedSearch][Components][Datatable] DatatableComponent', () => {
@Component({ selector: 'app-detail-renderer', template: '' })
class DetailRendererStubComponent {
@Input() value: string | number;
@Input() datasetName: string;
@Input() instanceSelected: string;
@Input() queryParams: SearchQueryParams;
@Input() config: DetailRendererConfig;
}
@Component({ selector: 'app-link-renderer', template: '' })
class LinkRendererStubComponent {
@Input() value: string | number;
@Input() datasetName: string;
@Input() config: LinkRendererConfig;
}
@Component({ selector: 'app-download-renderer', template: '' })
class DownloadRendererStubComponent {
@Input() value: string;
@Input() datasetName: string;
@Input() datasetPublic: boolean;
@Input() config: DownloadRendererConfig;
}
@Component({ selector: 'app-image-renderer', template: '' })
class ImageRendererStubComponent {
@Input() value: string | number;
@Input() datasetName: string;
@Input() config: ImageRendererConfig;
}
@Component({ selector: 'app-json-renderer', template: '' })
class JsonRendererStubComponent {
@Input() value: string | number;
@Input() attributeLabel: string;
@Input() config: RendererConfig;
}
@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,
DetailRendererStubComponent,
LinkRendererStubComponent,
DownloadRendererStubComponent,
ImageRendererStubComponent,
JsonRendererStubComponent,
PaginationStubComponent
],
// imports: [AccordionModule.forRoot(), BrowserAnimationsModule]
});
fixture = TestBed.createComponent(DatatableComponent);
component = fixture.componentInstance;
});
it('should create the component', () => {
expect(component).toBeTruthy();
});
// it('#requiredParams() should return if required params are loaded', () => {
// component.attributeList = ATTRIBUTE_LIST;
// component.outputList = [1];
// component.dataLength = 1;
// expect(component.requiredParams()).toBeTruthy();
// component.dataLength = undefined;
// expect(component.requiredParams()).toBeFalsy();
// component.dataLength = 1;
// component.outputList = [];
// expect(component.requiredParams()).toBeFalsy();
// component.outputList = [1];
// component.attributeList = []
// expect(component.requiredParams()).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('#getOutputList() should return filtered output list', () => {
// component.outputList = [2]
// component.attributeList = ATTRIBUTE_LIST;
// expect(component.getOutputList().length).toBe(1);
// });
//
// it('#toggleSelection(datum) should return add datum to selectedData', () => {
// const datum = { label_one: 123456 };
// component.attributeList = 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.attributeList = 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.attributeList = 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.attributeList = ATTRIBUTE_LIST;
// component.selectedData = [];
// expect(component.isSelected(datum)).toBeFalsy();
// });
//
// it('#changePage() should change page value and raise getData event', () => {
// component.dataset = DATASET;
// component.sortedCol = 1;
// component.sortedOrder = PaginationOrder.a;
// const expectedPagination: Pagination = {
// dname: 'cat_1',
// page: 2,
// nbItems: 10,
// sortedCol: 1,
// order: PaginationOrder.a
// }
// component.getData.subscribe((event: Pagination) => expect(event).toEqual(expectedPagination));
// component.changePage(2);
// });
//
// it('#changeNbItems() should change nbItems value and raise getData event', () => {
// component.dataset = DATASET;
// component.sortedCol = 1;
// component.sortedOrder = PaginationOrder.a;
// const expectedPagination: Pagination = {
// dname: 'cat_1',
// page: 1,
// nbItems: 20,
// sortedCol: 1,
// order: PaginationOrder.a
// }
// component.getData.subscribe((event: Pagination) => expect(event).toEqual(expectedPagination));
// component.changeNbItems(20);
// });
//
// it('#sort() should raise getData event with correct parameters', () => {
// component.dataset = DATASET;
// component.sortedOrder = PaginationOrder.a;
// let expectedPagination: Pagination = {
// dname: 'cat_1',
// page: 1,
// nbItems: 10,
// sortedCol: 1,
// order: PaginationOrder.a
// }
// let subscribtion = component.getData.subscribe((event: Pagination) => expect(event).toEqual(expectedPagination));
// component.sort(1);
// subscribtion.unsubscribe();
// component.sortedCol = 1;
// component.sortedOrder = PaginationOrder.a;
// expectedPagination = {
// dname: 'cat_1',
// page: 1,
// nbItems: 10,
// sortedCol: 1,
// order: PaginationOrder.d
// }
// subscribtion = component.getData.subscribe((event: Pagination) => expect(event).toEqual(expectedPagination));
// component.sort(1);
// subscribtion.unsubscribe();
// component.sortedCol = 1;
// component.sortedOrder = PaginationOrder.d;
// expectedPagination = {
// dname: 'cat_1',
// page: 1,
// nbItems: 10,
// sortedCol: 1,
// order: PaginationOrder.a
// }
// subscribtion = component.getData.subscribe((event: Pagination) => expect(event).toEqual(expectedPagination));
// component.sort(1);
// });
//
// it('#ngOnInit() should init sortedCol value', () => {
// component.attributeList = ATTRIBUTE_LIST;
// component.ngOnInit();
// expect(component.sortedCol).toEqual(1);
// });
});
...@@ -9,20 +9,28 @@ ...@@ -9,20 +9,28 @@
import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
import { Instance, Attribute, Dataset, DetailRendererConfig, DownloadRendererConfig, ImageRendererConfig, LinkRendererConfig, RendererConfig } from 'src/app/metamodel/models'; import {
Instance,
Attribute,
Dataset,
DetailRendererConfig,
DownloadRendererConfig,
ImageRendererConfig,
LinkRendererConfig,
RendererConfig } from 'src/app/metamodel/models';
import { Pagination, PaginationOrder, SearchQueryParams } from 'src/app/instance/store/models'; import { Pagination, PaginationOrder, SearchQueryParams } from 'src/app/instance/store/models';
@Component({
selector: 'app-datatable',
templateUrl: 'datatable.component.html',
styleUrls: ['datatable.component.scss'],
})
/** /**
* @class * @class
* @classdesc Datatable component. * @classdesc Datatable component.
* *
* @implements OnInit * @implements OnInit
*/ */
@Component({
selector: 'app-datatable',
templateUrl: 'datatable.component.html',
styleUrls: ['datatable.component.scss'],
})
export class DatatableComponent implements OnInit { export class DatatableComponent implements OnInit {
@Input() dataset: Dataset; @Input() dataset: Dataset;
@Input() instance: Instance; @Input() instance: Instance;
...@@ -43,7 +51,7 @@ export class DatatableComponent implements OnInit { ...@@ -43,7 +51,7 @@ export class DatatableComponent implements OnInit {
public sortedCol: number = null; public sortedCol: number = null;
public sortedOrder: PaginationOrder = PaginationOrder.a; public sortedOrder: PaginationOrder = PaginationOrder.a;
ngOnInit() { ngOnInit(): void {
this.sortedCol = this.attributeList.find(a => a.order_by).id; this.sortedCol = this.attributeList.find(a => a.order_by).id;
Promise.resolve(null).then(() => this.retrieveData.emit({ Promise.resolve(null).then(() => this.retrieveData.emit({
dname: this.dataset.name, dname: this.dataset.name,
...@@ -54,28 +62,28 @@ export class DatatableComponent implements OnInit { ...@@ -54,28 +62,28 @@ export class DatatableComponent implements OnInit {
})); }));
} }
getRendererConfig(attribute: Attribute) { /**
let config = null; * Returns renderer configuration for the given attribute.
*
* @param {Attribute} attribute - The attribute.
*
* @return DetailRendererConfig | LinkRendererConfig | DownloadRendererConfig | ImageRendererConfig | RendererConfig | null
*/
getRendererConfig(attribute: Attribute): DetailRendererConfig | LinkRendererConfig | DownloadRendererConfig | ImageRendererConfig | RendererConfig | null {
switch(attribute.renderer) { switch(attribute.renderer) {
case 'detail': case 'detail':
config = attribute.renderer_config as DetailRendererConfig; return attribute.renderer_config as DetailRendererConfig;
break;
case 'link': case 'link':
config = attribute.renderer_config as LinkRendererConfig; return attribute.renderer_config as LinkRendererConfig;
break;
case 'download': case 'download':
config = attribute.renderer_config as DownloadRendererConfig; return attribute.renderer_config as DownloadRendererConfig;
break;
case 'image': case 'image':
config = attribute.renderer_config as ImageRendererConfig; return attribute.renderer_config as ImageRendererConfig;
break;
case 'json': case 'json':
config = attribute.renderer_config as RendererConfig; return attribute.renderer_config as RendererConfig;
break;
default: default:
config = null; return null;
} }
return config;
} }
/** /**
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment