backlog-md/src/test/mcp-tasks-local-filter.test.ts

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");
});
});