refactor(api): extract country router support
This commit is contained in:
@@ -0,0 +1,102 @@
|
||||
import { TRPCError } from "@trpc/server";
|
||||
import { describe, expect, it, vi } from "vitest";
|
||||
import {
|
||||
assertCountryCodeAvailable,
|
||||
assertMetroCityDeletable,
|
||||
buildCountryCreateData,
|
||||
buildCountryListWhere,
|
||||
buildCountryUpdateData,
|
||||
buildMetroCityCreateData,
|
||||
buildMetroCityUpdateData,
|
||||
findCountryByIdentifier,
|
||||
jsonOrNull,
|
||||
} from "../router/country-support.js";
|
||||
|
||||
describe("country support", () => {
|
||||
it("builds list filters", () => {
|
||||
expect(buildCountryListWhere({ isActive: true })).toEqual({
|
||||
isActive: true,
|
||||
});
|
||||
});
|
||||
|
||||
it("resolves countries by code before fuzzy name fallback", async () => {
|
||||
const db = {
|
||||
country: {
|
||||
findUnique: vi.fn().mockResolvedValue(null),
|
||||
findFirst: vi.fn()
|
||||
.mockResolvedValueOnce({ id: "country_de", code: "DE" }),
|
||||
},
|
||||
} as never;
|
||||
|
||||
const result = await findCountryByIdentifier<{ id: string; code: string }>(
|
||||
db,
|
||||
" de ",
|
||||
{ select: { id: true, code: true } },
|
||||
);
|
||||
|
||||
expect(result).toEqual({ id: "country_de", code: "DE" });
|
||||
expect(db.country.findFirst).toHaveBeenNthCalledWith(1, {
|
||||
where: { code: { equals: "DE", mode: "insensitive" } },
|
||||
select: { id: true, code: true },
|
||||
});
|
||||
});
|
||||
|
||||
it("rejects duplicate country codes outside the ignored id", async () => {
|
||||
const db = {
|
||||
country: {
|
||||
findUnique: vi.fn().mockResolvedValue({ id: "country_existing", code: "DE" }),
|
||||
},
|
||||
} as never;
|
||||
|
||||
await expect(assertCountryCodeAvailable(db, "DE")).rejects.toBeInstanceOf(TRPCError);
|
||||
});
|
||||
|
||||
it("builds create and sparse update payloads", () => {
|
||||
expect(buildCountryCreateData({
|
||||
code: "DE",
|
||||
name: "Germany",
|
||||
dailyWorkingHours: 8,
|
||||
scheduleRules: [{ weekday: 1 }],
|
||||
})).toEqual({
|
||||
code: "DE",
|
||||
name: "Germany",
|
||||
dailyWorkingHours: 8,
|
||||
scheduleRules: [{ weekday: 1 }],
|
||||
});
|
||||
|
||||
expect(buildCountryUpdateData({
|
||||
dailyWorkingHours: 7.5,
|
||||
scheduleRules: null,
|
||||
isActive: false,
|
||||
})).toEqual({
|
||||
dailyWorkingHours: 7.5,
|
||||
scheduleRules: expect.anything(),
|
||||
isActive: false,
|
||||
});
|
||||
|
||||
expect(buildMetroCityCreateData({
|
||||
name: "Berlin",
|
||||
countryId: "country_de",
|
||||
})).toEqual({
|
||||
name: "Berlin",
|
||||
countryId: "country_de",
|
||||
});
|
||||
|
||||
expect(buildMetroCityUpdateData({
|
||||
name: "Munich",
|
||||
})).toEqual({
|
||||
name: "Munich",
|
||||
});
|
||||
});
|
||||
|
||||
it("maps nullish schedule rules to Prisma.JsonNull", () => {
|
||||
expect(jsonOrNull(null)).toBeTypeOf("object");
|
||||
expect(jsonOrNull(undefined)).toBeTypeOf("object");
|
||||
});
|
||||
|
||||
it("rejects metro-city deletion while resources are assigned", () => {
|
||||
expect(() => assertMetroCityDeletable({
|
||||
_count: { resources: 1 },
|
||||
})).toThrow(TRPCError);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user