72 lines
1.9 KiB
TypeScript
72 lines
1.9 KiB
TypeScript
import { describe, expect, it } from "bun:test";
|
|
import type { McpServer } from "../mcp/server.ts";
|
|
import { TaskHandlers } from "../mcp/tools/tasks/handlers.ts";
|
|
import type { Task, TaskSearchResult } from "../types/index.ts";
|
|
|
|
const localTask: Task = {
|
|
id: "task-1",
|
|
title: "Local task",
|
|
status: "To Do",
|
|
assignee: [],
|
|
createdDate: "2025-12-03",
|
|
labels: [],
|
|
dependencies: [],
|
|
source: "local",
|
|
};
|
|
|
|
const remoteTask: Task = {
|
|
id: "task-2",
|
|
title: "Remote task",
|
|
status: "To Do",
|
|
assignee: [],
|
|
createdDate: "2025-12-03",
|
|
labels: [],
|
|
dependencies: [],
|
|
source: "remote",
|
|
};
|
|
|
|
describe("MCP task tools local filtering", () => {
|
|
const mockConfig = { statuses: ["To Do", "In Progress", "Done"] };
|
|
|
|
it("filters cross-branch tasks out of task_list", async () => {
|
|
const handlers = new TaskHandlers({
|
|
queryTasks: async () => [localTask, remoteTask],
|
|
filesystem: {
|
|
loadConfig: async () => mockConfig,
|
|
},
|
|
} as unknown as McpServer);
|
|
|
|
const result = await handlers.listTasks({});
|
|
const text = (result.content ?? [])
|
|
.map((c) => (typeof c === "object" && c && "text" in c ? c.text : ""))
|
|
.join("\n");
|
|
|
|
expect(text).toContain("task-1 - Local task");
|
|
expect(text).not.toContain("task-2 - Remote task");
|
|
});
|
|
|
|
it("filters cross-branch tasks out of task_search", async () => {
|
|
const searchResults: TaskSearchResult[] = [
|
|
{ type: "task", task: localTask, score: 0.1 },
|
|
{ type: "task", task: remoteTask, score: 0.2 },
|
|
];
|
|
|
|
const handlers = new TaskHandlers({
|
|
getSearchService: async () => ({
|
|
search: () => searchResults,
|
|
}),
|
|
filesystem: {
|
|
loadConfig: async () => mockConfig,
|
|
},
|
|
} as unknown as McpServer);
|
|
|
|
const result = await handlers.searchTasks({ query: "task" });
|
|
const text = (result.content ?? [])
|
|
.map((c) => (typeof c === "object" && c && "text" in c ? c.text : ""))
|
|
.join("\n");
|
|
|
|
expect(text).toContain("task-1 - Local task");
|
|
expect(text).not.toContain("task-2 - Remote task");
|
|
});
|
|
});
|