mirror of
https://github.com/clash-verge-rev/clash-verge-rev.git
synced 2026-11-03 05:22:09 +08:00
34 lines
1.1 KiB
TypeScript
34 lines
1.1 KiB
TypeScript
import { expect, it, vi } from 'vitest'
|
|
|
|
import { mutate } from './mutate'
|
|
|
|
vi.mock('@/services/notice-service', () => ({
|
|
showNotice: { error: vi.fn(), warning: vi.fn(), success: vi.fn() },
|
|
}))
|
|
vi.mock('@/services/query-client', () => ({ revalidateQueries: vi.fn() }))
|
|
|
|
it('executes every queued setting write even when its predecessor fails', async () => {
|
|
let reject!: (error: Error) => void
|
|
const first = mutate(
|
|
() =>
|
|
new Promise<void>((_resolve, rejectFirst) => {
|
|
reject = rejectFirst
|
|
}),
|
|
{ id: 'patch-verge-config', errorNotice: false },
|
|
).catch((error) => error)
|
|
const writeSecond = vi.fn().mockResolvedValue(undefined)
|
|
const onFulfilled = vi.fn()
|
|
const second = mutate(writeSecond, {
|
|
id: 'patch-verge-config',
|
|
onFulfilled,
|
|
errorNotice: false,
|
|
})
|
|
expect(writeSecond).not.toHaveBeenCalled()
|
|
const error = new Error('first write failed')
|
|
reject(error)
|
|
expect(await first).toBe(error)
|
|
expect(await second).toEqual({ ok: true, value: undefined })
|
|
expect(writeSecond).toHaveBeenCalledOnce()
|
|
expect(onFulfilled).toHaveBeenCalledOnce()
|
|
})
|