1
1
import { screen , waitFor , within } from "@testing-library/react" ;
2
2
import userEvent from "@testing-library/user-event" ;
3
3
import * as apiModule from "api/api" ;
4
+ import { ParameterValidationError } from "api/errors" ;
4
5
import type { TemplateVersionParameter , Workspace } from "api/typesGenerated" ;
5
6
import MockServerSocket from "jest-websocket-mock" ;
6
7
import {
@@ -282,11 +283,9 @@ describe("WorkspacePage", () => {
282
283
} ) ;
283
284
284
285
it ( "requests an update when the user presses Update" , async ( ) => {
285
- // Mocks
286
286
jest
287
287
. spyOn ( API , "getWorkspaceByOwnerAndName" )
288
288
. mockResolvedValueOnce ( MockOutdatedWorkspace ) ;
289
-
290
289
const updateWorkspaceMock = jest
291
290
. spyOn ( API , "updateWorkspace" )
292
291
. mockResolvedValueOnce ( MockWorkspaceBuild ) ;
@@ -306,73 +305,37 @@ describe("WorkspacePage", () => {
306
305
} ) ;
307
306
} ) ;
308
307
309
- it ( "updates the parameters when they are missing during update" , async ( ) => {
310
- // Mocks
308
+ it ( "requires invalid parameters to be updated" , async ( ) => {
311
309
jest
312
310
. spyOn ( API , "getWorkspaceByOwnerAndName" )
313
311
. mockResolvedValueOnce ( MockOutdatedWorkspace ) ;
314
- const updateWorkspaceSpy = jest
312
+ const updateWorkspaceMock = jest
315
313
. spyOn ( API , "updateWorkspace" )
316
314
. mockRejectedValueOnce (
317
- new MissingBuildParameters (
318
- [ MockTemplateVersionParameter1 , MockTemplateVersionParameter2 ] ,
315
+ new ParameterValidationError (
319
316
MockOutdatedWorkspace . template_active_version_id ,
317
+ [
318
+ {
319
+ field : MockTemplateVersionParameter1 . name ,
320
+ detail :
321
+ "Required parameter not provided; parameter value is null" ,
322
+ } ,
323
+ ] ,
320
324
) ,
321
325
) ;
322
326
323
- // Render
324
327
await renderWorkspacePage ( MockWorkspace ) ;
325
328
326
- // Actions
329
+ // Start workspace update
327
330
const user = userEvent . setup ( ) ;
328
331
await user . click ( screen . getByTestId ( "workspace-update-button" ) ) ;
329
332
const confirmButton = await screen . findByTestId ( "confirm-button" ) ;
330
333
await user . click ( confirmButton ) ;
331
334
332
- // The update was called
333
- await waitFor ( ( ) => {
334
- expect ( API . updateWorkspace ) . toBeCalled ( ) ;
335
- updateWorkspaceSpy . mockClear ( ) ;
336
- } ) ;
337
-
338
- // After trying to update, a new dialog asking for missed parameters should
339
- // be displayed and filled
340
- const dialog = await waitFor ( ( ) => screen . findByTestId ( "dialog" ) , {
341
- timeout : 2000 ,
342
- } ) ;
343
- const firstParameterInput = within ( dialog ) . getByLabelText (
344
- MockTemplateVersionParameter1 . name ,
345
- { exact : false } ,
346
- ) ;
347
- await user . clear ( firstParameterInput ) ;
348
- await user . type ( firstParameterInput , "some-value" ) ;
349
- const secondParameterInput = within ( dialog ) . getByLabelText (
350
- MockTemplateVersionParameter2 . name ,
351
- { exact : false } ,
352
- ) ;
353
- await user . clear ( secondParameterInput ) ;
354
- await user . type ( secondParameterInput , "2" ) ;
355
- await user . click (
356
- within ( dialog ) . getByRole ( "button" , { name : / u p d a t e p a r a m e t e r s / i } ) ,
357
- ) ;
358
-
359
- // Check if the update was called using the values from the form
360
- await waitFor ( ( ) => {
361
- expect ( API . updateWorkspace ) . toHaveBeenCalledWith (
362
- MockOutdatedWorkspace ,
363
- [
364
- {
365
- name : MockTemplateVersionParameter1 . name ,
366
- value : "some-value" ,
367
- } ,
368
- {
369
- name : MockTemplateVersionParameter2 . name ,
370
- value : "2" ,
371
- } ,
372
- ] ,
373
- false ,
374
- ) ;
375
- } ) ;
335
+ // Dialog should warn the parameters need to be updated
336
+ const dialog = await screen . findByTestId ( "dialog" ) ;
337
+ await within ( dialog ) . findByText ( "Update workspace parameters" ) ;
338
+ await screen . findByText ( / g o t o t h e w o r k s p a c e p a r a m e t e r s p a g e t o r e v i e w / ) ;
376
339
} ) ;
377
340
378
341
it ( "restart the workspace with one time parameters when having the confirmation dialog" , async ( ) => {
0 commit comments