68 lines
1.7 KiB
TypeScript
68 lines
1.7 KiB
TypeScript
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
|
|
import { executeTool } from "../router/assistant-tools.js";
|
|
import { createToolContext } from "./assistant-tools-country-test-helpers.js";
|
|
|
|
describe("assistant country list tools", () => {
|
|
beforeEach(() => {
|
|
vi.clearAllMocks();
|
|
});
|
|
|
|
it("lists countries with schedule rules, active state, and metro cities", async () => {
|
|
const findMany = vi.fn().mockResolvedValue([
|
|
{
|
|
id: "country_de",
|
|
code: "DE",
|
|
name: "Deutschland",
|
|
dailyWorkingHours: 8,
|
|
scheduleRules: null,
|
|
isActive: true,
|
|
metroCities: [{ id: "city_muc", name: "Munich" }],
|
|
},
|
|
{
|
|
id: "country_es",
|
|
code: "ES",
|
|
name: "Spain",
|
|
dailyWorkingHours: 8,
|
|
scheduleRules: null,
|
|
isActive: true,
|
|
metroCities: [{ id: "city_mad", name: "Madrid" }],
|
|
},
|
|
]);
|
|
const ctx = createToolContext({
|
|
country: {
|
|
findMany,
|
|
},
|
|
});
|
|
|
|
const result = await executeTool(
|
|
"list_countries",
|
|
JSON.stringify({ search: "deu" }),
|
|
ctx,
|
|
);
|
|
|
|
const parsed = JSON.parse(result.content) as {
|
|
count: number;
|
|
countries: Array<{
|
|
code: string;
|
|
isActive: boolean;
|
|
metroCities: Array<{ id: string; name: string }>;
|
|
cities: string[];
|
|
}>;
|
|
};
|
|
|
|
expect(findMany).toHaveBeenCalledWith({
|
|
where: { isActive: true },
|
|
include: { metroCities: { orderBy: { name: "asc" } } },
|
|
orderBy: { name: "asc" },
|
|
});
|
|
expect(parsed.count).toBe(1);
|
|
expect(parsed.countries[0]).toMatchObject({
|
|
code: "DE",
|
|
isActive: true,
|
|
cities: ["Munich"],
|
|
metroCities: [{ id: "city_muc", name: "Munich" }],
|
|
});
|
|
});
|
|
});
|