Skip to content

Commit b8a5323

Browse files
authored
chore: revert "refactor(site): verify external auth before display ws form (coder#11777)" (coder#12183)
1 parent 53e8f9c commit b8a5323

10 files changed

+379
-522
lines changed

site/src/pages/CreateWorkspacePage/CreateWorkspacePage.test.tsx

Lines changed: 63 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,21 @@ import {
66
MockUser,
77
MockWorkspace,
88
MockWorkspaceQuota,
9+
MockWorkspaceRequest,
910
MockWorkspaceRichParametersRequest,
1011
MockTemplateVersionParameter1,
1112
MockTemplateVersionParameter2,
1213
MockTemplateVersionParameter3,
1314
MockTemplateVersionExternalAuthGithub,
1415
MockOrganization,
16+
MockTemplateVersionExternalAuthGithubAuthenticated,
1517
} from "testHelpers/entities";
1618
import {
1719
renderWithAuth,
1820
waitForLoaderToBeRemoved,
1921
} from "testHelpers/renderHelpers";
2022
import CreateWorkspacePage from "./CreateWorkspacePage";
2123
import { Language } from "./CreateWorkspacePageView";
22-
import { server } from "testHelpers/server";
23-
import { rest } from "msw";
2424

2525
const nameLabelText = "Workspace Name";
2626
const createWorkspaceText = "Create Workspace";
@@ -185,6 +185,67 @@ describe("CreateWorkspacePage", () => {
185185
expect(validationError).toBeInTheDocument();
186186
});
187187

188+
it("external auth authenticates and succeeds", async () => {
189+
jest
190+
.spyOn(API, "getWorkspaceQuota")
191+
.mockResolvedValueOnce(MockWorkspaceQuota);
192+
jest
193+
.spyOn(API, "getUsers")
194+
.mockResolvedValueOnce({ users: [MockUser], count: 1 });
195+
jest.spyOn(API, "createWorkspace").mockResolvedValueOnce(MockWorkspace);
196+
jest
197+
.spyOn(API, "getTemplateVersionExternalAuth")
198+
.mockResolvedValue([MockTemplateVersionExternalAuthGithub]);
199+
200+
renderCreateWorkspacePage();
201+
await waitForLoaderToBeRemoved();
202+
203+
const nameField = await screen.findByLabelText(nameLabelText);
204+
// have to use fireEvent b/c userEvent isn't cleaning up properly between tests
205+
fireEvent.change(nameField, {
206+
target: { value: "test" },
207+
});
208+
209+
const githubButton = await screen.findByText("Login with GitHub");
210+
await userEvent.click(githubButton);
211+
212+
jest
213+
.spyOn(API, "getTemplateVersionExternalAuth")
214+
.mockResolvedValue([MockTemplateVersionExternalAuthGithubAuthenticated]);
215+
216+
await screen.findByText(
217+
"Authenticated with GitHub",
218+
{},
219+
{ interval: 500, timeout: 5000 },
220+
);
221+
222+
const submitButton = screen.getByText(createWorkspaceText);
223+
await userEvent.click(submitButton);
224+
225+
await waitFor(() =>
226+
expect(API.createWorkspace).toBeCalledWith(
227+
MockUser.organization_ids[0],
228+
MockUser.id,
229+
expect.objectContaining({
230+
...MockWorkspaceRequest,
231+
}),
232+
),
233+
);
234+
});
235+
236+
it("external auth errors if unauthenticated", async () => {
237+
jest
238+
.spyOn(API, "getTemplateVersionExternalAuth")
239+
.mockResolvedValueOnce([MockTemplateVersionExternalAuthGithub]);
240+
241+
renderCreateWorkspacePage();
242+
await waitForLoaderToBeRemoved();
243+
244+
await screen.findByText(
245+
"To create a workspace using the selected template, please ensure you are authenticated with all the external providers listed below.",
246+
);
247+
});
248+
188249
it("auto create a workspace if uses mode=auto", async () => {
189250
const param = "first_parameter";
190251
const paramValue = "It works!";
@@ -259,46 +320,4 @@ describe("CreateWorkspacePage", () => {
259320
expect(warningMessage).toHaveTextContent(Language.duplicationWarning);
260321
expect(nameInput).toHaveValue(`${MockWorkspace.name}-copy`);
261322
});
262-
263-
it("displays the form after connecting to all the external services", async () => {
264-
jest.spyOn(window, "open").mockImplementation(() => null);
265-
const user = userEvent.setup();
266-
const notAuthenticatedExternalAuth = {
267-
...MockTemplateVersionExternalAuthGithub,
268-
authenticated: false,
269-
};
270-
server.use(
271-
rest.get(
272-
"/api/v2/templateversions/:versionId/external-auth",
273-
(req, res, ctx) => {
274-
return res(ctx.json([notAuthenticatedExternalAuth]));
275-
},
276-
),
277-
);
278-
renderCreateWorkspacePage();
279-
280-
await screen.findByText("External authentication");
281-
expect(screen.queryByRole("form")).not.toBeInTheDocument();
282-
283-
const connectButton = screen.getByRole("button", {
284-
name: /connect/i,
285-
});
286-
server.use(
287-
rest.get(
288-
"/api/v2/templateversions/:versionId/external-auth",
289-
(req, res, ctx) => {
290-
const authenticatedExternalAuth = {
291-
...MockTemplateVersionExternalAuthGithub,
292-
authenticated: true,
293-
};
294-
return res(ctx.json([authenticatedExternalAuth]));
295-
},
296-
),
297-
);
298-
await user.click(connectButton);
299-
// TODO: Consider improving the timeout by simulating react-query polling.
300-
// Current implementation could not achieve this, further research is
301-
// needed.
302-
await screen.findByRole("form", undefined, { timeout: 10_000 });
303-
});
304323
});

site/src/pages/CreateWorkspacePage/CreateWorkspacePageView.stories.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ export const Parameters: Story = {
108108
},
109109
};
110110

111-
export const RequiresExternalAuth: Story = {
111+
export const ExternalAuth: Story = {
112112
args: {
113113
externalAuth: [
114114
{

0 commit comments

Comments
 (0)