@@ -6,21 +6,21 @@ import {
6
6
MockUser ,
7
7
MockWorkspace ,
8
8
MockWorkspaceQuota ,
9
- MockWorkspaceRequest ,
10
9
MockWorkspaceRichParametersRequest ,
11
10
MockTemplateVersionParameter1 ,
12
11
MockTemplateVersionParameter2 ,
13
12
MockTemplateVersionParameter3 ,
14
13
MockTemplateVersionExternalAuthGithub ,
15
14
MockOrganization ,
16
- MockTemplateVersionExternalAuthGithubAuthenticated ,
17
15
} from "testHelpers/entities" ;
18
16
import {
19
17
renderWithAuth ,
20
18
waitForLoaderToBeRemoved ,
21
19
} from "testHelpers/renderHelpers" ;
22
20
import CreateWorkspacePage from "./CreateWorkspacePage" ;
23
21
import { Language } from "./CreateWorkspacePageView" ;
22
+ import { server } from "testHelpers/server" ;
23
+ import { rest } from "msw" ;
24
24
25
25
const nameLabelText = "Workspace Name" ;
26
26
const createWorkspaceText = "Create Workspace" ;
@@ -157,63 +157,6 @@ describe("CreateWorkspacePage", () => {
157
157
expect ( validationError ) . toBeInTheDocument ( ) ;
158
158
} ) ;
159
159
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
- await waitForLoaderToBeRemoved ( ) ;
174
-
175
- const nameField = await screen . 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
- const githubButton = await screen . findByText ( "Login with GitHub" ) ;
182
- await userEvent . click ( githubButton ) ;
183
-
184
- jest
185
- . spyOn ( API , "getTemplateVersionExternalAuth" )
186
- . mockResolvedValue ( [ MockTemplateVersionExternalAuthGithubAuthenticated ] ) ;
187
-
188
- await screen . findByText ( "Authenticated with GitHub" ) ;
189
-
190
- const submitButton = screen . getByText ( createWorkspaceText ) ;
191
- await userEvent . click ( submitButton ) ;
192
-
193
- await waitFor ( ( ) =>
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
- await waitForLoaderToBeRemoved ( ) ;
211
-
212
- await screen . 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
-
217
160
it ( "auto create a workspace if uses mode=auto" , async ( ) => {
218
161
const param = "first_parameter" ;
219
162
const paramValue = "It works!" ;
@@ -284,4 +227,46 @@ describe("CreateWorkspacePage", () => {
284
227
expect ( warningMessage ) . toHaveTextContent ( Language . duplicationWarning ) ;
285
228
expect ( nameInput ) . toHaveValue ( `${ MockWorkspace . name } -copy` ) ;
286
229
} ) ;
230
+
231
+ it ( "displays the form after connecting to all the external services" , async ( ) => {
232
+ jest . spyOn ( window , "open" ) . mockImplementation ( ( ) => null ) ;
233
+ const user = userEvent . setup ( ) ;
234
+ const notAuthenticatedExternalAuth = {
235
+ ...MockTemplateVersionExternalAuthGithub ,
236
+ authenticated : false ,
237
+ } ;
238
+ server . use (
239
+ rest . get (
240
+ "/api/v2/templateversions/:versionId/external-auth" ,
241
+ ( req , res , ctx ) => {
242
+ return res ( ctx . json ( [ notAuthenticatedExternalAuth ] ) ) ;
243
+ } ,
244
+ ) ,
245
+ ) ;
246
+ renderCreateWorkspacePage ( ) ;
247
+
248
+ await screen . findByText ( "External authentication" ) ;
249
+ expect ( screen . queryByRole ( "form" ) ) . not . toBeInTheDocument ( ) ;
250
+
251
+ const connectButton = screen . getByRole ( "button" , {
252
+ name : / c o n n e c t / i,
253
+ } ) ;
254
+ server . use (
255
+ rest . get (
256
+ "/api/v2/templateversions/:versionId/external-auth" ,
257
+ ( req , res , ctx ) => {
258
+ const authenticatedExternalAuth = {
259
+ ...MockTemplateVersionExternalAuthGithub ,
260
+ authenticated : true ,
261
+ } ;
262
+ return res ( ctx . json ( [ authenticatedExternalAuth ] ) ) ;
263
+ } ,
264
+ ) ,
265
+ ) ;
266
+ await user . 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
+ await screen . findByRole ( "form" , undefined , { timeout : 10_000 } ) ;
271
+ } ) ;
287
272
} ) ;
0 commit comments