playlist-flow.spec.ts 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  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 selection
  21. await page.waitForTimeout(500)
  22. // Find and click run button
  23. const runButton = page.getByRole('button', { name: /run|play|start/i }).first()
  24. await expect(runButton).toBeVisible()
  25. await runButton.click()
  26. // Verify playlist is running
  27. await page.waitForTimeout(500)
  28. const status = getMockStatus()
  29. expect(status.is_running).toBe(true)
  30. expect(status.playlist_mode).toBe(true)
  31. expect(status.playlist_name).toBe('default')
  32. })
  33. test('can navigate between browse and playlists', async ({ page }) => {
  34. // Start on browse
  35. await page.goto('/')
  36. await expect(page.getByText('star.thr')).toBeVisible()
  37. // Navigate to playlists via nav
  38. await page.getByRole('link', { name: /playlists/i }).click()
  39. await expect(page.getByText('default')).toBeVisible()
  40. // Navigate back to browse
  41. await page.getByRole('link', { name: /browse/i }).click()
  42. await expect(page.getByText('star.thr')).toBeVisible()
  43. })
  44. })