Files
thu-maic--openmaic/tests/runtime/stage-delete-wiring.test.ts
wehub-resource-sync c48612c494
CI / E2E Tests (push) Has been cancelled
CI / Lint, Typecheck & Unit Tests (push) Has been cancelled
Docs Build / Build docs site (push) Has been cancelled
Publish @openmaic packages / Build, validate & publish (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:03:23 +08:00

44 lines
1.5 KiB
TypeScript

import { describe, expect, it, vi } from 'vitest';
// The live classroom-deletion flow (app/page.tsx) goes through
// `deleteStageData` in stage-storage. Mock its module dependencies (the
// established pattern for database-touching code — no Dexie-in-node harness)
// and run the REAL function to prove it cascades into the runtime layer.
vi.mock('@/lib/runtime/store', () => ({
deleteStageRuntimeSafely: vi.fn().mockResolvedValue(undefined),
}));
vi.mock('@/lib/utils/database', () => ({
db: {
stages: { delete: vi.fn().mockResolvedValue(undefined) },
scenes: {
where: () => ({
equals: () => ({
toArray: vi.fn().mockResolvedValue([{ id: 'scene-1' }]),
delete: vi.fn().mockResolvedValue(1),
}),
}),
},
},
}));
vi.mock('@/lib/utils/chat-storage', () => ({
saveChatSessions: vi.fn(),
loadChatSessions: vi.fn(),
deleteChatSessions: vi.fn().mockResolvedValue(undefined),
}));
vi.mock('@/lib/utils/playback-storage', () => ({
clearPlaybackState: vi.fn().mockResolvedValue(undefined),
}));
vi.mock('@/lib/quiz/persistence', () => ({
clearAllForScene: vi.fn(),
}));
import { deleteStageData } from '@/lib/utils/stage-storage';
import { deleteStageRuntimeSafely } from '@/lib/runtime/store';
describe('deleteStageData runtime cascade', () => {
it('cascades into the runtime store with the deleted stageId', async () => {
await deleteStageData('stage-7');
expect(vi.mocked(deleteStageRuntimeSafely)).toHaveBeenCalledExactlyOnceWith('stage-7');
});
});