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
126 lines
4.0 KiB
TypeScript
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);
|
|
});
|
|
});
|
|
});
|