@@ -4,7 +4,17 @@ import { page } from 'vitest/browser';
import Page from './+page.svelte' ;
import { createConfirmService , CONFIRM_KEY } from '$lib/services/confirm.svelte.js' ;
vi . mock ( '$app/forms' , ( ) = > ( { enhance : ( ) = > ( ) = > { } } ) ) ;
const cancelMock = vi . hoisted ( ( ) = > vi . fn ( ) ) ;
vi . mock ( '$app/forms' , ( ) = > ( {
enhance : ( form : HTMLFormElement , callback ? : ( args : { cancel : ( ) = > void } ) = > Promise < void > ) = > {
form . addEventListener ( 'submit' , async ( e ) = > {
e . preventDefault ( ) ;
if ( callback ) await callback ( { cancel : cancelMock } ) ;
} ) ;
return ( ) = > { } ;
}
} ) ) ;
vi . mock ( '$app/navigation' , ( ) = > ( { beforeNavigate : vi.fn ( ) , goto : vi . fn ( ) } ) ) ;
import { beforeNavigate , goto } from '$app/navigation' ;
@@ -161,39 +171,39 @@ describe('Admin edit user page – feedback', () => {
// ─── Delete confirmation ──────────────────────────────────────────────────────
describe ( 'Admin edit user page – delete confirmation' , ( ) = > {
it ( 'delete button has type=button (does not submit natively)' , async ( ) = > {
beforeEach ( ( ) = > cancelMock . mockClear ( ) ) ;
it ( 'delete button has type=submit' , async ( ) = > {
renderPage ( { data : baseData , form : null } ) ;
const deleteForm = document . querySelector < HTMLFormElement > ( 'form[action="?/delete"]' ) ! ;
const deleteBtn = deleteForm . querySelector ( 'button' ) as HTMLButtonElement ;
expect ( deleteBtn . type ) . toBe ( 'button ' ) ;
expect ( deleteBtn . type ) . toBe ( 'submit ' ) ;
} ) ;
it ( 'does not submit delete form when user cancels' , async ( ) = > {
it ( 'calls cancel() and does not submit when user cancels' , async ( ) = > {
const { service } = renderPage ( { data : baseData , form : null } ) ;
const deleteForm = document . querySelector < HTMLFormElement > ( 'form[action="?/delete"]' ) ! ;
const requestSubmit = vi . spyOn ( deleteF orm , 'requestSubmit' ) . mockImplementation ( ( ) = > { } ) ;
const deleteBtn = deleteForm . querySelect or( 'button' ) as HTMLButtonElement ;
const deleteBtn = deleteForm . querySelector ( 'button[type="button"]' ) as HTMLButtonElement ;
deleteBtn . click ( ) ;
await vi . waitFor ( ( ) = > expect ( service . options ) . not . toBeNull ( ) ) ;
service . settle ( false ) ;
await vi . waitFor ( ( ) = > expect ( service . options ) . toBeNull ( ) ) ;
expect ( requestSubmit ) . not . toHaveBeenCalled ( ) ;
expect ( cancelMock ) . toHaveBeenCalledOnce ( ) ;
} ) ;
it ( 'submits delete form when user confirms' , async ( ) = > {
it ( 'does not call cancel() and allows submit when user confirms' , async ( ) = > {
const { service } = renderPage ( { data : baseData , form : null } ) ;
const deleteForm = document . querySelector < HTMLFormElement > ( 'form[action="?/delete"]' ) ! ;
const requestSubmit = vi . spyOn ( deleteF orm , 'requestSubmit' ) . mockImplementation ( ( ) = > { } ) ;
const deleteBtn = deleteForm . querySelect or( 'button' ) as HTMLButtonElement ;
const deleteBtn = deleteForm . querySelector ( 'button[type="button"]' ) as HTMLButtonElement ;
deleteBtn . click ( ) ;
await vi . waitFor ( ( ) = > expect ( service . options ) . not . toBeNull ( ) ) ;
service . settle ( true ) ;
await vi . waitFor ( ( ) = > expect ( service . options ) . toBeNull ( ) ) ;
expect ( requestSubmit ) . toHaveBeenCalledOnce ( ) ;
expect ( cancelMock ) . not . toHaveBeenCalled ( ) ;
} ) ;
} ) ;