diff --git a/server/src/__tests__/company-skills-routes.test.ts b/server/src/__tests__/company-skills-routes.test.ts index 16b4f692..a75b3307 100644 --- a/server/src/__tests__/company-skills-routes.test.ts +++ b/server/src/__tests__/company-skills-routes.test.ts @@ -14,6 +14,7 @@ const mockAccessService = vi.hoisted(() => ({ const mockCompanySkillService = vi.hoisted(() => ({ importFromSource: vi.fn(), deleteSkill: vi.fn(), + scanProjectWorkspaces: vi.fn(), })); const mockLogActivity = vi.hoisted(() => vi.fn()); @@ -69,6 +70,15 @@ describe("company skill mutation permissions", () => { slug: "find-skills", name: "Find Skills", }); + mockCompanySkillService.scanProjectWorkspaces.mockResolvedValue({ + scannedProjects: 1, + scannedWorkspaces: 2, + discovered: [], + imported: [], + updated: [], + conflicts: [], + warnings: [], + }); mockLogActivity.mockResolvedValue(undefined); mockAccessService.canUser.mockResolvedValue(true); mockAccessService.hasPermission.mockResolvedValue(false); @@ -247,6 +257,26 @@ describe("company skill mutation permissions", () => { expect(mockCompanySkillService.importFromSource).not.toHaveBeenCalled(); }); + it("allows agents with canCreateAgents to scan project workspaces", async () => { + mockAgentService.getById.mockResolvedValue({ + id: "agent-1", + companyId: "company-1", + permissions: { canCreateAgents: true }, + }); + + const res = await request(await createApp({ + type: "agent", + agentId: "agent-1", + companyId: "company-1", + runId: "run-1", + })) + .post("/api/companies/company-1/skills/scan-projects") + .send({}); + + expect(res.status, JSON.stringify(res.body)).toBe(200); + expect(mockCompanySkillService.scanProjectWorkspaces).toHaveBeenCalledWith("company-1", {}); + }); + it("allows agents with canCreateAgents to mutate company skills", async () => { mockAgentService.getById.mockResolvedValue({ id: "agent-1",