Files
Kordant/browser-ext/tests/api-client.test.ts
2026-05-25 22:49:37 -04:00

91 lines
2.3 KiB
TypeScript

import { describe, it, expect, vi, beforeEach } from "vitest";
import { createApiClient } from "../src/lib/api-client";
vi.mock("@trpc/client", () => ({
createTRPCProxyClient: vi.fn(() => ({
spamshield: {
checkNumber: {
query: vi.fn().mockResolvedValue({
isSpam: true,
score: 0.85,
category: "scam",
}),
},
classifySMS: {
query: vi.fn().mockResolvedValue({
isSpam: false,
score: 0.1,
category: "legitimate",
}),
},
},
extension: {
getAuthStatus: {
query: vi.fn().mockResolvedValue({ linked: false }),
},
linkDevice: {
mutate: vi.fn().mockResolvedValue({
linked: true,
deviceId: "dev-123",
}),
},
reportPhishing: {
mutate: vi.fn().mockResolvedValue({
reported: true,
url: "https://phishing.com",
}),
},
},
})),
httpBatchLink: vi.fn(),
}));
describe("createApiClient", () => {
let client: ReturnType<typeof createApiClient>;
beforeEach(() => {
client = createApiClient("https://api.kordant.ai/api/trpc", "test-key");
});
it("should create a client", () => {
expect(client).toBeDefined();
});
it("should check phone number reputation", async () => {
const result = await client.spamshield.checkNumber.query({
phoneNumber: "+1234567890",
});
expect(result).toBeDefined();
expect(result.isSpam).toBe(true);
expect(result.score).toBe(0.85);
});
it("should classify SMS text", async () => {
const result = await client.spamshield.classifySMS.query({
text: "Hello, this is a test message",
});
expect(result).toBeDefined();
expect(result.isSpam).toBe(false);
});
it("should get auth status", async () => {
const result = await client.extension.getAuthStatus.query();
expect(result).toEqual({ linked: false });
});
it("should link device", async () => {
const result = await client.extension.linkDevice.mutate({
extensionId: "ext-123",
});
expect(result.linked).toBe(true);
expect(result.deviceId).toBe("dev-123");
});
it("should report phishing", async () => {
const result = await client.extension.reportPhishing.mutate({
url: "https://phishing.com",
});
expect(result.reported).toBe(true);
});
});