import pytest import asyncio from playwright.async_api import expect @pytest.mark.asyncio class TestAuthFlow: async def test_01_user_registration(self, page, base_url): await page.goto(f"{base_url}/") await page.wait_for_load_state("networkidle") # Click Sign Up await page.click('text=Sign Up') await page.wait_for_timeout(500) # Fill registration form await page.fill('#register-form input[name="username"]', 'e2etestuser') await page.fill('#register-form input[name="email"]', 'e2etestuser@example.com') await page.fill('#register-form input[name="password"]', 'testpassword123') # Submit registration await page.click('#register-form button[type="submit"]') await page.wait_for_timeout(2000) await expect(page.locator('text=My Files')).to_be_visible() async def test_02_user_login(self, page, base_url): await page.goto(f"{base_url}/") await page.wait_for_load_state("networkidle") # Unregister service worker to avoid interference await page.evaluate(""" navigator.serviceWorker.getRegistrations().then(function(registrations) { for(let registration of registrations) { registration.unregister(); } }); """) await page.reload() await page.wait_for_load_state("networkidle") # Fill login form await page.fill('#login-form input[name="username"]', 'e2etestuser') await page.fill('#login-form input[name="password"]', 'testpassword123') # Submit login await page.click('#login-form button[type="submit"]') await page.wait_for_timeout(2000) await expect(page.locator('text=My Files')).to_be_visible() async def test_03_navigate_to_files_view(self, page, base_url): await page.goto(f"{base_url}/") await page.wait_for_load_state("networkidle") await page.fill('#login-form input[name="username"]', 'e2etestuser') await page.fill('#login-form input[name="password"]', 'testpassword123') await page.click('#login-form button[type="submit"]') await page.wait_for_timeout(2000) # Files view should be active by default await expect(page.locator('a.nav-link.active[data-view="files"]')).to_be_visible() await expect(page.locator('file-list')).to_be_visible() async def test_04_navigate_to_photos_view(self, page, base_url): await page.goto(f"{base_url}/") await page.wait_for_load_state("networkidle") await page.fill('#login-form input[name="username"]', 'e2etestuser') await page.fill('#login-form input[name="password"]', 'testpassword123') await page.click('#login-form button[type="submit"]') await page.wait_for_timeout(2000) await page.click('a.nav-link[data-view="photos"]') await page.wait_for_timeout(1000) await expect(page.locator('a.nav-link.active[data-view="photos"]')).to_be_visible() await expect(page.locator('photo-gallery')).to_be_visible() async def test_05_navigate_to_shared_view(self, page, base_url): await page.goto(f"{base_url}/") await page.wait_for_load_state("networkidle") await page.fill('#login-form input[name="username"]', 'e2etestuser') await page.fill('#login-form input[name="password"]', 'testpassword123') await page.click('#login-form button[type="submit"]') await page.wait_for_timeout(2000) await page.click('a.nav-link[data-view="shared"]') await page.wait_for_timeout(1000) await expect(page.locator('a.nav-link.active[data-view="shared"]')).to_be_visible() await expect(page.locator('shared-items')).to_be_visible() async def test_06_navigate_to_starred_view(self, page, base_url): await page.goto(f"{base_url}/") await page.wait_for_load_state("networkidle") await page.fill('#login-form input[name="username"]', 'e2etestuser') await page.fill('#login-form input[name="password"]', 'testpassword123') await page.click('#login-form button[type="submit"]') await page.wait_for_timeout(2000) await page.click('a.nav-link[data-view="starred"]') await page.wait_for_timeout(1000) await expect(page.locator('a.nav-link.active[data-view="starred"]')).to_be_visible() await expect(page.locator('starred-items')).to_be_visible() async def test_07_navigate_to_recent_view(self, page, base_url): await page.goto(f"{base_url}/") await page.wait_for_load_state("networkidle") await page.fill('#login-form input[name="username"]', 'e2etestuser') await page.fill('#login-form input[name="password"]', 'testpassword123') await page.click('#login-form button[type="submit"]') await page.wait_for_timeout(2000) await page.click('a.nav-link[data-view="recent"]') await page.wait_for_timeout(1000) await expect(page.locator('a.nav-link.active[data-view="recent"]')).to_be_visible() await expect(page.locator('recent-files')).to_be_visible() async def test_08_navigate_to_deleted_view(self, page, base_url): await page.goto(f"{base_url}/") await page.wait_for_load_state("networkidle") await page.fill('#login-form input[name="username"]', 'e2etestuser') await page.fill('#login-form input[name="password"]', 'testpassword123') await page.click('#login-form button[type="submit"]') await page.wait_for_timeout(2000) await page.click('a.nav-link[data-view="deleted"]') await page.wait_for_timeout(1000) await expect(page.locator('a.nav-link.active[data-view="deleted"]')).to_be_visible() await expect(page.locator('deleted-files')).to_be_visible() async def test_09_navigate_to_billing_view(self, page, base_url): await page.goto(f"{base_url}/") await page.wait_for_load_state("networkidle") await page.fill('#login-form input[name="username"]', 'e2etestuser') await page.fill('#login-form input[name="password"]', 'testpassword123') await page.click('#login-form button[type="submit"]') await page.wait_for_timeout(2000) await page.click('a.nav-link[data-view="billing"]') await page.wait_for_timeout(1000) await expect(page.locator('a.nav-link.active[data-view="billing"]')).to_be_visible() await expect(page.locator('billing-dashboard')).to_be_visible() async def test_10_user_logout(self, page, base_url): await page.goto(f"{base_url}/") await page.wait_for_load_state("networkidle") await page.fill('#login-form input[name="username"]', 'e2etestuser') await page.fill('#login-form input[name="password"]', 'testpassword123') await page.click('#login-form button[type="submit"]') await page.wait_for_timeout(2000) # Click logout await page.click('#logout-btn') await page.wait_for_timeout(1000) # Should be back to login await expect(page.locator('#login-form')).to_be_visible()