Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit6145da8

Browse files
refactor(site): verify external auth before display ws form (#11777)
1 parent5cbb76b commit6145da8

11 files changed

+533
-377
lines changed

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

Lines changed: 44 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,21 @@ import {
66
MockUser,
77
MockWorkspace,
88
MockWorkspaceQuota,
9-
MockWorkspaceRequest,
109
MockWorkspaceRichParametersRequest,
1110
MockTemplateVersionParameter1,
1211
MockTemplateVersionParameter2,
1312
MockTemplateVersionParameter3,
1413
MockTemplateVersionExternalAuthGithub,
1514
MockOrganization,
16-
MockTemplateVersionExternalAuthGithubAuthenticated,
1715
}from"testHelpers/entities";
1816
import{
1917
renderWithAuth,
2018
waitForLoaderToBeRemoved,
2119
}from"testHelpers/renderHelpers";
2220
importCreateWorkspacePagefrom"./CreateWorkspacePage";
2321
import{Language}from"./CreateWorkspacePageView";
22+
import{server}from"testHelpers/server";
23+
import{rest}from"msw";
2424

2525
constnameLabelText="Workspace Name";
2626
constcreateWorkspaceText="Create Workspace";
@@ -157,63 +157,6 @@ describe("CreateWorkspacePage", () => {
157157
expect(validationError).toBeInTheDocument();
158158
});
159159

160-
it("external auth authenticates and succeeds",async()=>{
161-
jest
162-
.spyOn(API,"getWorkspaceQuota")
163-
.mockResolvedValueOnce(MockWorkspaceQuota);
164-
jest
165-
.spyOn(API,"getUsers")
166-
.mockResolvedValueOnce({users:[MockUser],count:1});
167-
jest.spyOn(API,"createWorkspace").mockResolvedValueOnce(MockWorkspace);
168-
jest
169-
.spyOn(API,"getTemplateVersionExternalAuth")
170-
.mockResolvedValue([MockTemplateVersionExternalAuthGithub]);
171-
172-
renderCreateWorkspacePage();
173-
awaitwaitForLoaderToBeRemoved();
174-
175-
constnameField=awaitscreen.findByLabelText(nameLabelText);
176-
// have to use fireEvent b/c userEvent isn't cleaning up properly between tests
177-
fireEvent.change(nameField,{
178-
target:{value:"test"},
179-
});
180-
181-
constgithubButton=awaitscreen.findByText("Login with GitHub");
182-
awaituserEvent.click(githubButton);
183-
184-
jest
185-
.spyOn(API,"getTemplateVersionExternalAuth")
186-
.mockResolvedValue([MockTemplateVersionExternalAuthGithubAuthenticated]);
187-
188-
awaitscreen.findByText("Authenticated with GitHub");
189-
190-
constsubmitButton=screen.getByText(createWorkspaceText);
191-
awaituserEvent.click(submitButton);
192-
193-
awaitwaitFor(()=>
194-
expect(API.createWorkspace).toBeCalledWith(
195-
MockUser.organization_ids[0],
196-
MockUser.id,
197-
expect.objectContaining({
198-
...MockWorkspaceRequest,
199-
}),
200-
),
201-
);
202-
});
203-
204-
it("external auth: errors if unauthenticated",async()=>{
205-
jest
206-
.spyOn(API,"getTemplateVersionExternalAuth")
207-
.mockResolvedValueOnce([MockTemplateVersionExternalAuthGithub]);
208-
209-
renderCreateWorkspacePage();
210-
awaitwaitForLoaderToBeRemoved();
211-
212-
awaitscreen.findByText(
213-
"To create a workspace using the selected template, please ensure you are authenticated with all the external providers listed below.",
214-
);
215-
});
216-
217160
it("auto create a workspace if uses mode=auto",async()=>{
218161
constparam="first_parameter";
219162
constparamValue="It works!";
@@ -284,4 +227,46 @@ describe("CreateWorkspacePage", () => {
284227
expect(warningMessage).toHaveTextContent(Language.duplicationWarning);
285228
expect(nameInput).toHaveValue(`${MockWorkspace.name}-copy`);
286229
});
230+
231+
it("displays the form after connecting to all the external services",async()=>{
232+
jest.spyOn(window,"open").mockImplementation(()=>null);
233+
constuser=userEvent.setup();
234+
constnotAuthenticatedExternalAuth={
235+
...MockTemplateVersionExternalAuthGithub,
236+
authenticated:false,
237+
};
238+
server.use(
239+
rest.get(
240+
"/api/v2/templateversions/:versionId/external-auth",
241+
(req,res,ctx)=>{
242+
returnres(ctx.json([notAuthenticatedExternalAuth]));
243+
},
244+
),
245+
);
246+
renderCreateWorkspacePage();
247+
248+
awaitscreen.findByText("External authentication");
249+
expect(screen.queryByRole("form")).not.toBeInTheDocument();
250+
251+
constconnectButton=screen.getByRole("button",{
252+
name:/connect/i,
253+
});
254+
server.use(
255+
rest.get(
256+
"/api/v2/templateversions/:versionId/external-auth",
257+
(req,res,ctx)=>{
258+
constauthenticatedExternalAuth={
259+
...MockTemplateVersionExternalAuthGithub,
260+
authenticated:true,
261+
};
262+
returnres(ctx.json([authenticatedExternalAuth]));
263+
},
264+
),
265+
);
266+
awaituser.click(connectButton);
267+
// TODO: Consider improving the timeout by simulating react-query polling.
268+
// Current implementation could not achieve this, further research is
269+
// needed.
270+
awaitscreen.findByRole("form",undefined,{timeout:10_000});
271+
});
287272
});

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ export const Parameters: Story = {
8989
},
9090
};
9191

92-
exportconstExternalAuth:Story={
92+
exportconstRequiresExternalAuth:Story={
9393
args:{
9494
externalAuth:[
9595
{

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp