| import { describe, expect, it, vi } from 'vitest'; | |
| const setSpy = vi.fn(() => null); | |
| const getSpy = vi.fn(() => null); | |
| vi.mock('xxhash-wasm', () => ({ | |
| default: () => | |
| Promise.resolve({ | |
| h64ToString: () => 'hash', | |
| }), | |
| })); | |
| vi.mock('@/utils/cache/index', () => ({ | |
| default: { | |
| status: { available: true }, | |
| globalCache: { | |
| get: getSpy, | |
| set: setSpy, | |
| }, | |
| }, | |
| })); | |
| describe('cache middleware', () => { | |
| it('clears control key when downstream throws', async () => { | |
| const { default: cacheMiddleware } = await import('@/middleware/cache'); | |
| const ctx = { | |
| req: { | |
| path: '/test', | |
| query: () => null, | |
| }, | |
| res: { | |
| headers: new Headers(), | |
| }, | |
| status: vi.fn(), | |
| header: vi.fn(), | |
| set: vi.fn(), | |
| get: vi.fn(), | |
| }; | |
| await expect( | |
| cacheMiddleware(ctx as any, () => { | |
| throw new Error('boom'); | |
| }) | |
| ).rejects.toThrow('boom'); | |
| expect(setSpy.mock.calls.some(([, value]) => value === '0')).toBe(true); | |
| }); | |
| }); | |