brackt/app/utils/__tests__/sports-data-sync.test.ts
2026-05-19 23:02:58 -07:00

96 lines
2.6 KiB
TypeScript

import { beforeEach, describe, expect, it, vi } from "vitest";
vi.mock("~/database/context", () => ({
database: vi.fn(),
}));
vi.mock("~/database/schema", () => ({
seasonTemplateSports: "seasonTemplateSports",
seasonTemplates: "seasonTemplates",
seasonParticipants: "seasonParticipants",
seasonSports: "seasonSports",
sportsSeasons: {
sportId: "sports_seasons.sport_id",
name: "sports_seasons.name",
year: "sports_seasons.year",
},
sports: {
slug: "sports.slug",
},
}));
vi.mock("drizzle-orm", () => ({
and: (...args: unknown[]) => ({ type: "and", args }),
eq: (col: unknown, val: unknown) => ({ type: "eq", col, val }),
}));
import { database } from "~/database/context";
import { importSportsDataFromJSON } from "../sports-data-sync.server";
function makeImportData(overrides: Record<string, unknown> = {}) {
return JSON.stringify({
version: "1.1",
exportedAt: "2026-01-01T00:00:00.000Z",
sports: [
{
name: "LLWS",
type: "team",
slug: "llws",
description: "Little League World Series",
...overrides,
},
],
sportsSeasons: [],
participants: [],
seasonTemplates: [],
});
}
function makeTx(existingSport: Record<string, unknown>) {
const set = vi.fn().mockReturnThis();
const where = vi.fn().mockReturnThis();
return {
query: {
sports: {
findFirst: vi.fn().mockResolvedValue(existingSport),
},
},
update: vi.fn(() => ({ set, where })),
insert: vi.fn(),
delete: vi.fn(),
set,
where,
};
}
beforeEach(() => {
vi.clearAllMocks();
});
describe("importSportsDataFromJSON", () => {
it("preserves an existing public page exclusion during legacy merge imports", async () => {
const tx = makeTx({ id: "sport-1", excludeFromHomepage: true });
vi.mocked(database).mockReturnValue({
transaction: vi.fn(async (callback) => callback(tx)),
} as never);
await importSportsDataFromJSON(makeImportData(), "merge");
expect(tx.set).toHaveBeenCalledWith(expect.objectContaining({
excludeFromHomepage: true,
}));
});
it("applies an explicit public page exclusion value during merge imports", async () => {
const tx = makeTx({ id: "sport-1", excludeFromHomepage: true });
vi.mocked(database).mockReturnValue({
transaction: vi.fn(async (callback) => callback(tx)),
} as never);
await importSportsDataFromJSON(makeImportData({ excludeFromHomepage: false }), "merge");
expect(tx.set).toHaveBeenCalledWith(expect.objectContaining({
excludeFromHomepage: false,
}));
});
});