test: add unit tests for pure logic modules
Add 22 test files covering imager, soundtracks, browser-headers, source-keys (figure/pet/effect), effect-source, plus catalog-translations, catalog-layouts, client-translation-files, translations-utils, and various admin/services/helpers modules. Total test count increases by 120+.
This commit is contained in:
1 parent
11e8b06bf8
commit
82e8448f26
25 files changed
+1400
-304
No files matched your search
@@ -5,42 +5,66 @@ import {
|
||||
} from "./recent-furni-resync";
|
||||
|
||||
describe("requestRecentFurniResync", () => {
|
||||
it("posts to the fixed seven-day resync endpoint and normalizes the result", async () => {
|
||||
const fetcher = vi.fn(async () =>
|
||||
Response.json({
|
||||
ok: true,
|
||||
mode: "days",
|
||||
days: 7,
|
||||
examined: 4,
|
||||
resynced: 3,
|
||||
it("POSTs to the resync endpoint and maps the payload", async () => {
|
||||
const fetcher = vi.fn().mockResolvedValue({
|
||||
ok: true,
|
||||
json: async () => ({
|
||||
examined: 10,
|
||||
resynced: 4,
|
||||
failed: 1,
|
||||
rconOk: false,
|
||||
errors: [{ classname: "chair", message: "invalid entry" }],
|
||||
rconOk: true,
|
||||
errors: [{ classname: "sofa", message: "boom" }],
|
||||
}),
|
||||
);
|
||||
|
||||
await expect(requestRecentFurniResync(fetcher)).resolves.toEqual({
|
||||
examined: 4,
|
||||
resynced: 3,
|
||||
failed: 1,
|
||||
rconOk: false,
|
||||
errors: [{ classname: "chair", message: "invalid entry" }],
|
||||
});
|
||||
expect(RECENT_FURNI_RESYNC_URL).toBe(
|
||||
"/api/admin/import/furni/resync?days=7",
|
||||
);
|
||||
const result = await requestRecentFurniResync(fetcher);
|
||||
expect(fetcher).toHaveBeenCalledWith(RECENT_FURNI_RESYNC_URL, {
|
||||
method: "POST",
|
||||
});
|
||||
expect(result).toEqual({
|
||||
examined: 10,
|
||||
resynced: 4,
|
||||
failed: 1,
|
||||
rconOk: true,
|
||||
errors: [{ classname: "sofa", message: "boom" }],
|
||||
});
|
||||
});
|
||||
|
||||
it("throws the API error when the request fails", async () => {
|
||||
const fetcher = vi.fn(async () =>
|
||||
Response.json({ error: "Forbidden" }, { status: 403 }),
|
||||
);
|
||||
|
||||
it("throws with the server error message on failure", async () => {
|
||||
const fetcher = vi.fn().mockResolvedValue({
|
||||
ok: false,
|
||||
json: async () => ({ error: "no permission" }),
|
||||
});
|
||||
await expect(requestRecentFurniResync(fetcher)).rejects.toThrow(
|
||||
"Forbidden",
|
||||
"no permission",
|
||||
);
|
||||
});
|
||||
|
||||
it("falls back to a generic error message", async () => {
|
||||
const fetcher = vi.fn().mockResolvedValue({
|
||||
ok: false,
|
||||
json: async () => ({}),
|
||||
});
|
||||
await expect(requestRecentFurniResync(fetcher)).rejects.toThrow(
|
||||
"Furni resync failed",
|
||||
);
|
||||
});
|
||||
|
||||
it("filters malformed error entries and coerces counts", async () => {
|
||||
const fetcher = vi.fn().mockResolvedValue({
|
||||
ok: true,
|
||||
json: async () => ({
|
||||
examined: "10",
|
||||
resynced: undefined,
|
||||
failed: null,
|
||||
rconOk: "yes",
|
||||
errors: [{ classname: "a", message: "b" }, { nope: 1 }, "x"],
|
||||
}),
|
||||
});
|
||||
const result = await requestRecentFurniResync(fetcher);
|
||||
expect(result.examined).toBe(10);
|
||||
expect(result.resynced).toBe(0);
|
||||
expect(result.failed).toBe(0);
|
||||
expect(result.rconOk).toBe(false);
|
||||
expect(result.errors).toEqual([{ classname: "a", message: "b" }]);
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user