@@ -74,7 +74,7 @@ describe('DataTable', () => {
74
74
) ;
75
75
}
76
76
77
- const createComponent = ( Component , props = { } ) => {
77
+ const createComponent = ( { Component = DataTable , ... props } = { } ) => {
78
78
const wrapper = mount (
79
79
< Component columns = { fakeColumns } rows = { fakeRows } { ...props } /> ,
80
80
@@ -87,8 +87,8 @@ describe('DataTable', () => {
87
87
} ;
88
88
89
89
it ( 'sets appropriate table attributes' , ( ) => {
90
- const wrapper = createComponent ( DataTable ) ;
91
- const interactiveWrapper = createComponent ( DataTable , {
90
+ const wrapper = createComponent ( ) ;
91
+ const interactiveWrapper = createComponent ( {
92
92
onSelectRow : sinon . stub ( ) ,
93
93
} ) ;
94
94
const outer = wrapper . find ( 'Table' ) ;
@@ -105,7 +105,7 @@ describe('DataTable', () => {
105
105
106
106
describe ( 'table columns' , ( ) => {
107
107
it ( 'renders a column header for each column' , ( ) => {
108
- const wrapper = createComponent ( DataTable ) ;
108
+ const wrapper = createComponent ( ) ;
109
109
const tableHead = wrapper . find ( 'TableHead' ) ;
110
110
111
111
assert . equal ( tableHead . find ( 'th' ) . length , 3 ) ;
@@ -115,7 +115,7 @@ describe('DataTable', () => {
115
115
} ) ;
116
116
117
117
it ( 'applies extra column classes' , ( ) => {
118
- const wrapper = createComponent ( DataTable ) ;
118
+ const wrapper = createComponent ( ) ;
119
119
const tableHead = wrapper . find ( 'TableHead' ) ;
120
120
121
121
assert . isTrue ( tableHead . find ( 'th' ) . at ( 0 ) . hasClass ( 'w-[50%]' ) ) ;
@@ -124,15 +124,15 @@ describe('DataTable', () => {
124
124
125
125
describe ( 'table rows' , ( ) => {
126
126
it ( 'renders one table row per row provided' , ( ) => {
127
- const wrapper = createComponent ( DataTable ) ;
127
+ const wrapper = createComponent ( ) ;
128
128
assert . equal (
129
129
wrapper . find ( 'TableBody' ) . find ( 'TableRow' ) . length ,
130
130
fakeRows . length ,
131
131
) ;
132
132
} ) ;
133
133
134
134
it ( 'renders fields that are defined by columns' , ( ) => {
135
- const wrapper = createComponent ( DataTable ) ;
135
+ const wrapper = createComponent ( ) ;
136
136
const firstRow = wrapper . find ( 'TableBody' ) . find ( 'TableRow' ) . first ( ) ;
137
137
138
138
assert . equal ( firstRow . find ( 'td' ) . at ( 0 ) . text ( ) , 'Chocolate Cake' ) ;
@@ -157,7 +157,7 @@ describe('DataTable', () => {
157
157
158
158
const rows = [ fakeRows [ 3 ] ] ;
159
159
160
- const wrapper = createComponent ( DataTable , {
160
+ const wrapper = createComponent ( {
161
161
renderItem : formatCell ,
162
162
rows,
163
163
columns,
@@ -177,7 +177,7 @@ describe('DataTable', () => {
177
177
describe ( 'interacting with row data' , ( ) => {
178
178
it ( 'invokes `onSelectRow` callback when row is clicked' , ( ) => {
179
179
const onSelectRow = sinon . stub ( ) ;
180
- const wrapper = createComponent ( DataTable , {
180
+ const wrapper = createComponent ( {
181
181
onSelectRow,
182
182
} ) ;
183
183
@@ -188,7 +188,8 @@ describe('DataTable', () => {
188
188
189
189
it ( 'invokes `onSelectRows` callback when rows are clicked' , ( ) => {
190
190
const onSelectRows = sinon . stub ( ) ;
191
- const wrapper = createComponent ( MultiSelectDataTable , {
191
+ const wrapper = createComponent ( {
192
+ Component : MultiSelectDataTable ,
192
193
onSelectRows,
193
194
} ) ;
194
195
@@ -212,7 +213,7 @@ describe('DataTable', () => {
212
213
213
214
it ( 'invokes `onSelectRow` when row is selected with arrow keys' , ( ) => {
214
215
const onSelectRow = sinon . stub ( ) ;
215
- const wrapper = createComponent ( DataTable , {
216
+ const wrapper = createComponent ( {
216
217
onSelectRow,
217
218
} ) ;
218
219
@@ -229,7 +230,8 @@ describe('DataTable', () => {
229
230
230
231
it ( 'invokes `onSelectRows` callback when rows are selected with arrow keys' , ( ) => {
231
232
const onSelectRows = sinon . stub ( ) ;
232
- const wrapper = createComponent ( MultiSelectDataTable , {
233
+ const wrapper = createComponent ( {
234
+ Component : MultiSelectDataTable ,
233
235
onSelectRows,
234
236
} ) ;
235
237
@@ -252,7 +254,7 @@ describe('DataTable', () => {
252
254
253
255
it ( 'invokes `onConfirmRow` callback when row is double-clicked' , ( ) => {
254
256
const onConfirmRow = sinon . stub ( ) ;
255
- const wrapper = createComponent ( DataTable , {
257
+ const wrapper = createComponent ( {
256
258
onConfirmRow,
257
259
} ) ;
258
260
@@ -263,7 +265,7 @@ describe('DataTable', () => {
263
265
264
266
it ( 'invokes `onConfirmRow` callback when `Enter` is pressed on a row' , ( ) => {
265
267
const onConfirmRow = sinon . stub ( ) ;
266
- const wrapper = createComponent ( DataTable , {
268
+ const wrapper = createComponent ( {
267
269
onConfirmRow,
268
270
} ) ;
269
271
@@ -275,46 +277,46 @@ describe('DataTable', () => {
275
277
276
278
context ( 'when loading' , ( ) => {
277
279
it ( 'renders a loading spinner' , ( ) => {
278
- const wrapper = createComponent ( DataTable , { loading : true } ) ;
280
+ const wrapper = createComponent ( { loading : true } ) ;
279
281
assert . isTrue ( wrapper . find ( 'SpinnerSpokesIcon' ) . exists ( ) ) ;
280
282
} ) ;
281
283
282
284
it ( 'does not render any data' , ( ) => {
283
- const wrapper = createComponent ( DataTable , { loading : true } ) ;
285
+ const wrapper = createComponent ( { loading : true } ) ;
284
286
// One row, which holds the spinner
285
287
assert . equal ( wrapper . find ( 'tbody tr' ) . length , 1 ) ;
286
288
} ) ;
287
289
288
290
it ( 'still renders headings' , ( ) => {
289
- const wrapper = createComponent ( DataTable , { loading : true } ) ;
291
+ const wrapper = createComponent ( { loading : true } ) ;
290
292
assert . equal ( wrapper . find ( 'thead tr th' ) . length , 3 ) ;
291
293
} ) ;
292
294
293
295
it ( 'does not render a TableFoot' , ( ) => {
294
- const wrapper = createComponent ( DataTable , { loading : true } ) ;
296
+ const wrapper = createComponent ( { loading : true } ) ;
295
297
assert . isFalse ( wrapper . find ( '[data-component="TableFoot"]' ) . exists ( ) ) ;
296
298
} ) ;
297
299
} ) ;
298
300
299
301
context ( 'when empty' , ( ) => {
300
302
it ( 'shows an empty message if provided' , ( ) => {
301
- const wrapper = createComponent ( DataTable , {
303
+ const wrapper = createComponent ( {
302
304
emptyMessage : < strong > Nope</ strong > ,
303
305
rows : [ ] ,
304
306
} ) ;
305
307
assert . equal ( wrapper . find ( 'tbody tr td' ) . at ( 0 ) . text ( ) , 'Nope' ) ;
306
308
} ) ;
307
309
308
310
it ( 'still renders headings' , ( ) => {
309
- const wrapper = createComponent ( DataTable , {
311
+ const wrapper = createComponent ( {
310
312
emptyMessage : < strong > Nope</ strong > ,
311
313
rows : [ ] ,
312
314
} ) ;
313
315
assert . equal ( wrapper . find ( 'thead tr th' ) . length , 3 ) ;
314
316
} ) ;
315
317
316
318
it ( 'does not render a TableFoot' , ( ) => {
317
- const wrapper = createComponent ( DataTable , {
319
+ const wrapper = createComponent ( {
318
320
rows : [ ] ,
319
321
} ) ;
320
322
assert . isFalse ( wrapper . find ( '[data-component="TableFoot"]' ) . exists ( ) ) ;
@@ -412,7 +414,7 @@ describe('DataTable', () => {
412
414
{ direction : 'descending' , expectedArrow : 'ArrowDownIcon' } ,
413
415
] . forEach ( ( { direction, expectedArrow } ) => {
414
416
it ( 'shows initial active order' , ( ) => {
415
- const wrapper = createComponent ( DataTable , {
417
+ const wrapper = createComponent ( {
416
418
order : { field : 'color' , direction } ,
417
419
} ) ;
418
420
const colorTableCell = wrapper . find ( 'TableCell' ) . at ( 1 ) ;
@@ -425,7 +427,7 @@ describe('DataTable', () => {
425
427
[
426
428
// Clicking the same column when initially ascending, transitions to descending
427
429
{
428
- initialOrder : { field : 'name' , direction : 'ascending' } ,
430
+ startingOrder : { field : 'name' , direction : 'ascending' } ,
429
431
clickedColumn : 'name' ,
430
432
expectedNewOrder : {
431
433
field : 'name' ,
@@ -434,26 +436,57 @@ describe('DataTable', () => {
434
436
} ,
435
437
// Clicking the same column when initially descending, transitions to ascending
436
438
{
437
- initialOrder : { field : 'name' , direction : 'descending' } ,
439
+ startingOrder : { field : 'name' , direction : 'descending' } ,
438
440
clickedColumn : 'name' ,
439
441
expectedNewOrder : { field : 'name' , direction : 'ascending' } ,
440
442
} ,
441
443
// Clicking another column sets direction as ascending
442
444
{
443
- initialOrder : { field : 'name' , direction : 'ascending' } ,
445
+ startingOrder : { field : 'name' , direction : 'ascending' } ,
444
446
clickedColumn : 'consistency' ,
445
447
expectedNewOrder : {
446
448
field : 'consistency' ,
447
449
direction : 'ascending' ,
448
450
} ,
449
451
} ,
450
- ] . forEach ( ( { initialOrder, clickedColumn, expectedNewOrder } ) => {
452
+ // Change sort column to a column with no initial order specified
453
+ {
454
+ startingOrder : { field : 'name' , direction : 'ascending' } ,
455
+ clickedColumn : 'color' ,
456
+ expectedNewOrder : {
457
+ field : 'color' ,
458
+ direction : 'descending' ,
459
+ } ,
460
+ } ,
461
+ // Change sort column to a column with no initial order specified
462
+ {
463
+ startingOrder : undefined ,
464
+ clickedColumn : 'consistency' ,
465
+ expectedNewOrder : {
466
+ field : 'consistency' ,
467
+ direction : 'ascending' ,
468
+ } ,
469
+ } ,
470
+ // Change sort column to a column with an initial order specified
471
+ {
472
+ startingOrder : undefined ,
473
+ clickedColumn : 'color' ,
474
+ expectedNewOrder : {
475
+ field : 'color' ,
476
+ direction : 'descending' ,
477
+ } ,
478
+ } ,
479
+ ] . forEach ( ( { startingOrder, clickedColumn, expectedNewOrder } ) => {
451
480
it ( 'can update order by clicking columns' , ( ) => {
452
481
const onOrderChange = sinon . stub ( ) ;
453
- const wrapper = createComponent ( DataTable , {
482
+ const wrapper = createComponent ( {
454
483
onOrderChange,
455
- order : initialOrder ,
456
- orderableColumns : [ 'name' , 'color' , 'consistency' ] ,
484
+ order : startingOrder ,
485
+ orderableColumns : {
486
+ name : 'ascending' ,
487
+ color : 'descending' ,
488
+ consistency : 'ascending' ,
489
+ } ,
457
490
} ) ;
458
491
459
492
wrapper
@@ -471,7 +504,7 @@ describe('DataTable', () => {
471
504
undefined ,
472
505
] . forEach ( orderableColumns => {
473
506
it ( 'can restrict which columns are orderable' , ( ) => {
474
- const wrapper = createComponent ( DataTable , {
507
+ const wrapper = createComponent ( {
475
508
onOrderChange : sinon . stub ( ) ,
476
509
orderableColumns,
477
510
} ) ;
0 commit comments