81 lines
2.3 KiB
TypeScript
81 lines
2.3 KiB
TypeScript
import { afterEach, describe, expect, test } from "vitest";
|
|
|
|
import { createMockProtectedApiServer } from "../scripts/mock-protected-api.mjs";
|
|
|
|
const servers: Array<{ close: () => Promise<void> }> = [];
|
|
|
|
afterEach(async () => {
|
|
while (servers.length > 0) {
|
|
await servers.pop()?.close();
|
|
}
|
|
});
|
|
|
|
describe("mock-protected-api", () => {
|
|
test("returns mock data when a Bearer token is present", async () => {
|
|
const server = createMockProtectedApiServer({ port: 0 });
|
|
await server.start();
|
|
servers.push(server);
|
|
|
|
const response = await fetch(`${server.baseUrl}/api/mock/protected`, {
|
|
headers: {
|
|
Authorization: "Bearer abc123"
|
|
}
|
|
});
|
|
|
|
expect(response.status).toBe(200);
|
|
await expect(response.json()).resolves.toEqual(
|
|
expect.objectContaining({
|
|
ok: true,
|
|
source: "mock-protected-api"
|
|
})
|
|
);
|
|
});
|
|
|
|
test("returns 401 when the Authorization header is missing", async () => {
|
|
const server = createMockProtectedApiServer({ port: 0 });
|
|
await server.start();
|
|
servers.push(server);
|
|
|
|
const response = await fetch(`${server.baseUrl}/api/mock/protected`);
|
|
|
|
expect(response.status).toBe(401);
|
|
await expect(response.json()).resolves.toEqual({
|
|
ok: false,
|
|
error: "unauthorized"
|
|
});
|
|
});
|
|
|
|
test("accepts a batch payload when a Bearer token is present", async () => {
|
|
const server = createMockProtectedApiServer({ port: 0 });
|
|
await server.start();
|
|
servers.push(server);
|
|
|
|
const response = await fetch(`${server.baseUrl}/api/mock/batches`, {
|
|
body: JSON.stringify({
|
|
authors: [{ authorId: "111", authorName: "达人A" }],
|
|
batchId: "批次A-2026-04-22T12:30:00.000Z",
|
|
batchName: "批次A",
|
|
createdAt: "2026-04-22T12:30:00.000Z",
|
|
creatorName: "王少卿",
|
|
logtoUserId: "p7pdhhtde8kj",
|
|
resource: "https://talent-search.intelligrow.cn"
|
|
}),
|
|
headers: {
|
|
Authorization: "Bearer abc123",
|
|
"Content-Type": "application/json"
|
|
},
|
|
method: "POST"
|
|
});
|
|
|
|
expect(response.status).toBe(200);
|
|
await expect(response.json()).resolves.toEqual(
|
|
expect.objectContaining({
|
|
acceptedCount: 1,
|
|
batchId: "批次A-2026-04-22T12:30:00.000Z",
|
|
ok: true,
|
|
source: "mock-batch-submit"
|
|
})
|
|
);
|
|
});
|
|
});
|