44 lines
2.0 KiB
TypeScript
44 lines
2.0 KiB
TypeScript
import { describe, it, expect, vi, afterEach } from "vitest";
|
|
import { logoImageUrl, monogram, normalizeDomain, searchLogos } from "../lib/logo";
|
|
|
|
afterEach(() => {
|
|
vi.unstubAllGlobals();
|
|
delete process.env.LOGO_DEV_SECRET_KEY;
|
|
delete process.env.LOGO_DEV_PUBLISHABLE_KEY;
|
|
});
|
|
|
|
describe("logo", () => {
|
|
it("normalizeDomain akzeptiert nur gültige Domains", () => {
|
|
expect(normalizeDomain("Therme-Erding.de")).toBe("therme-erding.de");
|
|
expect(normalizeDomain(" keinedomain ")).toBeNull();
|
|
expect(normalizeDomain(null)).toBeNull();
|
|
});
|
|
it("logoImageUrl braucht Domain und öffentlichen Key", async () => {
|
|
process.env.LOGO_DEV_PUBLISHABLE_KEY = "pk_test";
|
|
expect(await logoImageUrl("stripe.com")).toBe("https://img.logo.dev/stripe.com?token=pk_test&size=128&format=png");
|
|
expect(await logoImageUrl(null)).toBeNull();
|
|
delete process.env.LOGO_DEV_PUBLISHABLE_KEY;
|
|
expect(await logoImageUrl("stripe.com")).toBeNull();
|
|
});
|
|
it("monogram bildet Kürzel aus dem Namen", () => {
|
|
expect(monogram("Therme Erding")).toBe("TE");
|
|
expect(monogram("dm")).toBe("DM");
|
|
expect(monogram(" ")).toBe("?");
|
|
});
|
|
it("searchLogos mappt Treffer und begrenzt auf 8", async () => {
|
|
process.env.LOGO_DEV_SECRET_KEY = "sk_test";
|
|
process.env.LOGO_DEV_PUBLISHABLE_KEY = "pk_test";
|
|
const items = Array.from({ length: 10 }, (_, i) => ({ name: `Shop ${i}`, domain: `shop${i}.de` }));
|
|
vi.stubGlobal("fetch", vi.fn().mockResolvedValue({ ok: true, json: async () => items }));
|
|
const res = await searchLogos("shop");
|
|
expect(res).toHaveLength(8);
|
|
expect(res[0]).toEqual({ name: "Shop 0", domain: "shop0.de", logoUrl: expect.stringContaining("shop0.de") });
|
|
});
|
|
it("searchLogos wirft ohne Key und bei Fehlerstatus", async () => {
|
|
await expect(searchLogos("x")).rejects.toThrow("LOGO_DEV_SECRET_KEY fehlt");
|
|
process.env.LOGO_DEV_SECRET_KEY = "sk_test";
|
|
vi.stubGlobal("fetch", vi.fn().mockResolvedValue({ ok: false, status: 401 }));
|
|
await expect(searchLogos("x")).rejects.toThrow("Logosuche 401");
|
|
});
|
|
});
|