46 lines
2.7 KiB
TypeScript
46 lines
2.7 KiB
TypeScript
import { expect, test } from '@playwright/test'
|
|
|
|
test('portfolio workflow covers navigation, remediation, a scan lifecycle and export', async ({ page }) => {
|
|
await page.goto('/')
|
|
await expect(page.getByRole('heading', { name: /portfolio signal/i })).toBeVisible()
|
|
await expect(page.getByRole('heading', { name: 'Remediation Center' })).toBeVisible()
|
|
await expect(page.getByText('A deterministic package-manager lockfile was not found for this workspace.')).toBeVisible()
|
|
await page.locator('.remediation-center').getByRole('button', { name: /Jens\/Alpha/ }).click()
|
|
await expect(page.getByRole('heading', { name: 'Jens/Alpha' })).toBeVisible()
|
|
await page.getByRole('link', { name: 'Dashboard', exact: true }).click()
|
|
|
|
await page.getByRole('button', { name: /open repository explorer/i }).click()
|
|
await expect(page.getByText('25 matching 25 repositories')).toBeVisible()
|
|
await page.getByRole('button', { name: 'Visual grid' }).click()
|
|
await page.getByRole('button', { name: 'Pin Jens/Alpha' }).click()
|
|
await expect(page.getByRole('button', { name: 'Remove Jens/Alpha from pinned repositories' })).toBeVisible()
|
|
await page.getByRole('button', { name: 'Table' }).click()
|
|
await expect(page.getByText('Page 1 / 2')).toBeVisible()
|
|
await page.getByRole('button', { name: 'Next' }).click()
|
|
await expect(page.getByText('Page 2 / 2')).toBeVisible()
|
|
await page.getByLabel('Filter by readiness').selectOption('blocked')
|
|
await expect(page.getByText('1 matching 25 repositories')).toBeVisible()
|
|
await page.getByRole('link', { name: 'Open Jens/Alpha' }).click()
|
|
await expect(page.getByRole('heading', { name: 'Jens/Alpha' })).toBeVisible()
|
|
|
|
await page.getByRole('link', { name: /findings/i }).click()
|
|
await expect(page.getByText('No lockfile was retained for the declared dependencies.')).toBeVisible()
|
|
await page.getByRole('link', { name: /architecture/i }).click()
|
|
await expect(page.getByText('Local import and dependency topology')).toBeVisible()
|
|
await page.getByRole('link', { name: /history/i }).click()
|
|
await expect(page.getByText('Repository health over time')).toBeVisible()
|
|
|
|
await page.getByRole('button', { name: 'Scan now' }).click()
|
|
await expect(page.getByText('Repository analysis completed.')).toBeVisible({ timeout: 10_000 })
|
|
await page.getByText('Reports').click()
|
|
const download = page.waitForEvent('download')
|
|
await page.getByRole('button', { name: 'Export JSON' }).click()
|
|
await expect(download).resolves.toBeTruthy()
|
|
|
|
await page.keyboard.press('Control+k')
|
|
await page.getByPlaceholder('Search repositories…').fill('Beta')
|
|
await page.keyboard.press('ArrowDown')
|
|
await page.keyboard.press('Enter')
|
|
await expect(page.getByRole('heading', { name: 'Jens/Beta', exact: true })).toBeVisible()
|
|
})
|