Files
wehub-resource-sync c48612c494
Docs Build / Build docs site (push) Waiting to run
Publish @openmaic packages / Build, validate & publish (push) Waiting to run
CI / E2E Tests (push) Has been cancelled
CI / Lint, Typecheck & Unit Tests (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:03:23 +08:00

42 lines
1.4 KiB
TypeScript

import { describe, it, expect } from 'vitest';
import { createSceneAPI } from '@/lib/api/stage-api-scene';
import type { StageStore } from '@/lib/api/stage-api-types';
import type { Scene, Stage, StageMode } from '@/lib/types/stage';
function mockStore() {
const state = {
stage: { id: 'stage-1', name: 'S', createdAt: 1, updatedAt: 1 } as Stage,
scenes: [] as Scene[],
currentSceneId: null as string | null,
mode: 'edit' as StageMode,
};
const store: StageStore = {
getState: () => state,
setState: (partial) => Object.assign(state, partial),
subscribe: () => () => {},
};
return { api: createSceneAPI(store), scenes: () => state.scenes };
}
describe('stage api scene.create — type/content authority', () => {
it('keeps params.type authoritative and pins content.type to it', () => {
const { api, scenes } = mockStore();
const r = api.create({ type: 'slide', title: 'T' });
expect(r.success).toBe(true);
const scene = scenes()[0];
expect(scene.type).toBe('slide');
expect(scene.content.type).toBe('slide');
});
it('rejects a content.type that disagrees with the scene type (no silent override)', () => {
const { api, scenes } = mockStore();
const r = api.create({
type: 'slide',
title: 'T',
content: { type: 'interactive', html: 'x' },
});
expect(r.success).toBe(false);
expect(scenes()).toHaveLength(0);
});
});