This commit is contained in:
1 parent
8efd032cc6
commit
df38dccbf1
735 files changed
+128321
-120870
No files matched your search
@@ -2,65 +2,77 @@
|
||||
import { describe, expect, it, vi } from "vitest";
|
||||
|
||||
vi.mock("@/lib/services/import/core/download", () => ({
|
||||
downloadFile: vi.fn(async () => ({ ok: true, size: 100 })),
|
||||
downloadFile: vi.fn(async () => ({ ok: true, size: 100 })),
|
||||
}));
|
||||
vi.mock("@/lib/services/figure-source", () => ({
|
||||
resolveFigureSwfUrl: vi.fn(async (lib: string) => `https://x/${lib}.swf`),
|
||||
resolveFigureSwfUrl: vi.fn(async (lib: string) => `https://x/${lib}.swf`),
|
||||
}));
|
||||
vi.mock("@/lib/services/figuremap", () => ({
|
||||
listFigureLibraries: vi.fn(async () => [
|
||||
{ id: "Hair_F_Bob", revision: 1 },
|
||||
{ id: "shirt_M_x", revision: 2 },
|
||||
{ id: "Hat_U_y", revision: 3 },
|
||||
]),
|
||||
listFigureLibraries: vi.fn(async () => [
|
||||
{ id: "Hair_F_Bob", revision: 1 },
|
||||
{ id: "shirt_M_x", revision: 2 },
|
||||
{ id: "Hat_U_y", revision: 3 },
|
||||
]),
|
||||
}));
|
||||
const convertSwfToNitro = vi.fn(() => ({
|
||||
bundle: Buffer.from("nitro"),
|
||||
warnings: [],
|
||||
}));
|
||||
const convertSwfToNitro = vi.fn(() => ({ bundle: Buffer.from("nitro"), warnings: [] }));
|
||||
vi.mock("@/lib/services/swf-to-nitro", () => ({
|
||||
convertSwfToNitro: (...a: unknown[]) => convertSwfToNitro(...(a as Parameters<typeof convertSwfToNitro>)),
|
||||
convertSwfToNitro: (...a: unknown[]) =>
|
||||
convertSwfToNitro(...(a as Parameters<typeof convertSwfToNitro>)),
|
||||
}));
|
||||
vi.mock("node:fs", async (orig) => {
|
||||
const real = (await orig()) as typeof import("node:fs");
|
||||
return {
|
||||
...real,
|
||||
existsSync: vi.fn(() => false),
|
||||
promises: {
|
||||
...real.promises,
|
||||
readFile: vi.fn(async () => Buffer.from("CWS")),
|
||||
writeFile: vi.fn(async () => {}),
|
||||
mkdir: vi.fn(async () => {}),
|
||||
unlink: vi.fn(async () => {}),
|
||||
},
|
||||
};
|
||||
const real = (await orig()) as typeof import("node:fs");
|
||||
return {
|
||||
...real,
|
||||
existsSync: vi.fn(() => false),
|
||||
promises: {
|
||||
...real.promises,
|
||||
readFile: vi.fn(async () => Buffer.from("CWS")),
|
||||
writeFile: vi.fn(async () => {}),
|
||||
mkdir: vi.fn(async () => {}),
|
||||
unlink: vi.fn(async () => {}),
|
||||
},
|
||||
};
|
||||
});
|
||||
|
||||
import { getFigureList, importSingleFigure } from "./figure-import";
|
||||
|
||||
describe("figure-import", () => {
|
||||
it("paginates the library list with present flags", async () => {
|
||||
const { items, meta } = await getFigureList({ search: "", page: 1, perPage: 2 });
|
||||
expect(items).toHaveLength(2);
|
||||
expect(meta).toMatchObject({ page: 1, perPage: 2, total: 3 });
|
||||
expect(items[0]).toMatchObject({ lib: "Hair_F_Bob", nitroExists: false });
|
||||
});
|
||||
it("paginates the library list with present flags", async () => {
|
||||
const { items, meta } = await getFigureList({
|
||||
search: "",
|
||||
page: 1,
|
||||
perPage: 2,
|
||||
});
|
||||
expect(items).toHaveLength(2);
|
||||
expect(meta).toMatchObject({ page: 1, perPage: 2, total: 3 });
|
||||
expect(items[0]).toMatchObject({ lib: "Hair_F_Bob", nitroExists: false });
|
||||
});
|
||||
|
||||
it("filters by search", async () => {
|
||||
const { items, meta } = await getFigureList({ search: "shirt", page: 1, perPage: 50 });
|
||||
expect(meta.total).toBe(1);
|
||||
expect(items[0].lib).toBe("shirt_M_x");
|
||||
});
|
||||
it("filters by search", async () => {
|
||||
const { items, meta } = await getFigureList({
|
||||
search: "shirt",
|
||||
page: 1,
|
||||
perPage: 50,
|
||||
});
|
||||
expect(meta.total).toBe(1);
|
||||
expect(items[0].lib).toBe("shirt_M_x");
|
||||
});
|
||||
|
||||
it("importSingleFigure downloads + converts + writes", async () => {
|
||||
const r = await importSingleFigure({ lib: "Hair_F_Bob" });
|
||||
expect(r.ok).toBe(true);
|
||||
expect(convertSwfToNitro).toHaveBeenCalled();
|
||||
});
|
||||
it("importSingleFigure downloads + converts + writes", async () => {
|
||||
const r = await importSingleFigure({ lib: "Hair_F_Bob" });
|
||||
expect(r.ok).toBe(true);
|
||||
expect(convertSwfToNitro).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it("fails cleanly when conversion throws", async () => {
|
||||
convertSwfToNitro.mockImplementationOnce(() => {
|
||||
throw new Error("bad swf");
|
||||
});
|
||||
const r = await importSingleFigure({ lib: "shirt_M_x" });
|
||||
expect(r.ok).toBe(false);
|
||||
expect(r.error).toContain("conversion");
|
||||
});
|
||||
it("fails cleanly when conversion throws", async () => {
|
||||
convertSwfToNitro.mockImplementationOnce(() => {
|
||||
throw new Error("bad swf");
|
||||
});
|
||||
const r = await importSingleFigure({ lib: "shirt_M_x" });
|
||||
expect(r.ok).toBe(false);
|
||||
expect(r.error).toContain("conversion");
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user