playlist-flow.spec.ts 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import { test, expect } from '@playwright/test'
  2. import { setupApiMocks, resetMockStatus, getMockStatus } from './mocks/api'
  3. test.describe('Playlist Flow E2E', () => {
  4. test.beforeEach(async ({ page }) => {
  5. resetMockStatus()
  6. await setupApiMocks(page)
  7. })
  8. test('navigates to playlists page and displays playlists', async ({ page }) => {
  9. await page.goto('/playlists')
  10. // Wait for playlists to load
  11. await expect(page.getByText('default')).toBeVisible()
  12. await expect(page.getByText('favorites')).toBeVisible()
  13. })
  14. test('can select and run a playlist', async ({ page }) => {
  15. await page.goto('/playlists')
  16. // Wait for playlists
  17. await expect(page.getByText('default')).toBeVisible()
  18. // Click playlist to select
  19. await page.getByText('default').click()
  20. // Wait for the playlist patterns to load
  21. // The Play button should become enabled once patterns are loaded
  22. await page.waitForTimeout(1000)
  23. // Find and click run button by its title attribute
  24. const runButton = page.locator('button[title="Run Playlist"]')
  25. await expect(runButton).toBeVisible({ timeout: 5000 })
  26. await runButton.click()
  27. // Verify playlist is running
  28. await page.waitForTimeout(500)
  29. const status = getMockStatus()
  30. expect(status.is_running).toBe(true)
  31. expect(status.playlist_mode).toBe(true)
  32. expect(status.playlist_name).toBe('default')
  33. })
  34. test('can navigate between browse and playlists', async ({ page }) => {
  35. // Start on browse
  36. await page.goto('/')
  37. await expect(page.getByText('star.thr')).toBeVisible()
  38. // Navigate to playlists via nav
  39. await page.getByRole('link', { name: /playlists/i }).click()
  40. await expect(page.getByText('default')).toBeVisible()
  41. // Navigate back to browse
  42. await page.getByRole('link', { name: /browse/i }).click()
  43. await expect(page.getByText('star.thr')).toBeVisible()
  44. })
  45. })