11///<reference path="../node_modules/@types/jasmine/index.d.ts"/>
22import { SimpleChange , Component } from "@angular/core" ;
3- import { DataTable , PageEvent } from "./DataTable" ;
3+ import { DataTable , PageEvent , SortEvent } from "./DataTable" ;
44import { TestBed , ComponentFixture } from "@angular/core/testing" ;
55import { By } from "@angular/platform-browser" ;
66import * as _ from "lodash" ;
@@ -13,13 +13,13 @@ class TestComponent {
1313
1414describe ( "DataTable directive tests" , ( ) => {
1515 let datatable : DataTable ;
16- let datatableFixture : ComponentFixture < DataTable > ;
16+ let fixture : ComponentFixture < TestComponent > ;
1717
1818 beforeEach ( ( ) => {
1919 TestBed . configureTestingModule ( {
2020 declarations : [ DataTable , TestComponent ]
2121 } ) ;
22- let fixture = TestBed . createComponent ( TestComponent ) ;
22+ fixture = TestBed . createComponent ( TestComponent ) ;
2323 datatable = fixture . debugElement . query ( By . directive ( DataTable ) ) . injector . get ( DataTable ) as DataTable ;
2424
2525 datatable . inputData = [
@@ -123,6 +123,117 @@ describe("DataTable directive tests", ()=> {
123123 expect ( datatable . getSort ( ) ) . toEqual ( { sortBy : "id" , sortOrder : "desc" } ) ;
124124 } ) ;
125125
126+ it ( "should sort data after sorting input value changed" , ( ) => {
127+ datatable . ngDoCheck ( ) ;
128+ datatable . sortBy = "id" ;
129+ datatable . sortOrder = "asc" ;
130+ datatable . ngOnChanges ( {
131+ sortBy : new SimpleChange ( null , datatable . sortBy ) ,
132+ sortOrder : new SimpleChange ( null , datatable . sortOrder )
133+ } ) ;
134+ datatable . ngDoCheck ( ) ;
135+ expect ( datatable . data ) . toEqual ( [
136+ { id : 1 , name : 'Duck' } ,
137+ { id : 2 , name : 'ącki' } ,
138+ { id : 3 , name : 'banana' } ,
139+ { id : 4 , name : 'Ananas' } ,
140+ { id : 5 , name : 'Ðrone' }
141+ ] )
142+ } ) ;
143+
144+ it ( "should fire onSortChange event after sorting input value changed" , ( done ) => {
145+ datatable . onSortChange . subscribe ( ( event : SortEvent ) => {
146+ expect ( event . sortBy ) . toEqual ( "id" ) ;
147+ expect ( event . sortOrder ) . toEqual ( "desc" ) ;
148+ done ( ) ;
149+ } ) ;
150+ datatable . ngDoCheck ( ) ;
151+ datatable . sortBy = "id" ;
152+ datatable . sortOrder = "desc" ;
153+ datatable . ngOnChanges ( {
154+ sortBy : new SimpleChange ( null , datatable . sortBy ) ,
155+ sortOrder : new SimpleChange ( null , datatable . sortOrder )
156+ } ) ;
157+ datatable . ngDoCheck ( ) ;
158+
159+ } ) ;
160+
161+ it ( "should set sortOrder to 'asc' if not provided" , ( done ) => {
162+ datatable . onSortChange . subscribe ( ( event : SortEvent ) => {
163+ expect ( event . sortBy ) . toEqual ( "id" ) ;
164+ expect ( event . sortOrder ) . toEqual ( "asc" ) ;
165+ done ( ) ;
166+ } ) ;
167+ datatable . ngDoCheck ( ) ;
168+ datatable . sortBy = "id" ;
169+ datatable . ngOnChanges ( {
170+ sortBy : new SimpleChange ( null , datatable . sortBy )
171+ } ) ;
172+ datatable . ngDoCheck ( ) ;
173+ expect ( datatable . sortOrder ) . toEqual ( "asc" ) ;
174+ } ) ;
175+
176+ it ( "should set sortOrder to 'asc' if provided something else than 'asc' or 'desc'" , ( done ) => {
177+ datatable . onSortChange . subscribe ( ( event : SortEvent ) => {
178+ expect ( event . sortBy ) . toEqual ( "id" ) ;
179+ expect ( event . sortOrder ) . toEqual ( "asc" ) ;
180+ done ( ) ;
181+ } ) ;
182+ datatable . ngDoCheck ( ) ;
183+ datatable . sortBy = "id" ;
184+ datatable . sortOrder = "bulb" ;
185+ datatable . ngOnChanges ( {
186+ sortBy : new SimpleChange ( null , datatable . sortBy ) ,
187+ sortOrder : new SimpleChange ( null , datatable . sortOrder )
188+ } ) ;
189+ datatable . ngDoCheck ( ) ;
190+ expect ( datatable . sortOrder ) . toEqual ( "asc" ) ;
191+ expect ( datatable . data ) . toEqual ( [
192+ { id : 1 , name : 'Duck' } ,
193+ { id : 2 , name : 'ącki' } ,
194+ { id : 3 , name : 'banana' } ,
195+ { id : 4 , name : 'Ananas' } ,
196+ { id : 5 , name : 'Ðrone' }
197+ ] ) ;
198+ } ) ;
199+
200+ it ( "shouldn't change order when only order provided" , ( done ) => {
201+ done ( ) ;
202+ datatable . onSortChange . subscribe ( ( ) => {
203+ done . fail ( "OnSortChange shouldn't been fired" ) ;
204+ } ) ;
205+ datatable . ngDoCheck ( ) ;
206+ datatable . sortOrder = "desc" ;
207+ datatable . ngOnChanges ( { sortOrder : new SimpleChange ( null , datatable . sortOrder ) } ) ;
208+ datatable . ngDoCheck ( ) ;
209+ expect ( datatable . data ) . toEqual ( datatable . inputData ) ;
210+ } ) ;
211+
212+ it ( "should call output event when sorting changed" , ( done ) => {
213+ datatable . ngDoCheck ( ) ;
214+ datatable . sortByChange . switchMap ( ( sortBy : string ) => {
215+ expect ( sortBy ) . toEqual ( "id" ) ;
216+ return datatable . sortOrderChange ;
217+ } ) . subscribe ( ( sortOrder : string ) => {
218+ expect ( sortOrder ) . toEqual ( "desc" ) ;
219+ done ( ) ;
220+ } ) ;
221+
222+ datatable . setSort ( "id" , "desc" ) ;
223+ } ) ;
224+
225+ it ( "shouldn't call output event when sortOrder fixed" , ( done ) => {
226+ datatable . ngDoCheck ( ) ;
227+ datatable . sortOrderChange . subscribe ( ( ) => {
228+ done . fail ( "Shouldn't call sortOrderChange" ) ;
229+ } ) ;
230+ done ( ) ;
231+ datatable . sortOrder = "bulb" ;
232+ datatable . ngOnChanges ( { sortOrder : new SimpleChange ( null , datatable . sortOrder ) } ) ;
233+ datatable . ngDoCheck ( ) ;
234+ } ) ;
235+ // Wywołanie outputa gdy zmiana z innej strony
236+
126237 it ( "shouldn't refresh data when set page with same settings" , ( ) => {
127238 datatable . setSort ( "name" , "asc" ) ;
128239 datatable . ngDoCheck ( ) ;
0 commit comments