fix(templates): mcpToolPermissions persisté via create/update_template — désérialisation par alias préférés (mcpToolPermissions > defaultMcpToolPermissions > defaultMcpToolPolicy) sur les DTO Create/UpdateTemplateRequestDto — #244 (QA verte)

This commit is contained in:
2026-08-24 11:46:14 +02:00
parent 592f248762
commit 69129a95ad
3 changed files with 135 additions and 23 deletions

View File

@ -239,6 +239,46 @@ describe("TemplatesPanel (with MockTemplateGateway)", () => {
expect(templates[0].contentMd).toBe("# Updated content");
});
it("reopening an edited template preserves saved MCP tool permissions in the editor", async () => {
const agent = new MockAgentGateway();
const tmpl = new MockTemplateGateway(agent);
await tmpl.createTemplate({
name: "Permissioned",
content: "# Initial",
defaultProfileId: "",
mcpToolPermissions: null,
});
renderTemplatesPanel({ agent, template: tmpl });
await screen.findByText("Permissioned");
fireEvent.click(screen.getByRole("button", { name: "edit Permissioned" }));
await waitFor(() => {
expect(screen.getByLabelText("template MCP tool idea_ticket_read")).toBeTruthy();
});
const checkbox = screen.getByLabelText(
"template MCP tool idea_ticket_read",
) as HTMLInputElement;
expect(checkbox.checked).toBe(false);
fireEvent.click(checkbox);
expect(checkbox.checked).toBe(true);
fireEvent.click(screen.getByRole("button", { name: "Save template" }));
await waitFor(() => {
expect(screen.queryByLabelText("template editor")).toBeNull();
});
fireEvent.click(screen.getByRole("button", { name: "edit Permissioned" }));
await waitFor(() => {
expect(screen.getByLabelText("template MCP tool idea_ticket_read")).toBeTruthy();
});
expect(
(screen.getByLabelText("template MCP tool idea_ticket_read") as HTMLInputElement).checked,
).toBe(true);
});
it("deleting a template removes it from the list", async () => {
renderTemplatesPanel();
await createTemplate("ToDelete");