| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- import { test, expect } from '@playwright/test'
- import { setupApiMocks, resetMockStatus, getMockStatus } from './mocks/api'
- test.describe('Pattern Flow E2E', () => {
- test.beforeEach(async ({ page }) => {
- resetMockStatus()
- await setupApiMocks(page)
- })
- test('displays pattern list on browse page', async ({ page }) => {
- await page.goto('/')
- // Wait for patterns to load
- await expect(page.getByText('star.thr')).toBeVisible()
- await expect(page.getByText('spiral.thr')).toBeVisible()
- await expect(page.getByText('wave.thr')).toBeVisible()
- })
- test('can select pattern to view details', async ({ page }) => {
- await page.goto('/')
- // Wait for patterns to load
- await expect(page.getByText('star.thr')).toBeVisible()
- // Click on pattern
- await page.getByText('star.thr').click()
- // Detail panel should open (Sheet component)
- // The sheet contains a "Play" button with exact text (not "Play Next")
- await expect(page.getByRole('button', { name: 'play_arrow Play' })).toBeVisible({ timeout: 5000 })
- })
- test('can run pattern and UI shows running state', async ({ page }) => {
- await page.goto('/')
- // Wait for patterns
- await expect(page.getByText('star.thr')).toBeVisible()
- // Click pattern to open detail
- await page.getByText('star.thr').click()
- // Wait for detail panel
- await page.waitForTimeout(500)
- // Find and click run button
- const runButton = page.getByRole('button', { name: /run|play/i }).first()
- await expect(runButton).toBeVisible()
- await runButton.click()
- // Verify API was called and status updated
- await page.waitForTimeout(500)
- const status = getMockStatus()
- expect(status.is_running).toBe(true)
- expect(status.current_file).toContain('star')
- })
- test('search filters patterns correctly', async ({ page }) => {
- await page.goto('/')
- // Wait for patterns
- await expect(page.getByText('star.thr')).toBeVisible()
- await expect(page.getByText('spiral.thr')).toBeVisible()
- // Type in search
- const searchInput = page.getByPlaceholder(/search/i)
- await searchInput.fill('spiral')
- // Only spiral should be visible
- await expect(page.getByText('spiral.thr')).toBeVisible()
- await expect(page.getByText('star.thr')).not.toBeVisible()
- })
- })
|