|
@@ -0,0 +1,56 @@
|
|
|
|
|
+import { test, expect } from '@playwright/test'
|
|
|
|
|
+import { setupApiMocks, resetMockStatus, getMockStatus } from './mocks/api'
|
|
|
|
|
+
|
|
|
|
|
+test.describe('Playlist Flow E2E', () => {
|
|
|
|
|
+ test.beforeEach(async ({ page }) => {
|
|
|
|
|
+ resetMockStatus()
|
|
|
|
|
+ await setupApiMocks(page)
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ test('navigates to playlists page and displays playlists', async ({ page }) => {
|
|
|
|
|
+ await page.goto('/playlists')
|
|
|
|
|
+
|
|
|
|
|
+ // Wait for playlists to load
|
|
|
|
|
+ await expect(page.getByText('default')).toBeVisible()
|
|
|
|
|
+ await expect(page.getByText('favorites')).toBeVisible()
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ test('can select and run a playlist', async ({ page }) => {
|
|
|
|
|
+ await page.goto('/playlists')
|
|
|
|
|
+
|
|
|
|
|
+ // Wait for playlists
|
|
|
|
|
+ await expect(page.getByText('default')).toBeVisible()
|
|
|
|
|
+
|
|
|
|
|
+ // Click playlist to select
|
|
|
|
|
+ await page.getByText('default').click()
|
|
|
|
|
+
|
|
|
|
|
+ // Wait for selection
|
|
|
|
|
+ await page.waitForTimeout(500)
|
|
|
|
|
+
|
|
|
|
|
+ // Find and click run button
|
|
|
|
|
+ const runButton = page.getByRole('button', { name: /run|play|start/i }).first()
|
|
|
|
|
+ await expect(runButton).toBeVisible()
|
|
|
|
|
+ await runButton.click()
|
|
|
|
|
+
|
|
|
|
|
+ // Verify playlist is running
|
|
|
|
|
+ await page.waitForTimeout(500)
|
|
|
|
|
+ const status = getMockStatus()
|
|
|
|
|
+ expect(status.is_running).toBe(true)
|
|
|
|
|
+ expect(status.playlist_mode).toBe(true)
|
|
|
|
|
+ expect(status.playlist_name).toBe('default')
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ test('can navigate between browse and playlists', async ({ page }) => {
|
|
|
|
|
+ // Start on browse
|
|
|
|
|
+ await page.goto('/')
|
|
|
|
|
+ await expect(page.getByText('star.thr')).toBeVisible()
|
|
|
|
|
+
|
|
|
|
|
+ // Navigate to playlists via nav
|
|
|
|
|
+ await page.getByRole('link', { name: /playlists/i }).click()
|
|
|
|
|
+ await expect(page.getByText('default')).toBeVisible()
|
|
|
|
|
+
|
|
|
|
|
+ // Navigate back to browse
|
|
|
|
|
+ await page.getByRole('link', { name: /browse/i }).click()
|
|
|
|
|
+ await expect(page.getByText('star.thr')).toBeVisible()
|
|
|
|
|
+ })
|
|
|
|
|
+})
|