import pytest from playwright.sync_api import Page, expect # Since we don't have a full running environment with auth easily mockable in pure Python Playwright # without starting the server, I will write a test that can be run if the server is up. # For CI/CD, we'd use a fixture to start the uvicorn server. @pytest.mark.skip(reason="Requires running server and complex auth mock") def test_tab_navigation(page: Page): # Navigate to the app page.goto("http://localhost:3000/web") # Mock authentication state in localStorage and Alpine page.evaluate("""() => { localStorage.setItem('auth_token', 'mock-token'); document.body.__x.$data.isAuthenticated = true; document.body.__x.$data.username = 'TestUser'; }""") # Reload or wait for Alpine to react page.reload() # Verify Home tab is active by default expect(page.locator("#tab-home")).to_be_visible() expect(page.locator("button.tab:has-text('Accueil')")).to_have_class(/active/) # Click on Anime tab page.click("button.tab:has-text('Anime')") # Verify Anime tab is shown and Home is hidden expect(page.locator("#tab-anime")).to_be_visible() expect(page.locator("#tab-home")).to_be_hidden() expect(page.locator("button.tab:has-text('Anime')")).to_have_class(/active/) # Click on Watchlist tab page.click("button.tab:has-text('Watchlist')") # Verify Watchlist tab is shown expect(page.locator("#tab-watchlist")).to_be_visible() expect(page.locator("#tab-anime")).to_be_hidden() expect(page.locator("button.tab:has-text('Watchlist')")).to_have_class(/active/)