claude-code/tests/integration/message-pipeline.test.ts

66 lines
2.4 KiB
TypeScript
Raw Normal View History

2026-04-02 14:44:56 +08:00
import { describe, expect, test } from "bun:test";
import {
createUserMessage,
createAssistantMessage,
normalizeMessages,
extractTag,
} from "../../src/utils/messages";
// ─── Message Structure ────────────────────────────────────────────────
describe("Message pipeline: message structure", () => {
test("createUserMessage returns a Message with type 'user'", () => {
const msg = createUserMessage("hello");
expect(msg.type).toBe("user");
expect(msg.message.role).toBe("user");
expect(msg.uuid).toBeTruthy();
expect(msg.timestamp).toBeTruthy();
});
test("createAssistantMessage returns a Message with type 'assistant'", () => {
const msg = createAssistantMessage("response");
expect(msg.type).toBe("assistant");
expect(msg.message.role).toBe("assistant");
expect(msg.uuid).toBeTruthy();
});
test("user and assistant messages have different UUIDs", () => {
const user = createUserMessage("hello");
const assistant = createAssistantMessage("response");
expect(user.uuid).not.toBe(assistant.uuid);
});
});
// ─── Tag Extraction ───────────────────────────────────────────────────
describe("Message pipeline: tag extraction", () => {
test("extractTag returns null for non-matching tag", () => {
expect(extractTag("no tags here", "think")).toBeNull();
});
test("extractTag returns null for empty string", () => {
expect(extractTag("", "think")).toBeNull();
});
test("extractTag requires tagName parameter", () => {
// Calling without tagName throws
expect(() => (extractTag as any)("hello")).toThrow();
});
});
// ─── Normalization ────────────────────────────────────────────────────
describe("Message pipeline: normalization", () => {
test("normalizeMessages returns an array", () => {
const msg = createUserMessage("hello");
const result = normalizeMessages([msg]);
expect(Array.isArray(result)).toBe(true);
});
test("normalizeMessages preserves at least one message for simple input", () => {
const msg = createUserMessage("hello");
const result = normalizeMessages([msg]);
expect(result.length).toBeGreaterThanOrEqual(1);
});
});