2026-03-19 14:15:13 +01:00
|
|
|
import { describe, it, expect, vi, beforeEach } from 'vitest'
|
|
|
|
|
|
|
|
|
|
describe('admin.js', () => {
|
|
|
|
|
beforeEach(() => {
|
|
|
|
|
document.body.innerHTML = ''
|
|
|
|
|
vi.restoreAllMocks()
|
2026-03-19 14:25:04 +01:00
|
|
|
globalThis.confirm = vi.fn()
|
2026-03-19 14:15:13 +01:00
|
|
|
})
|
|
|
|
|
|
|
|
|
|
it('prevents form submit when confirm is cancelled', async () => {
|
|
|
|
|
document.body.innerHTML = `
|
|
|
|
|
<form data-confirm="Are you sure?">
|
|
|
|
|
<button type="submit">Delete</button>
|
|
|
|
|
</form>
|
|
|
|
|
`
|
|
|
|
|
|
2026-03-19 14:25:04 +01:00
|
|
|
globalThis.confirm.mockReturnValue(false)
|
2026-03-19 14:15:13 +01:00
|
|
|
|
|
|
|
|
await import('../../assets/admin.js')
|
|
|
|
|
document.dispatchEvent(new Event('DOMContentLoaded'))
|
|
|
|
|
|
|
|
|
|
const form = document.querySelector('form')
|
|
|
|
|
const event = new Event('submit', { cancelable: true })
|
|
|
|
|
form.dispatchEvent(event)
|
|
|
|
|
|
2026-03-19 14:25:04 +01:00
|
|
|
expect(globalThis.confirm).toHaveBeenCalledWith('Are you sure?')
|
2026-03-19 14:15:13 +01:00
|
|
|
expect(event.defaultPrevented).toBe(true)
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
it('allows form submit when confirm is accepted', async () => {
|
|
|
|
|
document.body.innerHTML = `
|
|
|
|
|
<form data-confirm="Are you sure?">
|
|
|
|
|
<button type="submit">Delete</button>
|
|
|
|
|
</form>
|
|
|
|
|
`
|
|
|
|
|
|
2026-03-19 14:25:04 +01:00
|
|
|
globalThis.confirm.mockReturnValue(true)
|
2026-03-19 14:15:13 +01:00
|
|
|
|
|
|
|
|
await import('../../assets/admin.js')
|
|
|
|
|
document.dispatchEvent(new Event('DOMContentLoaded'))
|
|
|
|
|
|
|
|
|
|
const form = document.querySelector('form')
|
|
|
|
|
const event = new Event('submit', { cancelable: true })
|
|
|
|
|
form.dispatchEvent(event)
|
|
|
|
|
|
2026-03-19 14:25:04 +01:00
|
|
|
expect(globalThis.confirm).toHaveBeenCalledWith('Are you sure?')
|
2026-03-19 14:15:13 +01:00
|
|
|
expect(event.defaultPrevented).toBe(false)
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
it('does nothing on forms without data-confirm', async () => {
|
|
|
|
|
document.body.innerHTML = `
|
|
|
|
|
<form>
|
|
|
|
|
<button type="submit">Submit</button>
|
|
|
|
|
</form>
|
|
|
|
|
`
|
|
|
|
|
|
|
|
|
|
await import('../../assets/admin.js')
|
|
|
|
|
document.dispatchEvent(new Event('DOMContentLoaded'))
|
|
|
|
|
|
|
|
|
|
const form = document.querySelector('form')
|
|
|
|
|
const event = new Event('submit', { cancelable: true })
|
|
|
|
|
form.dispatchEvent(event)
|
|
|
|
|
|
2026-03-19 14:25:04 +01:00
|
|
|
expect(globalThis.confirm).not.toHaveBeenCalled()
|
2026-03-19 14:15:13 +01:00
|
|
|
expect(event.defaultPrevented).toBe(false)
|
|
|
|
|
})
|
|
|
|
|
})
|