@@ -243,7 +243,41 @@ test('with disk name already taken', async ({ page }) => {
243243 await page . fill ( 'input[name=bootDiskName]' , 'disk-1' )
244244
245245 await page . getByRole ( 'button' , { name : 'Create instance' } ) . click ( )
246- await expectVisible ( page , [ 'text=Disk name already exists' ] )
246+ await expect ( page . getByText ( 'Name is already in use' ) . first ( ) ) . toBeVisible ( )
247+ } )
248+
249+ test ( 'can’t create a disk with a name that collides with the boot disk name' , async ( {
250+ page,
251+ } ) => {
252+ // Set up the instance and name the boot disk "disk-11"
253+ await page . goto ( '/projects/mock-project/instances-new' )
254+ await page . fill ( 'input[name=name]' , 'another-instance' )
255+ await selectAProjectImage ( page , 'image-1' )
256+ await page . fill ( 'input[name=bootDiskName]' , 'disk-11' )
257+
258+ // Attempt to create a disk with the same name
259+ await page . getByRole ( 'button' , { name : 'Create new disk' } ) . click ( )
260+ const dialog = page . getByRole ( 'dialog' )
261+ await dialog . getByRole ( 'textbox' , { name : 'name' } ) . fill ( 'disk-11' )
262+ await dialog . getByRole ( 'button' , { name : 'Create disk' } ) . click ( )
263+ // Expect to see an error message
264+ await expect ( dialog . getByText ( 'Name is already in use' ) ) . toBeVisible ( )
265+ // Change the disk name to something else
266+ await dialog . getByRole ( 'textbox' , { name : 'name' } ) . fill ( 'disk-12' )
267+ await dialog . getByRole ( 'button' , { name : 'Create disk' } ) . click ( )
268+ // The disk has been "created" (is in the list of Additional Disks)
269+ await expectVisible ( page , [ 'text=disk-12' ] )
270+ // Create the instance
271+ await page . getByRole ( 'button' , { name : 'Create instance' } ) . click ( )
272+ await expect ( page ) . toHaveURL ( '/projects/mock-project/instances/another-instance/storage' )
273+
274+ // Find the Boot Disk table and verify that disk-11 is there
275+ const bootDiskTable = page . getByRole ( 'table' , { name : 'Boot disk' } )
276+ await expect ( bootDiskTable . getByRole ( 'cell' , { name : 'disk-11' } ) ) . toBeVisible ( )
277+
278+ // Find the Other Disks table and verify that disk-12 is there
279+ const otherDisksTable = page . getByRole ( 'table' , { name : 'Other disks' } )
280+ await expect ( otherDisksTable . getByRole ( 'cell' , { name : 'disk-12' } ) ) . toBeVisible ( )
247281} )
248282
249283test ( 'add ssh key from instance create form' , async ( { page } ) => {
@@ -510,13 +544,28 @@ test('create instance with additional disks', async ({ page }) => {
510544 await page . getByRole ( 'button' , { name : 'Create new disk' } ) . click ( )
511545
512546 const createForm = page . getByRole ( 'dialog' , { name : 'Create disk' } )
513- await createForm . getByRole ( 'textbox' , { name : 'Name' , exact : true } ) . fill ( 'new-disk-1' )
547+
548+ // verify that an existing name can't be used
549+ await createForm . getByRole ( 'textbox' , { name : 'Name' , exact : true } ) . fill ( 'disk-6' )
514550 await createForm . getByRole ( 'textbox' , { name : 'Size (GiB)' } ) . fill ( '5' )
515551 await createForm . getByRole ( 'button' , { name : 'Create disk' } ) . click ( )
552+ await expect ( createForm . getByText ( 'Name is already in use' ) ) . toBeVisible ( )
553+
554+ // rename the disk to one that's allowed
555+ await createForm . getByRole ( 'textbox' , { name : 'Name' , exact : true } ) . fill ( 'new-disk-1' )
556+ await createForm . getByRole ( 'button' , { name : 'Create disk' } ) . click ( )
516557
517558 const disksTable = page . getByRole ( 'table' , { name : 'Disks' } )
559+ await expect ( disksTable . getByText ( 'disk-6' ) ) . toBeHidden ( )
518560 await expectRowVisible ( disksTable , { Name : 'new-disk-1' , Type : 'create' , Size : '5GiB' } )
519561
562+ // now that name is taken too, so disk create disallows it
563+ await page . getByRole ( 'button' , { name : 'Create new disk' } ) . click ( )
564+ await createForm . getByRole ( 'textbox' , { name : 'Name' , exact : true } ) . fill ( 'new-disk-1' )
565+ await createForm . getByRole ( 'button' , { name : 'Create disk' } ) . click ( )
566+ await expect ( createForm . getByText ( 'Name is already in use' ) ) . toBeVisible ( )
567+ await createForm . getByRole ( 'button' , { name : 'Cancel' } ) . click ( )
568+
520569 // Attach an existing disk
521570 await page . getByRole ( 'button' , { name : 'Attach existing disk' } ) . click ( )
522571 await selectOption ( page , 'Disk name' , 'disk-3' )
0 commit comments