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
@@ -0,0 +1,113 @@
|
||||
import { beforeEach, describe, expect, it, vi } from "vitest";
|
||||
|
||||
const fetchMock = vi.hoisted(() => vi.fn());
|
||||
vi.stubGlobal("fetch", fetchMock);
|
||||
|
||||
vi.mock("@/lib/services/site-settings", () => ({
|
||||
siteSettings: { get: vi.fn() },
|
||||
}));
|
||||
|
||||
vi.mock("@/lib/services/import/core/gordon", () => ({
|
||||
resolveGordonBuildUrl: vi.fn(),
|
||||
}));
|
||||
|
||||
import { resolveGordonBuildUrl } from "@/lib/services/import/core/gordon";
|
||||
import { siteSettings } from "@/lib/services/site-settings";
|
||||
import {
|
||||
__clearEffectSourceCache,
|
||||
listOfficialEffects,
|
||||
resolveEffectSwfUrl,
|
||||
} from "./effect-source";
|
||||
|
||||
const EFFECTMAP_XML = `<?xml version="1.0"?>
|
||||
<effectmap>
|
||||
<effect id="1" lib="fx_1" />
|
||||
<effect id="2" lib="fx_2" type="seat" revision="3" />
|
||||
<effect id="bad" />
|
||||
</effectmap>`;
|
||||
|
||||
describe("listOfficialEffects", () => {
|
||||
beforeEach(() => {
|
||||
__clearEffectSourceCache();
|
||||
fetchMock.mockReset();
|
||||
});
|
||||
|
||||
it("parses the effectmap XML into entries", async () => {
|
||||
fetchMock.mockResolvedValue({
|
||||
ok: true,
|
||||
status: 200,
|
||||
text: async () => EFFECTMAP_XML,
|
||||
});
|
||||
const list = await listOfficialEffects();
|
||||
expect(list).toHaveLength(2);
|
||||
expect(list[0]).toEqual({ id: "1", lib: "fx_1", type: "fx", revision: 0 });
|
||||
expect(list[1]).toEqual({
|
||||
id: "2",
|
||||
lib: "fx_2",
|
||||
type: "seat",
|
||||
revision: 3,
|
||||
});
|
||||
});
|
||||
|
||||
it("caches results across calls", async () => {
|
||||
fetchMock.mockResolvedValue({
|
||||
ok: true,
|
||||
status: 200,
|
||||
text: async () => EFFECTMAP_XML,
|
||||
});
|
||||
await listOfficialEffects();
|
||||
await listOfficialEffects();
|
||||
expect(fetchMock).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
|
||||
it("returns cached list when fetch fails", async () => {
|
||||
fetchMock.mockResolvedValueOnce({
|
||||
ok: true,
|
||||
status: 200,
|
||||
text: async () => EFFECTMAP_XML,
|
||||
});
|
||||
await listOfficialEffects();
|
||||
fetchMock.mockResolvedValueOnce({
|
||||
ok: false,
|
||||
status: 500,
|
||||
text: async () => "",
|
||||
});
|
||||
const list = await listOfficialEffects();
|
||||
expect(list).toHaveLength(2);
|
||||
});
|
||||
|
||||
it("returns empty array on first fetch failure", async () => {
|
||||
fetchMock.mockResolvedValue({
|
||||
ok: false,
|
||||
status: 500,
|
||||
text: async () => "",
|
||||
});
|
||||
await expect(listOfficialEffects()).resolves.toEqual([]);
|
||||
});
|
||||
});
|
||||
|
||||
describe("resolveEffectSwfUrl", () => {
|
||||
beforeEach(() => {
|
||||
vi.mocked(siteSettings.get).mockReset();
|
||||
vi.mocked(resolveGordonBuildUrl).mockReset();
|
||||
});
|
||||
|
||||
it("uses override when set", async () => {
|
||||
vi.mocked(siteSettings.get).mockResolvedValue(
|
||||
"https://cdn.example.com/effects/",
|
||||
);
|
||||
await expect(resolveEffectSwfUrl("fx_1")).resolves.toBe(
|
||||
"https://cdn.example.com/effects/fx_1.swf",
|
||||
);
|
||||
});
|
||||
|
||||
it("falls back to gordon build URL", async () => {
|
||||
vi.mocked(siteSettings.get).mockResolvedValue("");
|
||||
vi.mocked(resolveGordonBuildUrl).mockResolvedValue(
|
||||
"https://www.habbo.com/gordon/",
|
||||
);
|
||||
await expect(resolveEffectSwfUrl("fx_1")).resolves.toBe(
|
||||
"https://www.habbo.com/gordon/fx_1.swf",
|
||||
);
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user