desloppify: code health overhaul plus abuse hardening (140 green, strict 87.2)
Honest baseline after removing 45 gaming suppressions. Structural: lib/game plus root hooks extraction, CORS origin echo, DEV_ORIGINS layering. Fixes: error-cause binding, discord 5xx split, null-cache guard, co-located tests, rejecting-fetch coverage, naming and typing cleanup, socket controller, cache bound, cascade helpers, latch resets. Hardening: per-IP rate limit on API routes, deterministic-miss UX, retry cooldown plus cap. Suite 140 green, build plus lint clean.
This commit is contained in:
78 files changed
+4908
-1430
No files matched your search
@@ -0,0 +1,94 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import { buildLinks, mergePeople, mergePlatforms, selectScreenshots } from "@/lib/game/game-profile";
|
||||
import type { IgdbGame } from "@/lib/game/game-profile-types";
|
||||
|
||||
describe("mergePeople", () => {
|
||||
it("prefers IGDB companies when present", () => {
|
||||
const igdb = {
|
||||
involved_companies: [
|
||||
{ developer: true, company: { name: "Dev Studio" } },
|
||||
{ publisher: true, company: { name: "Pub Inc" } },
|
||||
],
|
||||
} as IgdbGame;
|
||||
const { developers, publishers } = mergePeople(igdb, null, null);
|
||||
expect(developers).toEqual(["Dev Studio"]);
|
||||
expect(publishers).toEqual(["Pub Inc"]);
|
||||
});
|
||||
|
||||
it("falls back to Steam and ITAD lists", () => {
|
||||
const steam = { developers: ["Valve"], publishers: ["Valve"] };
|
||||
const { developers, publishers } = mergePeople(null, steam, null);
|
||||
expect(developers).toEqual(["Valve"]);
|
||||
expect(publishers).toEqual(["Valve"]);
|
||||
});
|
||||
|
||||
it("returns empty lists without sources", () => {
|
||||
expect(mergePeople(null, null, null)).toEqual({ developers: [], publishers: [] });
|
||||
});
|
||||
});
|
||||
|
||||
describe("mergePlatforms", () => {
|
||||
it("normalizes IGDB platform names", () => {
|
||||
const igdb = {
|
||||
platforms: [{ name: "PC (Microsoft Windows)" }, { name: "Mac" }, { name: "Switch" }],
|
||||
} as IgdbGame;
|
||||
expect(mergePlatforms(igdb, null, undefined)).toEqual(["Windows", "MacOS", "Switch"]);
|
||||
});
|
||||
|
||||
it("merges IGDB, Steam, and SKU platforms without early exit", () => {
|
||||
const igdb = { platforms: [{ name: "Switch" }] } as IgdbGame;
|
||||
const steam = { platforms: { windows: true, mac: false, linux: false } };
|
||||
const entry = { id: "g", name: "G", third_party_skus: [{ distributor: "xbox", id: "1" }] };
|
||||
expect(mergePlatforms(igdb, steam, entry)).toEqual(["Switch", "Windows", "Xbox"]);
|
||||
});
|
||||
|
||||
it("still resolves SKUs when Steam data is missing", () => {
|
||||
const entry = {
|
||||
id: "g",
|
||||
name: "G",
|
||||
third_party_skus: [{ distributor: "playstation", id: "1" }],
|
||||
};
|
||||
expect(mergePlatforms(null, null, entry)).toEqual(["PlayStation"]);
|
||||
});
|
||||
});
|
||||
|
||||
describe("buildLinks", () => {
|
||||
it("labels known categories and dedupes", () => {
|
||||
const igdb = {
|
||||
websites: [
|
||||
{ url: "https://store.steampowered.com/app/1", category: 13 },
|
||||
{ url: "https://store.steampowered.com/app/1", category: 13 },
|
||||
{ url: "example.com", category: 99 },
|
||||
],
|
||||
} as IgdbGame;
|
||||
const links = buildLinks(igdb);
|
||||
expect(links).toHaveLength(2);
|
||||
expect(links[0]).toEqual({
|
||||
label: "Steam",
|
||||
url: "https://store.steampowered.com/app/1",
|
||||
});
|
||||
expect(links[1].label).toBe("example.com");
|
||||
});
|
||||
|
||||
it("returns no links without websites", () => {
|
||||
expect(buildLinks(null)).toEqual([]);
|
||||
});
|
||||
});
|
||||
|
||||
describe("selectScreenshots", () => {
|
||||
it("prefers IGDB shots and caps at 8", () => {
|
||||
const igdb = {
|
||||
screenshots: Array.from({ length: 10 }, (_, i) => ({
|
||||
url: `//images.igdb.com/t_thumb/${i}.jpg`,
|
||||
})),
|
||||
} as IgdbGame;
|
||||
const shots = selectScreenshots(igdb, null);
|
||||
expect(shots).toHaveLength(8);
|
||||
expect(shots[0]).toContain("t_screenshot_big");
|
||||
});
|
||||
|
||||
it("falls back to Steam shots", () => {
|
||||
const steam = { screenshots: [{ path_full: "https://cdn/shot.jpg" }] };
|
||||
expect(selectScreenshots(null, steam)).toEqual(["https://cdn/shot.jpg"]);
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user