@@ -232,10 +232,10 @@ describe('DataGrid', () => {
232232 it ( 'renders the column header with an ascending label when sorted' , ( ) => {
233233 renderView ( {
234234 columns : [ { key : 'name' , sortable : true } ] ,
235- query : { sort : { } } ,
235+ query : { sort : { name : 'asc' } } ,
236236 } ) ;
237237
238- expect ( screen . queryByText ( 'ascending' ) ) . toBeNull ( ) ;
238+ screen . getByLabelText ( 'ascending' ) ;
239239 } ) ;
240240 it ( 'renders the column header with an descending label when sorted' , ( ) => {
241241 renderView ( {
@@ -328,6 +328,68 @@ describe('DataGrid', () => {
328328 } ,
329329 } ) ;
330330 } ) ;
331+
332+ it ( 'sets aria-sort="ascending" on column header when sorted ascending' , ( ) => {
333+ renderView ( {
334+ columns : [ { key : 'name' , sortable : true } ] ,
335+ query : { sort : { name : 'asc' } } ,
336+ } ) ;
337+
338+ const nameHeader = screen . getByRole ( 'columnheader' , { name : / n a m e / i } ) ;
339+ expect ( nameHeader . tagName ) . toBe ( 'TH' ) ;
340+ expect ( nameHeader ) . toHaveAttribute ( 'aria-sort' , 'ascending' ) ;
341+ } ) ;
342+
343+ it ( 'sets aria-sort="descending" on column header when sorted descending' , ( ) => {
344+ renderView ( {
345+ columns : [ { key : 'name' , sortable : true } ] ,
346+ query : { sort : { name : 'desc' } } ,
347+ } ) ;
348+
349+ const nameHeader = screen . getByRole ( 'columnheader' , { name : / n a m e / i } ) ;
350+ expect ( nameHeader . tagName ) . toBe ( 'TH' ) ;
351+ expect ( nameHeader ) . toHaveAttribute ( 'aria-sort' , 'descending' ) ;
352+ } ) ;
353+
354+ it ( 'sets aria-sort="none" on column header when not sorted' , ( ) => {
355+ renderView ( {
356+ columns : [ { key : 'name' , sortable : true } ] ,
357+ query : { sort : { } } ,
358+ } ) ;
359+
360+ const nameHeader = screen . getByRole ( 'columnheader' , { name : / n a m e / i } ) ;
361+ expect ( nameHeader . tagName ) . toBe ( 'TH' ) ;
362+ expect ( nameHeader ) . toHaveAttribute ( 'aria-sort' , 'none' ) ;
363+ } ) ;
364+
365+ it ( 'does not set aria-sort attribute on non-sortable column headers' , ( ) => {
366+ renderView ( {
367+ columns : [ { key : 'name' , sortable : false } ] ,
368+ query : { sort : { } } ,
369+ } ) ;
370+
371+ const nameHeader = screen . getByRole ( 'columnheader' , { name : / n a m e / i } ) ;
372+ expect ( nameHeader . tagName ) . toBe ( 'TH' ) ;
373+ expect ( nameHeader ) . not . toHaveAttribute ( 'aria-sort' ) ;
374+ } ) ;
375+
376+ it ( 'sets correct aria-sort values on multiple sortable columns' , ( ) => {
377+ renderView ( {
378+ columns : [
379+ { key : 'name' , sortable : true } ,
380+ { key : 'sin' , sortable : true } ,
381+ ] ,
382+ query : { sort : { name : 'asc' , sin : 'desc' } } ,
383+ } ) ;
384+
385+ const nameHeader = screen . getByRole ( 'columnheader' , { name : / n a m e / i } ) ;
386+ const sinHeader = screen . getByRole ( 'columnheader' , { name : / s i n / i } ) ;
387+
388+ expect ( nameHeader . tagName ) . toBe ( 'TH' ) ;
389+ expect ( sinHeader . tagName ) . toBe ( 'TH' ) ;
390+ expect ( nameHeader ) . toHaveAttribute ( 'aria-sort' , 'ascending' ) ;
391+ expect ( sinHeader ) . toHaveAttribute ( 'aria-sort' , 'descending' ) ;
392+ } ) ;
331393 } ) ;
332394
333395 describe ( 'Filtering' , ( ) => {
0 commit comments