From e1e19adac534829c52e70edaa3ffe11b7e455554 Mon Sep 17 00:00:00 2001 From: McKayla Washburn Date: Fri, 22 Mar 2024 19:04:30 +0000 Subject: [PATCH 1/2] fix: create workspace with optional auth providers --- .../CreateWorkspacePage.test.tsx | 40 +++++++++++++++++++ .../CreateWorkspacePageView.tsx | 8 +--- 2 files changed, 42 insertions(+), 6 deletions(-) diff --git a/site/src/pages/CreateWorkspacePage/CreateWorkspacePage.test.tsx b/site/src/pages/CreateWorkspacePage/CreateWorkspacePage.test.tsx index 5749fb3b7404d..85ffe8ea45896 100644 --- a/site/src/pages/CreateWorkspacePage/CreateWorkspacePage.test.tsx +++ b/site/src/pages/CreateWorkspacePage/CreateWorkspacePage.test.tsx @@ -233,6 +233,46 @@ describe("CreateWorkspacePage", () => { ); }); + it("optional external auth is optional", async () => { + jest + .spyOn(API, "getWorkspaceQuota") + .mockResolvedValueOnce(MockWorkspaceQuota); + jest + .spyOn(API, "getUsers") + .mockResolvedValueOnce({ users: [MockUser], count: 1 }); + jest.spyOn(API, "createWorkspace").mockResolvedValueOnce(MockWorkspace); + jest + .spyOn(API, "getTemplateVersionExternalAuth") + .mockResolvedValue([ + { ...MockTemplateVersionExternalAuthGithub, optional: true }, + ]); + + renderCreateWorkspacePage(); + await waitForLoaderToBeRemoved(); + + const nameField = await screen.findByLabelText(nameLabelText); + // have to use fireEvent b/c userEvent isn't cleaning up properly between tests + fireEvent.change(nameField, { + target: { value: "test" }, + }); + + // Ensure we're not logged in + await screen.findByText("Login with GitHub"); + + const submitButton = screen.getByText(createWorkspaceText); + await userEvent.click(submitButton); + + await waitFor(() => + expect(API.createWorkspace).toBeCalledWith( + MockUser.organization_ids[0], + MockUser.id, + expect.objectContaining({ + ...MockWorkspaceRequest, + }), + ), + ); + }); + it("auto create a workspace if uses mode=auto", async () => { const param = "first_parameter"; const paramValue = "It works!"; diff --git a/site/src/pages/CreateWorkspacePage/CreateWorkspacePageView.tsx b/site/src/pages/CreateWorkspacePage/CreateWorkspacePageView.tsx index 810f8ca9ef655..3d24b1c086aba 100644 --- a/site/src/pages/CreateWorkspacePage/CreateWorkspacePageView.tsx +++ b/site/src/pages/CreateWorkspacePage/CreateWorkspacePageView.tsx @@ -84,6 +84,7 @@ export const CreateWorkspacePageView: FC = ({ externalAuth, externalAuthPollingState, startPollingExternalAuth, + hasAllRequiredExternalAuth, parameters, autofillParameters, permissions, @@ -92,7 +93,6 @@ export const CreateWorkspacePageView: FC = ({ onCancel, }) => { const [owner, setOwner] = useState(defaultOwner); - const requiresExternalAuth = externalAuth.some((auth) => !auth.authenticated); const [suggestedName, setSuggestedName] = useState(() => generateWorkspaceName(), ); @@ -117,7 +117,7 @@ export const CreateWorkspacePageView: FC = ({ }), enableReinitialize: true, onSubmit: (request) => { - if (requiresExternalAuth) { + if (!hasAllRequiredExternalAuth) { return; } @@ -144,10 +144,6 @@ export const CreateWorkspacePageView: FC = ({ [autofillParameters], ); - const hasAllRequiredExternalAuth = externalAuth.every( - (auth) => auth.optional || auth.authenticated, - ); - return ( Cancel}> From bc47ada8dc5896e7d56b33f5d6c3f7cafdceaaf3 Mon Sep 17 00:00:00 2001 From: McKayla Washburn Date: Fri, 22 Mar 2024 19:15:15 +0000 Subject: [PATCH 2/2] update stories --- .../CreateWorkspacePage/CreateWorkspacePageView.stories.tsx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/site/src/pages/CreateWorkspacePage/CreateWorkspacePageView.stories.tsx b/site/src/pages/CreateWorkspacePage/CreateWorkspacePageView.stories.tsx index c205b82333251..537c0280ba03d 100644 --- a/site/src/pages/CreateWorkspacePage/CreateWorkspacePageView.stories.tsx +++ b/site/src/pages/CreateWorkspacePage/CreateWorkspacePageView.stories.tsx @@ -21,6 +21,7 @@ const meta: Meta = { template: MockTemplate, parameters: [], externalAuth: [], + hasAllRequiredExternalAuth: true, mode: "form", permissions: { createWorkspaceForUser: true, @@ -134,6 +135,7 @@ export const ExternalAuth: Story = { optional: true, }, ], + hasAllRequiredExternalAuth: false, }, }; @@ -159,6 +161,7 @@ export const ExternalAuthError: Story = { optional: true, }, ], + hasAllRequiredExternalAuth: false, }, };