@@ -42,6 +42,10 @@ describe('useTableModes', () => {
4242} ) ;
4343
4444describe ( 'useEditActions' , ( ) => {
45+ afterEach ( ( ) => {
46+ jest . restoreAllMocks ( ) ;
47+ } ) ;
48+
4549 const buildActions = ( overrides = { } ) => {
4650 const createTagMutation = { mutateAsync : jest . fn ( ) } ;
4751 const updateTagMutation = { mutateAsync : jest . fn ( ) } ;
@@ -177,4 +181,69 @@ describe('useEditActions', () => {
177181 message : 'Error creating tag: server failed' ,
178182 } ) ;
179183 } ) ;
184+
185+ it ( 'enters view mode only after a delete request succeeds' , async ( ) => {
186+ const {
187+ actions,
188+ deleteTagMutation,
189+ enterViewMode,
190+ setToast,
191+ } = buildActions ( ) ;
192+ deleteTagMutation . mutateAsync . mockResolvedValue ( undefined ) ;
193+ jest . spyOn ( window , 'confirm' ) . mockReturnValue ( true ) ;
194+
195+ actions . startDeleteRow ( {
196+ original : {
197+ id : 1 ,
198+ value : 'tag to delete' ,
199+ depth : 0 ,
200+ childCount : 0 ,
201+ } ,
202+ } as any ) ;
203+
204+ await waitFor ( ( ) => {
205+ expect ( enterViewMode ) . toHaveBeenCalled ( ) ;
206+ } ) ;
207+ expect ( deleteTagMutation . mutateAsync ) . toHaveBeenCalledWith ( {
208+ value : 'tag to delete' ,
209+ withSubtags : false ,
210+ } ) ;
211+ expect ( deleteTagMutation . mutateAsync . mock . invocationCallOrder [ 0 ] ) . toBeLessThan (
212+ enterViewMode . mock . invocationCallOrder [ 0 ] ,
213+ ) ;
214+ expect ( setToast ) . toHaveBeenCalledWith ( {
215+ show : true ,
216+ message : '1 tag(s) deleted. This change will be applied across all tagged content.' ,
217+ } ) ;
218+ } ) ;
219+
220+ it ( 'does not enter view mode when a delete request fails' , async ( ) => {
221+ const {
222+ actions,
223+ deleteTagMutation,
224+ enterViewMode,
225+ setDraftError,
226+ setToast,
227+ } = buildActions ( ) ;
228+ deleteTagMutation . mutateAsync . mockRejectedValue ( new Error ( 'server failed' ) ) ;
229+ jest . spyOn ( window , 'confirm' ) . mockReturnValue ( true ) ;
230+
231+ actions . startDeleteRow ( {
232+ original : {
233+ id : 1 ,
234+ value : 'tag to delete' ,
235+ depth : 0 ,
236+ childCount : 0 ,
237+ } ,
238+ } as any ) ;
239+
240+ await waitFor ( ( ) => {
241+ expect ( setDraftError ) . toHaveBeenCalledWith ( 'server failed' ) ;
242+ } ) ;
243+ expect ( enterViewMode ) . not . toHaveBeenCalled ( ) ;
244+ expect ( setToast ) . toHaveBeenCalledWith ( {
245+ show : true ,
246+ message : 'Error deleting tag: server failed' ,
247+ } ) ;
248+ } ) ;
180249} ) ;
0 commit comments