@@ -283,4 +283,109 @@ describe("index tests", () => {
283283 fireEvent . click ( screen . getByTestId ( `sheet-table-content` ) ) ;
284284 expect ( screen . queryByText ( "Cut" ) ) . not . toBeInTheDocument ( ) ;
285285 } ) ;
286+
287+ test ( "Add row and undo, redo" , ( ) => {
288+ render ( < List data = { generateDummyContent ( 10 , 2 ) } autoAddAdditionalRows = { false } /> ) ;
289+ expect ( store . getState ( ) . data . length ) . toBe ( 10 ) ;
290+ mockAllIsIntersecting ( true ) ;
291+ fireEvent . contextMenu ( screen . getByTestId ( `0-0` ) ) ;
292+ const addRow = screen . getByText ( "Add Row" ) ;
293+ expect ( addRow ) . toBeInTheDocument ( ) ;
294+ fireEvent . mouseEnter ( addRow ) ;
295+ expect ( screen . getByText ( "Above" ) ) . toBeInTheDocument ( ) ;
296+ expect ( screen . getByText ( "Below" ) ) . toBeInTheDocument ( ) ;
297+ fireEvent . click ( screen . getByText ( "Above" ) ) ;
298+ expect ( store . getState ( ) . data . length ) . toBe ( 11 ) ;
299+ fireEvent . contextMenu ( screen . getByTestId ( `0-0` ) ) ;
300+ fireEvent . mouseEnter ( screen . getByText ( "Add Row" ) ) ;
301+ fireEvent . click ( screen . getByText ( "Below" ) ) ;
302+
303+ expect ( store . getState ( ) . data . length ) . toBe ( 12 ) ;
304+
305+ fireEvent . keyDown ( screen . getByRole ( "table" ) , { code : "KeyZ" , ctrlKey : true } ) ;
306+ expect ( store . getState ( ) . data . length ) . toBe ( 11 ) ;
307+ fireEvent . keyDown ( screen . getByRole ( "table" ) , { code : "KeyZ" , ctrlKey : true , shiftKey : true } ) ;
308+ expect ( store . getState ( ) . data . length ) . toBe ( 12 ) ;
309+ fireEvent . keyDown ( screen . getByRole ( "table" ) , { code : "KeyZ" , ctrlKey : true } ) ;
310+ fireEvent . keyDown ( screen . getByRole ( "table" ) , { code : "KeyZ" , ctrlKey : true } ) ;
311+ expect ( store . getState ( ) . data . length ) . toBe ( 10 ) ;
312+ } ) ;
313+
314+ test ( "delete row and undo, redo" , ( ) => {
315+ render ( < List data = { generateDummyContent ( 10 , 2 ) } autoAddAdditionalRows = { false } /> ) ;
316+ expect ( store . getState ( ) . data . length ) . toBe ( 10 ) ;
317+ mockAllIsIntersecting ( true ) ;
318+ fireEvent . contextMenu ( screen . getByTestId ( `0-0` ) ) ;
319+ const deleteRow = screen . getByText ( "Delete Row" ) ;
320+ expect ( deleteRow ) . toBeInTheDocument ( ) ;
321+ fireEvent . click ( deleteRow ) ;
322+ expect ( store . getState ( ) . data . length ) . toBe ( 9 ) ;
323+ fireEvent . keyDown ( screen . getByRole ( "table" ) , { code : "KeyZ" , ctrlKey : true } ) ;
324+ expect ( store . getState ( ) . data . length ) . toBe ( 10 ) ;
325+ fireEvent . keyDown ( screen . getByRole ( "table" ) , { code : "KeyZ" , ctrlKey : true , shiftKey : true } ) ;
326+ expect ( store . getState ( ) . data . length ) . toBe ( 9 ) ;
327+ } ) ;
328+ test ( "Add column and undo, redo" , ( ) => {
329+ render ( < List data = { generateDummyContent ( 10 , 2 ) } autoAddAdditionalRows = { false } /> ) ;
330+ expect ( store . getState ( ) . data [ 0 ] . length ) . toBe ( 2 ) ;
331+ mockAllIsIntersecting ( true ) ;
332+ fireEvent . contextMenu ( screen . getByTestId ( `0-0` ) ) ;
333+ const addColumn = screen . getByText ( "Add Column" ) ;
334+ expect ( addColumn ) . toBeInTheDocument ( ) ;
335+ fireEvent . mouseEnter ( addColumn ) ;
336+ expect ( screen . getByText ( "Right" ) ) . toBeInTheDocument ( ) ;
337+ expect ( screen . getByText ( "Left" ) ) . toBeInTheDocument ( ) ;
338+ fireEvent . click ( screen . getByText ( "Right" ) ) ;
339+ expect ( store . getState ( ) . data [ 0 ] . length ) . toBe ( 3 ) ;
340+
341+ fireEvent . contextMenu ( screen . getByTestId ( `0-0` ) ) ;
342+ fireEvent . mouseEnter ( screen . getByText ( "Add Column" ) ) ;
343+ fireEvent . click ( screen . getByText ( "Left" ) ) ;
344+ expect ( store . getState ( ) . data [ 0 ] . length ) . toBe ( 4 ) ;
345+
346+ fireEvent . keyDown ( screen . getByRole ( "table" ) , { code : "KeyZ" , ctrlKey : true } ) ;
347+ expect ( store . getState ( ) . data [ 0 ] . length ) . toBe ( 3 ) ;
348+ fireEvent . keyDown ( screen . getByRole ( "table" ) , { code : "KeyZ" , ctrlKey : true , shiftKey : true } ) ;
349+ expect ( store . getState ( ) . data [ 0 ] . length ) . toBe ( 4 ) ;
350+ fireEvent . keyDown ( screen . getByRole ( "table" ) , { code : "KeyZ" , ctrlKey : true } ) ;
351+ fireEvent . keyDown ( screen . getByRole ( "table" ) , { code : "KeyZ" , ctrlKey : true } ) ;
352+ expect ( store . getState ( ) . data [ 0 ] . length ) . toBe ( 2 ) ;
353+ } ) ;
354+ test ( "delete column and undo, redo" , ( ) => {
355+ render ( < List data = { generateDummyContent ( 10 , 2 ) } autoAddAdditionalRows = { false } /> ) ;
356+ expect ( store . getState ( ) . data [ 0 ] . length ) . toBe ( 2 ) ;
357+ mockAllIsIntersecting ( true ) ;
358+ fireEvent . contextMenu ( screen . getByTestId ( `0-0` ) ) ;
359+ const deleteColumn = screen . getByText ( "Delete Column" ) ;
360+ expect ( deleteColumn ) . toBeInTheDocument ( ) ;
361+ fireEvent . click ( deleteColumn ) ;
362+ expect ( store . getState ( ) . data [ 0 ] . length ) . toBe ( 1 ) ;
363+
364+ fireEvent . keyDown ( screen . getByRole ( "table" ) , { code : "KeyZ" , ctrlKey : true } ) ;
365+ expect ( store . getState ( ) . data [ 0 ] . length ) . toBe ( 2 ) ;
366+ fireEvent . keyDown ( screen . getByRole ( "table" ) , { code : "KeyZ" , ctrlKey : true , shiftKey : true } ) ;
367+ expect ( store . getState ( ) . data [ 0 ] . length ) . toBe ( 1 ) ;
368+ } ) ;
369+ test ( "merge cells" , async ( ) => {
370+ const user = userEvent . setup ( ) ;
371+ render ( < List data = { generateDummyContent ( 10 , 2 ) } autoAddAdditionalRows = { false } /> ) ;
372+ mockAllIsIntersecting ( true ) ;
373+ expect ( screen . getAllByRole ( "textbox" ) . length ) . toBe ( 21 ) ; //one common input from tools
374+ await user . click ( screen . getByTestId ( `${ 0 } -${ 0 } ` ) ) ;
375+ await user . keyboard ( "{Meta>}" ) ;
376+ await user . click ( screen . getByTestId ( `${ 0 } -${ 1 } ` ) ) ;
377+ await user . click ( screen . getByTestId ( `${ 1 } -${ 0 } ` ) ) ;
378+ await user . click ( screen . getByTestId ( `${ 1 } -${ 1 } ` ) ) ;
379+ await user . keyboard ( "{/Meta}" ) ;
380+ await waitFor ( ( ) => {
381+ expect ( store . getState ( ) . selected . length ) . toBe ( 4 ) ;
382+ } ) ;
383+ fireEvent . contextMenu ( screen . getByTestId ( `0-0` ) ) ;
384+ fireEvent . click ( screen . getByText ( "Merge cells" ) ) ;
385+ expect ( store . getState ( ) . selected . length ) . toBe ( 1 ) ;
386+ expect ( screen . getAllByRole ( "textbox" ) . length ) . toBe ( 18 ) ; //one common input from tools
387+ fireEvent . contextMenu ( screen . getByTestId ( `0-0` ) ) ;
388+ fireEvent . click ( screen . getByText ( "Merge cells" ) ) ;
389+ expect ( screen . getAllByRole ( "textbox" ) . length ) . toBe ( 18 ) ; //one common input from tools
390+ } ) ;
286391} ) ;
0 commit comments