This commit is contained in:
		@ -6,6 +6,205 @@ test.afterEach(async ({ page }, testInfo) => {
 | 
			
		||||
  await tearDown(page, testInfo)
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
test(
 | 
			
		||||
  'CRUD projects',
 | 
			
		||||
  { tag: '@electron' },
 | 
			
		||||
  async ({ browserName }, testInfo) => {
 | 
			
		||||
    test.skip(
 | 
			
		||||
      browserName === 'webkit',
 | 
			
		||||
      'Skip on Safari because `window.tearDown` does not work'
 | 
			
		||||
    )
 | 
			
		||||
    const { electronApp, page } = await setupElectron({
 | 
			
		||||
      testInfo,
 | 
			
		||||
      folderSetupFn: async (dir) => {
 | 
			
		||||
        await fsp.mkdir(`${dir}/router-template-slate`, { recursive: true })
 | 
			
		||||
        await fsp.copyFile(
 | 
			
		||||
          'src/wasm-lib/tests/executor/inputs/router-template-slate.kcl',
 | 
			
		||||
          `${dir}/router-template-slate/main.kcl`
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        await fsp.mkdir(`${dir}/bracket`, { recursive: true })
 | 
			
		||||
        await fsp.copyFile(
 | 
			
		||||
          'src/wasm-lib/tests/executor/inputs/focusrite_scarlett_mounting_braket.kcl',
 | 
			
		||||
          `${dir}/bracket/main.kcl`
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        await fsp.mkdir(`${dir}/lego`, { recursive: true })
 | 
			
		||||
        await fsp.copyFile(
 | 
			
		||||
          'src/wasm-lib/tests/executor/inputs/lego.kcl',
 | 
			
		||||
          `${dir}/lego/main.kcl`
 | 
			
		||||
        )
 | 
			
		||||
      },
 | 
			
		||||
    })
 | 
			
		||||
    await page.goto('http://localhost:3000/')
 | 
			
		||||
    await page.setViewportSize({ width: 1200, height: 500 })
 | 
			
		||||
 | 
			
		||||
    page.on('console', console.log)
 | 
			
		||||
 | 
			
		||||
    await page.waitForTimeout(1_000)
 | 
			
		||||
 | 
			
		||||
    await test.step('rename a project clicking buttons checking left and right arrow does not impact the text', async () => {
 | 
			
		||||
      const routerTemplate = page.getByText('router-template-slate')
 | 
			
		||||
 | 
			
		||||
      await routerTemplate.hover()
 | 
			
		||||
      await routerTemplate.focus()
 | 
			
		||||
 | 
			
		||||
      await expect(page.getByLabel('sketch').last()).toBeVisible()
 | 
			
		||||
      await page.getByLabel('sketch').last().click()
 | 
			
		||||
 | 
			
		||||
      const selectedText = await page.evaluate(() => {
 | 
			
		||||
        const selection = window.getSelection()
 | 
			
		||||
        return selection ? selection.toString() : ''
 | 
			
		||||
      })
 | 
			
		||||
 | 
			
		||||
      expect(selectedText).toBe('router-template-slate')
 | 
			
		||||
 | 
			
		||||
      // type "updated project name"
 | 
			
		||||
      await page.keyboard.press('Backspace')
 | 
			
		||||
      await page.keyboard.type('updated project name')
 | 
			
		||||
 | 
			
		||||
      for (let i = 0; i < 10; i++) {
 | 
			
		||||
        await page.keyboard.press('ArrowRight')
 | 
			
		||||
      }
 | 
			
		||||
      for (let i = 0; i < 30; i++) {
 | 
			
		||||
        await page.keyboard.press('ArrowLeft')
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      await page.getByLabel('checkmark').last().click()
 | 
			
		||||
 | 
			
		||||
      await expect(page.getByText('Successfully renamed')).toBeVisible()
 | 
			
		||||
      await expect(page.getByText('Successfully renamed')).not.toBeVisible()
 | 
			
		||||
      await expect(page.getByText('updated project name')).toBeVisible()
 | 
			
		||||
    })
 | 
			
		||||
 | 
			
		||||
    await test.step('update a project by hitting enter', async () => {
 | 
			
		||||
      const project = page.getByText('updated project name')
 | 
			
		||||
 | 
			
		||||
      await project.hover()
 | 
			
		||||
      await project.focus()
 | 
			
		||||
 | 
			
		||||
      await expect(page.getByLabel('sketch').last()).toBeVisible()
 | 
			
		||||
      await page.getByLabel('sketch').last().click()
 | 
			
		||||
 | 
			
		||||
      const selectedText = await page.evaluate(() => {
 | 
			
		||||
        const selection = window.getSelection()
 | 
			
		||||
        return selection ? selection.toString() : ''
 | 
			
		||||
      })
 | 
			
		||||
 | 
			
		||||
      expect(selectedText).toBe('updated project name')
 | 
			
		||||
 | 
			
		||||
      // type "updated project name"
 | 
			
		||||
      await page.keyboard.press('Backspace')
 | 
			
		||||
      await page.keyboard.type('updated name again')
 | 
			
		||||
 | 
			
		||||
      await page.keyboard.press('Enter')
 | 
			
		||||
 | 
			
		||||
      await expect(page.getByText('Successfully renamed')).toBeVisible()
 | 
			
		||||
      await expect(page.getByText('Successfully renamed')).not.toBeVisible()
 | 
			
		||||
 | 
			
		||||
      await expect(page.getByText('updated name again')).toBeVisible()
 | 
			
		||||
    })
 | 
			
		||||
 | 
			
		||||
    await test.step('Cancel and edit by clicking the x button', async () => {
 | 
			
		||||
      const project = page.getByText('updated name again')
 | 
			
		||||
 | 
			
		||||
      await project.hover()
 | 
			
		||||
      await project.focus()
 | 
			
		||||
 | 
			
		||||
      await expect(page.getByLabel('sketch').last()).toBeVisible()
 | 
			
		||||
      await page.getByLabel('sketch').last().click()
 | 
			
		||||
 | 
			
		||||
      const selectedText = await page.evaluate(() => {
 | 
			
		||||
        const selection = window.getSelection()
 | 
			
		||||
        return selection ? selection.toString() : ''
 | 
			
		||||
      })
 | 
			
		||||
 | 
			
		||||
      expect(selectedText).toBe('updated name again')
 | 
			
		||||
 | 
			
		||||
      await page.keyboard.press('Backspace')
 | 
			
		||||
      await page.keyboard.type('dismiss this text')
 | 
			
		||||
 | 
			
		||||
      await page.getByLabel('close').last().click()
 | 
			
		||||
 | 
			
		||||
      await expect(page.getByText('updated name again')).toBeVisible()
 | 
			
		||||
    })
 | 
			
		||||
 | 
			
		||||
    await test.step('Cancel and edit by pressing esc', async () => {
 | 
			
		||||
      const project = page.getByText('updated name again')
 | 
			
		||||
 | 
			
		||||
      await project.hover()
 | 
			
		||||
      await project.focus()
 | 
			
		||||
 | 
			
		||||
      await expect(page.getByLabel('sketch').last()).toBeVisible()
 | 
			
		||||
      await page.getByLabel('sketch').last().click()
 | 
			
		||||
 | 
			
		||||
      const selectedText = await page.evaluate(() => {
 | 
			
		||||
        const selection = window.getSelection()
 | 
			
		||||
        return selection ? selection.toString() : ''
 | 
			
		||||
      })
 | 
			
		||||
 | 
			
		||||
      expect(selectedText).toBe('updated name again')
 | 
			
		||||
 | 
			
		||||
      await page.keyboard.press('Backspace')
 | 
			
		||||
      await page.keyboard.type('dismiss this text')
 | 
			
		||||
 | 
			
		||||
      await page.keyboard.press('Escape')
 | 
			
		||||
 | 
			
		||||
      await expect(page.getByText('updated name again')).toBeVisible()
 | 
			
		||||
    })
 | 
			
		||||
 | 
			
		||||
    await test.step('delete a project by clicking the trash button', async () => {
 | 
			
		||||
      const project = page.getByText('updated name again')
 | 
			
		||||
 | 
			
		||||
      await project.hover()
 | 
			
		||||
      await project.focus()
 | 
			
		||||
 | 
			
		||||
      await expect(page.getByLabel('trash').last()).toBeVisible()
 | 
			
		||||
      await page.getByLabel('trash').last().click()
 | 
			
		||||
 | 
			
		||||
      await expect(page.getByText('This will permanently delete')).toBeVisible()
 | 
			
		||||
 | 
			
		||||
      await page.getByTestId('delete-confirmation').click()
 | 
			
		||||
 | 
			
		||||
      await expect(page.getByText('Successfully deleted')).toBeVisible()
 | 
			
		||||
      await expect(page.getByText('Successfully deleted')).not.toBeVisible()
 | 
			
		||||
 | 
			
		||||
      await expect(page.getByText('updated name again')).not.toBeVisible()
 | 
			
		||||
    })
 | 
			
		||||
 | 
			
		||||
    await test.step('rename a project to an empty string should make the field complain', async () => {
 | 
			
		||||
      const routerTemplate = page.getByText('bracket')
 | 
			
		||||
 | 
			
		||||
      await routerTemplate.hover()
 | 
			
		||||
      await routerTemplate.focus()
 | 
			
		||||
 | 
			
		||||
      await expect(page.getByLabel('sketch').last()).toBeVisible()
 | 
			
		||||
      await page.getByLabel('sketch').last().click()
 | 
			
		||||
 | 
			
		||||
      const selectedText = await page.evaluate(() => {
 | 
			
		||||
        const selection = window.getSelection()
 | 
			
		||||
        return selection ? selection.toString() : ''
 | 
			
		||||
      })
 | 
			
		||||
 | 
			
		||||
      expect(selectedText).toBe('bracket')
 | 
			
		||||
 | 
			
		||||
      // type "updated project name"
 | 
			
		||||
      await page.keyboard.press('Backspace')
 | 
			
		||||
 | 
			
		||||
      await page.keyboard.press('Enter')
 | 
			
		||||
      await page.waitForTimeout(100)
 | 
			
		||||
      await page.keyboard.press('Enter')
 | 
			
		||||
      await page.waitForTimeout(100)
 | 
			
		||||
      await page.keyboard.press('Escape')
 | 
			
		||||
 | 
			
		||||
      // expect the name not to have changed
 | 
			
		||||
      await expect(page.getByText('bracket')).toBeVisible()
 | 
			
		||||
    })
 | 
			
		||||
 | 
			
		||||
    await electronApp.close()
 | 
			
		||||
  }
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
test(
 | 
			
		||||
  'pressing "delete" on home screen should do nothing',
 | 
			
		||||
  { tag: '@electron' },
 | 
			
		||||
 | 
			
		||||
@ -32,6 +32,7 @@ export function DeleteConfirmationDialog({
 | 
			
		||||
                iconClassName: '!text-destroy-80 dark:!text-destroy-20',
 | 
			
		||||
              }}
 | 
			
		||||
              className="hover:border-destroy-40 dark:hover:border-destroy-40 hover:bg-destroy-10/20 dark:hover:bg-destroy-80/20"
 | 
			
		||||
              data-testid="delete-confirmation"
 | 
			
		||||
            >
 | 
			
		||||
              Delete
 | 
			
		||||
            </ActionButton>
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user