From 9861931df120a75ec64fc1d197bd86c78ff74361 Mon Sep 17 00:00:00 2001 From: Bruno Quaresma Date: Wed, 15 Oct 2025 10:04:17 -0300 Subject: [PATCH] fix: select the correct version when template changes (#20293) Fix https://github.com/coder/internal/issues/1062 --- .../tasks/TaskPrompt/TaskPrompt.stories.tsx | 73 ++++++++++++++++--- .../modules/tasks/TaskPrompt/TaskPrompt.tsx | 7 +- 2 files changed, 69 insertions(+), 11 deletions(-) diff --git a/site/src/modules/tasks/TaskPrompt/TaskPrompt.stories.tsx b/site/src/modules/tasks/TaskPrompt/TaskPrompt.stories.tsx index 1710bb3c34..5577ff6d90 100644 --- a/site/src/modules/tasks/TaskPrompt/TaskPrompt.stories.tsx +++ b/site/src/modules/tasks/TaskPrompt/TaskPrompt.stories.tsx @@ -30,15 +30,6 @@ const meta: Meta = { }, beforeEach: () => { spyOn(API, "getTemplateVersionExternalAuth").mockResolvedValue([]); - spyOn(API, "getTemplates").mockResolvedValue([ - MockTemplate, - { - ...MockTemplate, - id: "test-template-2", - name: "template 2", - display_name: "Template 2", - }, - ]); spyOn(API, "getTemplateVersions").mockResolvedValue([ { ...MockTemplateVersion, @@ -126,6 +117,70 @@ export const OnSuccess: Story = { }, }; +export const ChangeTemplate: Story = { + decorators: [withGlobalSnackbar], + args: { + templates: [ + { + ...MockTemplate, + id: "claude-code", + name: "claude-code", + display_name: "Claude Code", + active_version_id: "claude-code-version", + }, + { + ...MockTemplate, + id: "codex", + name: "codex", + display_name: "Codex", + active_version_id: "codex-version", + }, + ], + }, + beforeEach: () => { + spyOn(API, "getTemplateVersions").mockImplementation((templateId) => { + if (templateId === "claude-code") { + return Promise.resolve([ + { + ...MockTemplateVersion, + id: "claude-code-version", + name: "claude-code-version", + }, + ]); + } + if (templateId === "codex") { + return Promise.resolve([ + { + ...MockTemplateVersion, + id: "codex-version", + name: "codex-version", + }, + ]); + } + return Promise.resolve([]); + }); + spyOn(API.experimental, "createTask").mockResolvedValue(MockTask); + }, + play: async ({ canvasElement, step }) => { + const canvas = within(canvasElement); + const body = within(canvasElement.ownerDocument.body); + + await step("Change template", async () => { + const templateSelect = await canvas.findByLabelText(/select template/i); + await userEvent.click(templateSelect); + const templateOption = await body.findByRole("option", { + name: /codex/i, + }); + await userEvent.click(templateOption); + }); + + await step("Default version is selected", async () => { + const versionSelect = await canvas.findByLabelText(/version/i); + expect(versionSelect).toHaveTextContent("codex-version"); + }); + }, +}; + export const SelectTemplateVersion: Story = { decorators: [withGlobalSnackbar], beforeEach: () => { diff --git a/site/src/modules/tasks/TaskPrompt/TaskPrompt.tsx b/site/src/modules/tasks/TaskPrompt/TaskPrompt.tsx index 2f399ac3e4..1e9c2d2f49 100644 --- a/site/src/modules/tasks/TaskPrompt/TaskPrompt.tsx +++ b/site/src/modules/tasks/TaskPrompt/TaskPrompt.tsx @@ -165,6 +165,9 @@ const CreateTaskForm: FC = ({ templates, onSuccess }) => { ...templateVersions(selectedTemplate.id), enabled: permissions.updateTemplates, }); + useEffect(() => { + setSelectedVersionId(selectedTemplate.active_version_id); + }, [selectedTemplate]); // Presets const { data: presets, isLoading: isLoadingPresets } = useQuery( @@ -269,7 +272,7 @@ const CreateTaskForm: FC = ({ templates, onSuccess }) => {