Files
AgentCompany/tests/unit/connector-matching.test.ts
T
ZacharyZhang-NY e94939a562 test(connector-id): migrate fixtures and assertions to pi-mono ids
Replaces legacy adapter ids (codex_local / claude_local / gemini_local /
claude_compatible) across ~42 test files with pi-mono equivalents:
- codex_local → openai-codex
- claude_local → claude-pro
- gemini_local → gemini-cli
- claude_compatible → anthropic

Hand-rewrites where fixture semantics changed:
- connector-matching: TASK_TYPE_PREFERENCE ordering rebased (claude-pro
  first for code/content/management; google first for research)
- connector-model-policy: getModels(provider) from pi-ai instead of the
  deleted adapter.module.models array
- session-management + edge-case-session: adapter exemption removed;
  rotation now uniform under pi-mono
- ipc-core-admin-handlers: CSV compat model replaced with pi-ai anthropic
- connectors.spec: lookup by openai-codex id (catalog now starts with claude-pro)
- onboarding-model-pool: listProviderModels(provider) helper; label text
  changed to "ChatGPT Plus/Pro (Codex)"
- database integration: added vault insecure-fallback env + electron mock
- command-paths: uses new @main/connector-helpers normalizeCommandValue
- pi-mono-migrations: added `as string` casts for 3 negative-existence
  assertions verifying legacy ids were removed

Drops:
- pnpm-workspace.yaml packages: [] (was "packages/*"; directory empty)
- obsolete CONNECTOR_STRENGTHS import; .module.models probing

Verification:
- pnpm typecheck → 0 errors
- pnpm lint → 0 errors / 0 warnings
- pnpm build:verify → 0 errors / 0 warnings
- pnpm test:unit → 508/508 pass
- pnpm test:integration → 96/96 pass
- All 6 adapter hard gates pass (NOT FOUND / 0 matches / empty)
- pi-ai / pi-agent-core / pi-coding-agent all resolved @0.67.6
2026-04-17 02:36:53 -04:00

126 lines
4.0 KiB
TypeScript

import { describe, expect, it } from "vitest";
import {
inferTaskType,
getConnectorStrengths,
TASK_TYPE_PREFERENCE,
ROLE_DEPARTMENT_HINTS as _ROLE_DEPARTMENT_HINTS,
} from "../../src/main/connector-matching";
describe("connector-matching", () => {
describe("TASK_TYPE_PREFERENCE", () => {
it("maps code tasks to claude-pro first", () => {
expect(TASK_TYPE_PREFERENCE.code[0]).toBe("claude-pro");
});
it("maps research tasks to google first", () => {
expect(TASK_TYPE_PREFERENCE.research[0]).toBe("google");
});
it("maps content tasks to claude-pro first", () => {
expect(TASK_TYPE_PREFERENCE.content[0]).toBe("claude-pro");
});
it("maps management tasks to claude-pro first", () => {
expect(TASK_TYPE_PREFERENCE.management[0]).toBe("claude-pro");
});
it("maps general tasks to claude-pro first", () => {
expect(TASK_TYPE_PREFERENCE.general[0]).toBe("claude-pro");
});
it("includes all three core connectors for every task type", () => {
for (const key of Object.keys(TASK_TYPE_PREFERENCE)) {
const prefs = TASK_TYPE_PREFERENCE[key as keyof typeof TASK_TYPE_PREFERENCE];
expect(prefs).toContain("claude-pro");
expect(prefs).toContain("openai-codex");
expect(prefs).toContain("gemini-cli");
}
});
});
describe("inferTaskType", () => {
it("returns code for engineering department", () => {
expect(inferTaskType("engineering")).toBe("code");
});
it("returns research for research department", () => {
expect(inferTaskType("research")).toBe("research");
});
it("returns content for marketing department", () => {
expect(inferTaskType("marketing")).toBe("content");
});
it("returns content for product department", () => {
expect(inferTaskType("product")).toBe("content");
});
it("returns management for hr department", () => {
expect(inferTaskType("hr")).toBe("management");
});
it("returns management for finance department", () => {
expect(inferTaskType("finance")).toBe("management");
});
it("returns management for executive department", () => {
expect(inferTaskType("executive")).toBe("management");
});
it("returns content for design department", () => {
expect(inferTaskType("design")).toBe("content");
});
it("returns content for customer_support department", () => {
expect(inferTaskType("customer_support")).toBe("content");
});
it("returns management for operations department", () => {
expect(inferTaskType("operations")).toBe("management");
});
it("returns content for sales department", () => {
expect(inferTaskType("sales")).toBe("content");
});
it("returns management for legal department", () => {
expect(inferTaskType("legal")).toBe("management");
});
it("returns general for null department", () => {
expect(inferTaskType(null)).toBe("general");
});
it("returns general for undefined department", () => {
expect(inferTaskType(undefined)).toBe("general");
});
it("returns general for unknown department", () => {
expect(inferTaskType("unknown_dept")).toBe("general");
});
});
describe("getConnectorStrengths", () => {
it("returns non-empty string for claude-pro", () => {
const result = getConnectorStrengths("claude-pro");
expect(result).toBeTruthy();
expect(typeof result).toBe("string");
expect(result.length).toBeGreaterThan(10);
});
it("returns non-empty string for openai-codex", () => {
const result = getConnectorStrengths("openai-codex");
expect(result).toBeTruthy();
expect(typeof result).toBe("string");
expect(result.length).toBeGreaterThan(10);
});
it("returns non-empty string for gemini-cli", () => {
const result = getConnectorStrengths("gemini-cli");
expect(result).toBeTruthy();
expect(typeof result).toBe("string");
expect(result.length).toBeGreaterThan(10);
});
});
});