diff --git a/site/src/modules/dashboard/Navbar/NavbarView.stories.tsx b/site/src/modules/dashboard/Navbar/NavbarView.stories.tsx index 8e2f0f7337f..03d24920d7c 100644 --- a/site/src/modules/dashboard/Navbar/NavbarView.stories.tsx +++ b/site/src/modules/dashboard/Navbar/NavbarView.stories.tsx @@ -158,6 +158,7 @@ export const ForMCPUpdateOnlyAdmin: Story = { export const ForMCPDeleteOnlyAdmin: Story = { decorators: [withAuthProvider], parameters: { + pixel: { matrix: pixelWithDesktop }, queries: [{ key: ["tasks", memberTasksFilter], data: [] }], user: MockUserMember, permissions: { @@ -205,6 +206,7 @@ export const ForMCPDeleteOnlyAdmin: Story = { export const ForMCPCreateOnlyAdmin: Story = { decorators: [withAuthProvider], parameters: { + pixel: { matrix: pixelWithDesktop }, queries: [{ key: ["tasks", memberTasksFilter], data: [] }], user: MockUserMember, permissions: { diff --git a/site/src/pages/AISettingsPage/ModelsPage/components/ModelForm.stories.tsx b/site/src/pages/AISettingsPage/ModelsPage/components/ModelForm.stories.tsx index 696dfaf6d0d..777c1dc202a 100644 --- a/site/src/pages/AISettingsPage/ModelsPage/components/ModelForm.stories.tsx +++ b/site/src/pages/AISettingsPage/ModelsPage/components/ModelForm.stories.tsx @@ -636,9 +636,11 @@ export const CostEstimateDebouncesLivePriceLookup: Story = { }, }; -// On an entitled form the live lookup may override the catalog, so typing -// into an empty identifier shows the loading placeholder immediately rather -// than briefly flashing catalog prices before the lookup fires. +// On an entitled form the live lookup may override the catalog, so +// committing a catalog model shows the loading placeholder immediately +// rather than briefly flashing catalog prices before the lookup fires. In +// add mode the identifier autocomplete only commits the model when an +// option is selected, so select one instead of typing free text. export const CostEstimateShowsLoadingWhileDebouncePending: Story = { args: { selectedProviderState: MockAnthropicProviderState, @@ -653,7 +655,10 @@ export const CostEstimateShowsLoadingWhileDebouncePending: Story = { ); await userEvent.type( canvas.getByLabelText(/model identifier/i), - "claude-haiku-4-5", + "claude-haiku", + ); + await userEvent.click( + await screen.findByRole("option", { name: /claude haiku 4\.5/i }), ); await waitForPriceLoading(canvas); // The catalog price must not render while the lookup is pending. diff --git a/site/src/pages/AgentsPage/components/ChatElements/CompactOrgSelector.tsx b/site/src/pages/AgentsPage/components/ChatElements/CompactOrgSelector.tsx index f7bd82fa759..57ff76c4002 100644 --- a/site/src/pages/AgentsPage/components/ChatElements/CompactOrgSelector.tsx +++ b/site/src/pages/AgentsPage/components/ChatElements/CompactOrgSelector.tsx @@ -104,6 +104,10 @@ export const CompactOrgSelector: FC = ({ > {" "} + expect(dialog.getByText("Failed to parse secrets file.")).toBeVisible(), + ); expect(dialog.getByText("Line 2 must contain KEY=VALUE.")).toBeVisible(); expect(dialog.queryByText("Response data")).not.toBeInTheDocument(); expect(dialog.queryByText("Stack Trace")).not.toBeInTheDocument(); @@ -785,9 +787,11 @@ export const ImportSecretsFileReadError: Story = { new File(["A=1"], "secrets.env"), ); - await expect( - await dialog.findByText("Failed to read the selected file."), - ).toBeVisible(); + await waitFor(() => + expect( + dialog.getByText("Failed to read the selected file."), + ).toBeVisible(), + ); }, }; @@ -838,11 +842,13 @@ export const ImportSecretsRemoveAndRetry: Story = { new File(["not a secret"], "bad.txt"), ); - await expect( - await dialog.findByText( - "Unsupported file type. Import a .env, .json, .yaml, or .yml file.", - ), - ).toBeVisible(); + await waitFor(() => + expect( + dialog.getByText( + "Unsupported file type. Import a .env, .json, .yaml, or .yml file.", + ), + ).toBeVisible(), + ); await user.click(dialog.getByRole("button", { name: "Remove file" })); expect( dialog.queryByText(