From 526b7a9fb36dd26fe4b067ed0335fb3194bfc129 Mon Sep 17 00:00:00 2001 From: arc53-machine <232052973+arc53-machine@users.noreply.github.com> Date: Tue, 29 Sep 2026 00:54:07 +0100 Subject: [PATCH] Treat a refused tool update as a failed save --- frontend/src/settings/ToolConfig.test.tsx | 22 ++++++++++++++++++++++ frontend/src/settings/ToolConfig.tsx | 10 ++++------ 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/frontend/src/settings/ToolConfig.test.tsx b/frontend/src/settings/ToolConfig.test.tsx index e6bad295..9e84e807 100644 --- a/frontend/src/settings/ToolConfig.test.tsx +++ b/frontend/src/settings/ToolConfig.test.tsx @@ -185,6 +185,28 @@ describe('ToolConfig', () => { expect(alert?.className).toContain('text-destructive'); }); + it('shows a save the server refused as failed', async () => { + updateTool.mockResolvedValue({ ok: false, status: 400 }); + await render({ ...userTool, customName: '' }); + const name = container.querySelector( + 'input[placeholder="settings.tools.customNamePlaceholder"]', + ); + await act(async () => { + const setter = Object.getOwnPropertyDescriptor( + HTMLInputElement.prototype, + 'value', + )?.set; + setter?.call(name, 'Renamed'); + name?.dispatchEvent(new Event('input', { bubbles: true })); + }); + await act(async () => { + buttonByText('settings.tools.save')?.click(); + }); + expect( + container.querySelector('[role="alert"]')?.textContent, + ).toBe('settings.tools.saveFailed'); + }); + it('renders the API tool header actions as outline-primary pills', async () => { await render(apiTool); for (const label of [ diff --git a/frontend/src/settings/ToolConfig.tsx b/frontend/src/settings/ToolConfig.tsx index d189585c..36d29829 100644 --- a/frontend/src/settings/ToolConfig.tsx +++ b/frontend/src/settings/ToolConfig.tsx @@ -257,12 +257,10 @@ export default function ToolConfig({ actions: 'actions' in tool ? tool.actions : [], status: tool.status, }; - if (tool.id) { - await userService.updateTool({ id: tool.id, ...payload }, token); - return; - } - const response = await userService.createTool(payload, token); - if (!response.ok) throw new Error('create failed'); + const response = tool.id + ? await userService.updateTool({ id: tool.id, ...payload }, token) + : await userService.createTool(payload, token); + if (!response.ok) throw new Error('save failed'); }; const handleSaveChanges = async () => {