@@ -83,7 +83,7 @@ const testCellActions = async ({
8383
8484describe ( 'Transformer functions' , ( ) => {
8585 describe ( 'selectable' , ( ) => {
86- test ( 'main select' , async ( ) => {
86+ test ( 'main select (header) - should toggle from unchecked to checked ' , async ( ) => {
8787 const onSelect = jest . fn ( ( _event , selected , rowId ) => ( { selected, rowId } ) ) ;
8888 const column = {
8989 extraParams : { onSelect }
@@ -92,37 +92,80 @@ describe('Transformer functions', () => {
9292 expect ( returnedData ) . toMatchObject ( { className : tableStyles . tableCheck } ) ;
9393
9494 const user = userEvent . setup ( ) ;
95-
9695 render ( returnedData . children as React . ReactElement < any > ) ;
9796
98- await user . type ( screen . getByRole ( 'textbox' ) , 'a' ) ;
97+ // Click the header radio button (should be unchecked initially)
98+ await user . click ( screen . getByRole ( 'radio' ) ) ;
99+
99100 expect ( onSelect ) . toHaveBeenCalledTimes ( 1 ) ;
100- expect ( onSelect . mock . results [ 0 ] . value ) . toMatchObject ( { rowId : - 1 , selected : false } ) ;
101+ expect ( onSelect . mock . results [ 0 ] . value ) . toMatchObject ( { rowId : - 1 , selected : true } ) ;
101102 } ) ;
102103
103- test ( 'selected' , async ( ) => {
104+ test ( 'row select (checkbox) - should toggle from selected to unselected ' , async ( ) => {
104105 const onSelect = jest . fn ( ( _event , selected , rowId ) => ( { selected, rowId } ) ) ;
105106 const column = {
106- extraParams : { onSelect }
107+ extraParams : { onSelect, selectVariant : 'checkbox' }
107108 } ;
108109 const returnedData = selectable ( '' , { column, rowIndex : 0 , rowData : { selected : true } } as IExtra ) ;
109110 expect ( returnedData ) . toMatchObject ( { className : tableStyles . tableCheck } ) ;
110- const user = userEvent . setup ( ) ;
111111
112+ const user = userEvent . setup ( ) ;
112113 render ( returnedData . children as React . ReactElement < any > ) ;
113114
114- await user . type ( screen . getByRole ( 'textbox' ) , 'a' ) ;
115+ // Click the row checkbox (should be checked initially, clicking should uncheck)
116+ await user . click ( screen . getByRole ( 'checkbox' ) ) ;
115117 expect ( onSelect ) . toHaveBeenCalledTimes ( 1 ) ;
116118 expect ( onSelect . mock . results [ 0 ] . value ) . toMatchObject ( { rowId : 0 , selected : false } ) ;
117119 } ) ;
118120
119- test ( 'unselected' , ( ) => {
121+ test ( 'row select (checkbox) - should toggle from unselected to selected' , async ( ) => {
120122 const onSelect = jest . fn ( ( _event , selected , rowId ) => ( { selected, rowId } ) ) ;
121123 const column = {
122- extraParams : { onSelect }
124+ extraParams : { onSelect, selectVariant : 'checkbox' }
123125 } ;
124126 const returnedData = selectable ( '' , { column, rowIndex : 0 , rowData : { selected : false } } as IExtra ) ;
125- expect ( returnedData ) . toMatchSnapshot ( ) ;
127+ expect ( returnedData ) . toMatchObject ( { className : tableStyles . tableCheck } ) ;
128+
129+ const user = userEvent . setup ( ) ;
130+ render ( returnedData . children as React . ReactElement < any > ) ;
131+
132+ // Click the row checkbox (should be unchecked initially, clicking should check)
133+ await user . click ( screen . getByRole ( 'checkbox' ) ) ;
134+ expect ( onSelect ) . toHaveBeenCalledTimes ( 1 ) ;
135+ expect ( onSelect . mock . results [ 0 ] . value ) . toMatchObject ( { rowId : 0 , selected : true } ) ;
136+ } ) ;
137+
138+ test ( 'row select (radio) - clicking already selected radio should not trigger onSelect' , async ( ) => {
139+ const onSelect = jest . fn ( ( _event , selected , rowId ) => ( { selected, rowId } ) ) ;
140+ const column = {
141+ extraParams : { onSelect, selectVariant : 'radio' }
142+ } ;
143+ const returnedData = selectable ( '' , { column, rowIndex : 0 , rowData : { selected : true } } as IExtra ) ;
144+ expect ( returnedData ) . toMatchObject ( { className : tableStyles . tableCheck } ) ;
145+
146+ const user = userEvent . setup ( ) ;
147+ render ( returnedData . children as React . ReactElement < any > ) ;
148+
149+ // Click the row radio button (should be checked initially, clicking should not trigger change)
150+ await user . click ( screen . getByRole ( 'radio' ) ) ;
151+ expect ( onSelect ) . toHaveBeenCalledTimes ( 0 ) ;
152+ } ) ;
153+
154+ test ( 'row select (radio) - should toggle from unselected to selected' , async ( ) => {
155+ const onSelect = jest . fn ( ( _event , selected , rowId ) => ( { selected, rowId } ) ) ;
156+ const column = {
157+ extraParams : { onSelect, selectVariant : 'radio' }
158+ } ;
159+ const returnedData = selectable ( '' , { column, rowIndex : 0 , rowData : { selected : false } } as IExtra ) ;
160+ expect ( returnedData ) . toMatchObject ( { className : tableStyles . tableCheck } ) ;
161+
162+ const user = userEvent . setup ( ) ;
163+ render ( returnedData . children as React . ReactElement < any > ) ;
164+
165+ // Click the row radio button (should be unchecked initially, clicking should check)
166+ await user . click ( screen . getByRole ( 'radio' ) ) ;
167+ expect ( onSelect ) . toHaveBeenCalledTimes ( 1 ) ;
168+ expect ( onSelect . mock . results [ 0 ] . value ) . toMatchObject ( { rowId : 0 , selected : true } ) ;
126169 } ) ;
127170 } ) ;
128171
0 commit comments