mirror of
https://github.com/snapotter-hq/SnapOtter.git
synced 2026-08-03 07:46:42 +02:00
Group 245 flat integration tests and 25 loose unit tests into
discoverable subdirectories per spec section 6:
integration/tools/{image,video,audio,document,data}/ (156 files)
integration/platform/ (64 files)
integration/generated/ (14 files)
integration/security/ (10 files)
unit/security/ (8 files, new subdir)
unit/api/ (7 files moved in)
unit/web/ (3 files moved in)
unit/shared/ (6 files moved in)
unit/image-engine/ (1 file moved in)
All moves via git mv (history preserved). Relative imports repaired
for both depth levels (platform/generated/security = +1, tools/ = +2):
static from-imports, dynamic import() calls, vi.mock() paths,
import.meta.dirname joins, and __dirname joins.
Vitest discovery unchanged (no test.include in config, recursive glob
matches subdirs, shard-by-hash unaffected). test-server.ts and
tool-route-drift.test.ts stay at integration root. fixtures/ untouched.
Parity gate: 13189 passing test names before = 13189 after (0 dropped).
82 lines
3.2 KiB
TypeScript
82 lines
3.2 KiB
TypeScript
import { afterEach, describe, expect, it } from "vitest";
|
|
import { usePipelineStore } from "../../../apps/web/src/stores/pipeline-store";
|
|
|
|
describe("usePipelineStore", () => {
|
|
afterEach(() => {
|
|
usePipelineStore.getState().reset();
|
|
});
|
|
|
|
it("starts with empty steps", () => {
|
|
expect(usePipelineStore.getState().steps).toEqual([]);
|
|
});
|
|
|
|
it("addStep appends a step with generated id", () => {
|
|
usePipelineStore.getState().addStep("resize");
|
|
const steps = usePipelineStore.getState().steps;
|
|
expect(steps).toHaveLength(1);
|
|
expect(steps[0].toolId).toBe("resize");
|
|
expect(steps[0].settings).toEqual({});
|
|
expect(steps[0].id).toBeTruthy();
|
|
});
|
|
|
|
it("addStep auto-expands the new step", () => {
|
|
usePipelineStore.getState().addStep("resize");
|
|
const { steps, expandedStepId } = usePipelineStore.getState();
|
|
expect(expandedStepId).toBe(steps[0].id);
|
|
});
|
|
|
|
it("removeStep removes by id", () => {
|
|
usePipelineStore.getState().addStep("resize");
|
|
usePipelineStore.getState().addStep("compress");
|
|
const id = usePipelineStore.getState().steps[0].id;
|
|
usePipelineStore.getState().removeStep(id);
|
|
expect(usePipelineStore.getState().steps).toHaveLength(1);
|
|
expect(usePipelineStore.getState().steps[0].toolId).toBe("compress");
|
|
});
|
|
|
|
it("removeStep clears expandedStepId if removing expanded step", () => {
|
|
usePipelineStore.getState().addStep("resize");
|
|
const id = usePipelineStore.getState().steps[0].id;
|
|
expect(usePipelineStore.getState().expandedStepId).toBe(id);
|
|
usePipelineStore.getState().removeStep(id);
|
|
expect(usePipelineStore.getState().expandedStepId).toBeNull();
|
|
});
|
|
|
|
it("reorderSteps swaps two step positions", () => {
|
|
usePipelineStore.getState().addStep("resize");
|
|
usePipelineStore.getState().addStep("compress");
|
|
usePipelineStore.getState().addStep("convert");
|
|
const steps = usePipelineStore.getState().steps;
|
|
usePipelineStore.getState().reorderSteps(steps[0].id, steps[2].id);
|
|
const reordered = usePipelineStore.getState().steps;
|
|
expect(reordered.map((s) => s.toolId)).toEqual(["compress", "convert", "resize"]);
|
|
});
|
|
|
|
it("updateStepSettings merges settings for the target step", () => {
|
|
usePipelineStore.getState().addStep("resize");
|
|
const id = usePipelineStore.getState().steps[0].id;
|
|
usePipelineStore.getState().updateStepSettings(id, { width: 800, height: 600 });
|
|
expect(usePipelineStore.getState().steps[0].settings).toEqual({ width: 800, height: 600 });
|
|
});
|
|
|
|
it("loadSteps replaces all steps and generates new ids", () => {
|
|
usePipelineStore.getState().addStep("resize");
|
|
usePipelineStore.getState().loadSteps([
|
|
{ toolId: "compress", settings: { quality: 80 } },
|
|
{ toolId: "convert", settings: { format: "webp" } },
|
|
]);
|
|
const steps = usePipelineStore.getState().steps;
|
|
expect(steps).toHaveLength(2);
|
|
expect(steps[0].toolId).toBe("compress");
|
|
expect(steps[0].settings).toEqual({ quality: 80 });
|
|
expect(steps[1].toolId).toBe("convert");
|
|
});
|
|
|
|
it("reset clears all state", () => {
|
|
usePipelineStore.getState().addStep("resize");
|
|
usePipelineStore.getState().reset();
|
|
expect(usePipelineStore.getState().steps).toEqual([]);
|
|
expect(usePipelineStore.getState().expandedStepId).toBeNull();
|
|
});
|
|
});
|