@@ -3,7 +3,8 @@ import {SimpleChange, Component} from "@angular/core";
33import { DataTable , PageEvent , SortEvent } from "./DataTable" ;
44import { TestBed , ComponentFixture } from "@angular/core/testing" ;
55import { By } from "@angular/platform-browser" ;
6- import * as _ from "lodash" ;
6+ import { switchMap } from 'rxjs/operators' ;
7+ import { range } from "rxjs" ;
78
89@Component ( {
910 template : `<table [mfData]="[]"></table>`
@@ -29,13 +30,13 @@ describe("DataTable directive tests", ()=> {
2930 { id : 5 , name : 'Ðrone' } ,
3031 { id : 4 , name : 'Ananas' }
3132 ] ;
32- datatable . ngOnChanges ( { inputData : new SimpleChange ( null , datatable . inputData ) } ) ;
33+ datatable . ngOnChanges ( { inputData : new SimpleChange ( null , datatable . inputData , false ) } ) ;
3334 } ) ;
3435
3536 describe ( "initializing" , ( ) => {
3637
3738 it ( "data should be empty array if inputData is undefined or null" , ( ) => {
38- datatable . ngOnChanges ( { inputData : new SimpleChange ( null , null ) } ) ;
39+ datatable . ngOnChanges ( { inputData : new SimpleChange ( null , null , false ) } ) ;
3940 datatable . ngDoCheck ( ) ;
4041 expect ( datatable . data ) . toEqual ( [ ] ) ;
4142 } ) ;
@@ -108,12 +109,19 @@ describe("DataTable directive tests", ()=> {
108109 } ) ;
109110
110111 datatable . rowsOnPage = 3 ;
111- datatable . ngOnChanges ( { rowsOnPage : new SimpleChange ( 2 , 3 ) } ) ;
112+ datatable . ngOnChanges ( { rowsOnPage : new SimpleChange ( 2 , 3 , false ) } ) ;
112113 datatable . ngDoCheck ( ) ;
113114 expect ( datatable . data ) . toEqual ( [ { id : 3 , name : 'banana' } , { id : 1 , name : 'Duck' } , { id : 2 , name : 'ącki' } ] ) ;
114-
115-
116115 } ) ;
116+
117+ it ( "should emit a dataLength of 0 when inputData is null or undefined" , ( done ) => {
118+ datatable . onPageChange . subscribe ( ( pageOptions : PageEvent ) => {
119+ expect ( pageOptions . dataLength ) . toEqual ( 0 ) ;
120+ done ( ) ;
121+ } ) ;
122+ datatable . inputData = null ;
123+ datatable . setPage ( 2 , 3 ) ;
124+ } )
117125 } ) ;
118126
119127 describe ( "sorting" , ( ) => {
@@ -128,8 +136,8 @@ describe("DataTable directive tests", ()=> {
128136 datatable . sortBy = "id" ;
129137 datatable . sortOrder = "asc" ;
130138 datatable . ngOnChanges ( {
131- sortBy : new SimpleChange ( null , datatable . sortBy ) ,
132- sortOrder : new SimpleChange ( null , datatable . sortOrder )
139+ sortBy : new SimpleChange ( null , datatable . sortBy , false ) ,
140+ sortOrder : new SimpleChange ( null , datatable . sortOrder , false )
133141 } ) ;
134142 datatable . ngDoCheck ( ) ;
135143 expect ( datatable . data ) . toEqual ( [
@@ -151,8 +159,8 @@ describe("DataTable directive tests", ()=> {
151159 datatable . sortBy = "id" ;
152160 datatable . sortOrder = "desc" ;
153161 datatable . ngOnChanges ( {
154- sortBy : new SimpleChange ( null , datatable . sortBy ) ,
155- sortOrder : new SimpleChange ( null , datatable . sortOrder )
162+ sortBy : new SimpleChange ( null , datatable . sortBy , false ) ,
163+ sortOrder : new SimpleChange ( null , datatable . sortOrder , false )
156164 } ) ;
157165 datatable . ngDoCheck ( ) ;
158166
@@ -167,7 +175,7 @@ describe("DataTable directive tests", ()=> {
167175 datatable . ngDoCheck ( ) ;
168176 datatable . sortBy = "id" ;
169177 datatable . ngOnChanges ( {
170- sortBy : new SimpleChange ( null , datatable . sortBy )
178+ sortBy : new SimpleChange ( null , datatable . sortBy , false )
171179 } ) ;
172180 datatable . ngDoCheck ( ) ;
173181 expect ( datatable . sortOrder ) . toEqual ( "asc" ) ;
@@ -181,10 +189,10 @@ describe("DataTable directive tests", ()=> {
181189 } ) ;
182190 datatable . ngDoCheck ( ) ;
183191 datatable . sortBy = "id" ;
184- datatable . sortOrder = "bulb" ;
192+ datatable . sortOrder = "bulb" as any ;
185193 datatable . ngOnChanges ( {
186- sortBy : new SimpleChange ( null , datatable . sortBy ) ,
187- sortOrder : new SimpleChange ( null , datatable . sortOrder )
194+ sortBy : new SimpleChange ( null , datatable . sortBy , false ) ,
195+ sortOrder : new SimpleChange ( null , datatable . sortOrder , false )
188196 } ) ;
189197 datatable . ngDoCheck ( ) ;
190198 expect ( datatable . sortOrder ) . toEqual ( "asc" ) ;
@@ -197,24 +205,40 @@ describe("DataTable directive tests", ()=> {
197205 ] ) ;
198206 } ) ;
199207
208+ it ( "should set sortOrder to 'asc' if setSort is given something else than 'asc' or 'desc'" , ( ) => {
209+ datatable . setSort ( "id" , "bulb" as any ) ;
210+ expect ( datatable . getSort ( ) ) . toEqual ( { sortBy : "id" , sortOrder : "asc" } ) ;
211+ datatable . ngDoCheck ( ) ;
212+ expect ( datatable . sortOrder ) . toEqual ( "asc" ) ;
213+ expect ( datatable . data ) . toEqual ( [
214+ { id : 1 , name : 'Duck' } ,
215+ { id : 2 , name : 'ącki' } ,
216+ { id : 3 , name : 'banana' } ,
217+ { id : 4 , name : 'Ananas' } ,
218+ { id : 5 , name : 'Ðrone' }
219+ ] ) ;
220+ } ) ;
221+
200222 it ( "shouldn't change order when only order provided" , ( done ) => {
201223 done ( ) ;
202224 datatable . onSortChange . subscribe ( ( ) => {
203225 done . fail ( "OnSortChange shouldn't been fired" ) ;
204226 } ) ;
205227 datatable . ngDoCheck ( ) ;
206228 datatable . sortOrder = "desc" ;
207- datatable . ngOnChanges ( { sortOrder : new SimpleChange ( null , datatable . sortOrder ) } ) ;
229+ datatable . ngOnChanges ( { sortOrder : new SimpleChange ( null , datatable . sortOrder , false ) } ) ;
208230 datatable . ngDoCheck ( ) ;
209231 expect ( datatable . data ) . toEqual ( datatable . inputData ) ;
210232 } ) ;
211233
212234 it ( "should call output event when sorting changed" , ( done ) => {
213235 datatable . ngDoCheck ( ) ;
214- datatable . sortByChange . switchMap ( ( sortBy : string ) => {
215- expect ( sortBy ) . toEqual ( "id" ) ;
216- return datatable . sortOrderChange ;
217- } ) . subscribe ( ( sortOrder : string ) => {
236+ datatable . sortByChange . pipe (
237+ switchMap ( ( sortBy : string ) => {
238+ expect ( sortBy ) . toEqual ( "id" ) ;
239+ return datatable . sortOrderChange ;
240+ } )
241+ ) . subscribe ( ( sortOrder : string ) => {
218242 expect ( sortOrder ) . toEqual ( "desc" ) ;
219243 done ( ) ;
220244 } ) ;
@@ -228,8 +252,8 @@ describe("DataTable directive tests", ()=> {
228252 done . fail ( "Shouldn't call sortOrderChange" ) ;
229253 } ) ;
230254 done ( ) ;
231- datatable . sortOrder = "bulb" ;
232- datatable . ngOnChanges ( { sortOrder : new SimpleChange ( null , datatable . sortOrder ) } ) ;
255+ datatable . sortOrder = "bulb" as any ;
256+ datatable . ngOnChanges ( { sortOrder : new SimpleChange ( null , datatable . sortOrder , false ) } ) ;
233257 datatable . ngDoCheck ( ) ;
234258 } ) ;
235259 // Wywołanie outputa gdy zmiana z innej strony
@@ -272,14 +296,16 @@ describe("DataTable directive tests", ()=> {
272296 { name : 'Claire' , age : 9 } ,
273297 { name : 'Anna' , age : 34 } ,
274298 { name : 'Claire' , age : 16 } ,
299+ { name : 'Anna' , age : 12 } ,
275300 { name : 'Claire' , age : 7 } ,
276301 { name : 'Anna' , age : 12 }
277302 ] ;
278- datatable . ngOnChanges ( { inputData : new SimpleChange ( datatable . inputData , newData ) } ) ;
303+ datatable . ngOnChanges ( { inputData : new SimpleChange ( datatable . inputData , newData , false ) } ) ;
279304 datatable . setSort ( [ 'name' , 'age' ] , "asc" ) ;
280305 datatable . ngDoCheck ( ) ;
281306
282307 expect ( datatable . data ) . toEqual ( [
308+ { name : 'Anna' , age : 12 } ,
283309 { name : 'Anna' , age : 12 } ,
284310 { name : 'Anna' , age : 34 } ,
285311 { name : 'Claire' , age : 7 } ,
@@ -297,7 +323,7 @@ describe("DataTable directive tests", ()=> {
297323 { name : 'Claire' , city : { zip : '11111' } } ,
298324 { name : 'Anna' , city : { zip : '21111' } }
299325 ] ;
300- datatable . ngOnChanges ( { inputData : new SimpleChange ( datatable . inputData , newData ) } ) ;
326+ datatable . ngOnChanges ( { inputData : new SimpleChange ( datatable . inputData , newData , false ) } ) ;
301327 datatable . setSort ( "city.zip" , "asc" ) ;
302328 datatable . ngDoCheck ( ) ;
303329
@@ -315,7 +341,7 @@ describe("DataTable directive tests", ()=> {
315341 describe ( "data change" , ( ) => {
316342 it ( "should refresh data when inputData change" , ( ) => {
317343 let newData = [ { id : 5 , name : 'Ðrone' } , { id : 4 , name : 'Ananas' } ] ;
318- datatable . ngOnChanges ( { inputData : new SimpleChange ( datatable . inputData , newData ) } ) ;
344+ datatable . ngOnChanges ( { inputData : new SimpleChange ( datatable . inputData , newData , false ) } ) ;
319345 datatable . ngDoCheck ( ) ;
320346 expect ( datatable . data ) . toEqual ( [ { id : 5 , name : 'Ðrone' } , { id : 4 , name : 'Ananas' } ] ) ;
321347 } ) ;
@@ -347,7 +373,7 @@ describe("DataTable directive tests", ()=> {
347373 done ( ) ;
348374 } ) ;
349375 let newData = [ { id : 5 , name : 'Ðrone' } , { id : 4 , name : 'Ananas' } ] ;
350- datatable . ngOnChanges ( { inputData : new SimpleChange ( datatable . inputData , newData ) } ) ;
376+ datatable . ngOnChanges ( { inputData : new SimpleChange ( datatable . inputData , newData , false ) } ) ;
351377 datatable . ngDoCheck ( ) ;
352378 } ) ;
353379
@@ -375,7 +401,7 @@ describe("DataTable directive tests", ()=> {
375401 expect ( opt . rowsOnPage ) . toEqual ( 2 ) ;
376402 done ( ) ;
377403 } ) ;
378- _ . times ( 3 , ( ) => datatable . inputData . pop ( ) ) ;
404+ range ( 0 , 3 ) . forEach ( ( ) => datatable . inputData . pop ( ) ) ;
379405 datatable . ngDoCheck ( ) ;
380406 } ) ;
381407
@@ -384,7 +410,7 @@ describe("DataTable directive tests", ()=> {
384410 datatable . ngDoCheck ( ) ;
385411
386412 let newData = [ { id : 5 , name : 'Ðrone' } , { id : 4 , name : 'Ananas' } ] ;
387- datatable . ngOnChanges ( { inputData : new SimpleChange ( datatable . inputData , newData ) } ) ;
413+ datatable . ngOnChanges ( { inputData : new SimpleChange ( datatable . inputData , newData , false ) } ) ;
388414 datatable . ngDoCheck ( ) ;
389415 expect ( datatable . data ) . toEqual ( newData ) ;
390416 } ) ;
@@ -406,7 +432,7 @@ describe("DataTable directive tests", ()=> {
406432 datatable . ngDoCheck ( ) ;
407433
408434 let newData = [ { id : 5 , name : 'Ðrone' } , { id : 1 , name : 'Duck' } , { id : 4 , name : 'Ananas' } ] ;
409- datatable . ngOnChanges ( { inputData : new SimpleChange ( datatable . inputData , newData ) } ) ;
435+ datatable . ngOnChanges ( { inputData : new SimpleChange ( datatable . inputData , newData , false ) } ) ;
410436 datatable . ngDoCheck ( ) ;
411437 expect ( datatable . data ) . toEqual ( [ { id : 1 , name : 'Duck' } ] ) ;
412438 } ) ;
@@ -436,7 +462,7 @@ describe("DataTable directive tests", ()=> {
436462 datatable . ngDoCheck ( ) ;
437463
438464 let newData = [ ] ;
439- datatable . ngOnChanges ( { inputData : new SimpleChange ( datatable . inputData , newData ) } ) ;
465+ datatable . ngOnChanges ( { inputData : new SimpleChange ( datatable . inputData , newData , false ) } ) ;
440466 datatable . ngDoCheck ( ) ;
441467 expect ( datatable . activePage ) . toEqual ( 1 ) ;
442468 } ) ;
@@ -445,7 +471,7 @@ describe("DataTable directive tests", ()=> {
445471 datatable . setPage ( 2 , 1 ) ;
446472 datatable . ngDoCheck ( ) ;
447473
448- _ . times ( 5 , ( ) => datatable . inputData . pop ( ) ) ;
474+ range ( 0 , 5 ) . forEach ( ( ) => datatable . inputData . pop ( ) ) ;
449475 datatable . ngDoCheck ( ) ;
450476 expect ( datatable . inputData . length ) . toEqual ( 0 ) ;
451477 expect ( datatable . activePage ) . toEqual ( 1 ) ;
0 commit comments