From 754c5297b562a58cb54518b9a22e4ae7f4978dac Mon Sep 17 00:00:00 2001 From: Denys Vuika Date: Thu, 2 Jun 2016 17:09:39 +0100 Subject: [PATCH] #113 unit tests (wip) --- .../components/datatable.component.spec.ts | 105 +++++++++++++++++- .../src/components/datatable.component.ts | 10 +- .../src/data/object-datatable-adapter.ts | 2 +- 3 files changed, 105 insertions(+), 12 deletions(-) diff --git a/ng2-components/ng2-alfresco-datatable/src/components/datatable.component.spec.ts b/ng2-components/ng2-alfresco-datatable/src/components/datatable.component.spec.ts index 83ad44c5ab..c1a2d72cc1 100644 --- a/ng2-components/ng2-alfresco-datatable/src/components/datatable.component.spec.ts +++ b/ng2-components/ng2-alfresco-datatable/src/components/datatable.component.spec.ts @@ -23,6 +23,14 @@ import { } from 'angular2/testing'; import { DataTableComponent } from './datatable.component'; +import { + DataRow, + DataSorting +} from './../data/datatable-adapter'; +import { + ObjectDataTableAdapter, + ObjectDataColumn +} from './../data/object-datatable-adapter'; describe('DataTable', () => { @@ -33,14 +41,101 @@ describe('DataTable', () => { dataTable = new DataTableComponent(); eventMock = { - preventDefault: function () { - console.log('mock preventDefault'); - } + preventDefault: function () {} }; }); - it('should pass', () => { - expect(true).toBe(true); + it('should initialize default adapter', () => { + expect(dataTable.data).toBeUndefined(); + dataTable.ngOnInit(); + expect(dataTable.data).toEqual(jasmine.any(ObjectDataTableAdapter)); + }); + + it('should initialize with custom data', () => { + let data = new ObjectDataTableAdapter([], []); + dataTable.data = data; + dataTable.ngOnInit(); + expect(dataTable.data).toBe(data); + }); + + it('should emit row click event', (done) => { + let row = {}; + + dataTable.rowClick.subscribe(e => { + expect(e.value).toBe(row); + done(); + }); + + dataTable.onRowClick(row, null); + }); + + it('should prevent default event on row click event', () => { + let e = jasmine.createSpyObj('event', ['preventDefault']); + dataTable.ngOnInit(); + dataTable.onRowClick(null, e); + expect(e.preventDefault).toHaveBeenCalled(); + }); + + it('should not sort if column is missing', () => { + dataTable.ngOnInit(); + let adapter = dataTable.data; + spyOn(adapter, 'setSorting').and.callThrough(); + dataTable.onColumnHeaderClick(null); + expect(adapter.setSorting).not.toHaveBeenCalled(); + }); + + it('should not sort upon clicking non-sortable column header', () => { + dataTable.ngOnInit(); + let adapter = dataTable.data; + spyOn(adapter, 'setSorting').and.callThrough(); + + let column = new ObjectDataColumn({ + key: 'column_1' + }); + + dataTable.onColumnHeaderClick(column); + expect(adapter.setSorting).not.toHaveBeenCalled(); + }); + + it('should set sorting upon column header clicked', () => { + dataTable.ngOnInit(); + let adapter = dataTable.data; + spyOn(adapter, 'setSorting').and.callThrough(); + + let column = new ObjectDataColumn({ + key: 'column_1', + sortable: true + }); + + dataTable.onColumnHeaderClick(column); + expect(adapter.setSorting).toHaveBeenCalledWith( + jasmine.objectContaining({ + key: 'column_1', + direction: 'asc' + }) + ); + }); + + it('should invert sorting upon column header clicked', () => { + dataTable.ngOnInit(); + + let adapter = dataTable.data; + spyOn(adapter, 'setSorting').and.callThrough(); + spyOn(adapter, 'getSorting').and.returnValue(new DataSorting('column_1', 'asc')); + + let column = new ObjectDataColumn({ + key: 'column_1', + sortable: true + }); + + dataTable.onColumnHeaderClick(column); + expect(adapter.setSorting).toHaveBeenCalledWith( + jasmine.objectContaining({ + key: 'column_1', + direction: 'desc' + }) + ); + }); }); diff --git a/ng2-components/ng2-alfresco-datatable/src/components/datatable.component.ts b/ng2-components/ng2-alfresco-datatable/src/components/datatable.component.ts index 7f985d45a8..b374e937a5 100644 --- a/ng2-components/ng2-alfresco-datatable/src/components/datatable.component.ts +++ b/ng2-components/ng2-alfresco-datatable/src/components/datatable.component.ts @@ -65,9 +65,7 @@ export class DataTableComponent implements OnInit, AfterViewChecked { } ngOnInit() { - if (this.data) { - console.log(this.data); - } else { + if (!this.data) { this.data = new ObjectDataTableAdapter([], []); } } @@ -89,7 +87,7 @@ export class DataTableComponent implements OnInit, AfterViewChecked { }); } - onRowDblClick(row: DataRow, e?) { + onRowDblClick(row: DataRow, e?: Event) { if (e) { e.preventDefault(); } @@ -103,14 +101,14 @@ export class DataTableComponent implements OnInit, AfterViewChecked { if (column && column.sortable) { let current = this.data.getSorting(); let newDirection = 'asc'; - if (column.key === current.key) { + if (current && column.key === current.key) { newDirection = current.direction === 'asc' ? 'desc' : 'asc'; } this.data.setSorting(new DataSorting(column.key, newDirection)); } } - onSelectAllClick(e?) { + onSelectAllClick(e?: Event) { if (e) { e.preventDefault(); } diff --git a/ng2-components/ng2-alfresco-datatable/src/data/object-datatable-adapter.ts b/ng2-components/ng2-alfresco-datatable/src/data/object-datatable-adapter.ts index 8e6a65e0a3..e56f922f86 100644 --- a/ng2-components/ng2-alfresco-datatable/src/data/object-datatable-adapter.ts +++ b/ng2-components/ng2-alfresco-datatable/src/data/object-datatable-adapter.ts @@ -160,7 +160,7 @@ export class ObjectDataColumn implements DataColumn { constructor(obj: any) { this.key = obj.key; - this.type = obj.type; + this.type = obj.type || 'text'; this.sortable = obj.sortable; this.title = obj.title; this.srTitle = obj.srTitle;