import pytest import asyncio from playwright.async_api import expect @pytest.mark.asyncio class TestSharing: async def test_01_share_file_with_user(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) # Select file await page.click('.file-item:has-text("test-file.txt") .file-checkbox') await page.wait_for_timeout(500) # Click share await page.click('button:has-text("Share")') await page.wait_for_timeout(500) # Share modal should appear await expect(page.locator('share-modal')).to_be_visible() # Fill share form await page.fill('input[placeholder="Username to share with"]', 'billingtest') await page.select_option('select[name="permission"]', 'read') await page.click('button:has-text("Share")') await page.wait_for_timeout(1000) # Modal should close await expect(page.locator('share-modal')).not_to_be_visible() async def test_02_view_shared_items_as_recipient(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"]', 'billingtest') await page.fill('#login-form input[name="password"]', 'password123') await page.click('#login-form button[type="submit"]') await page.wait_for_timeout(2000) # Go to shared items await page.click('a.nav-link[data-view="shared"]') await page.wait_for_timeout(1000) await expect(page.locator('text=test-file.txt')).to_be_visible() async def test_03_download_shared_file(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"]', 'billingtest') await page.fill('#login-form input[name="password"]', 'password123') await page.click('#login-form button[type="submit"]') await page.wait_for_timeout(2000) # Go to shared items await page.click('a.nav-link[data-view="shared"]') await page.wait_for_timeout(1000) # Click download on shared file await page.click('.file-item:has-text("test-file.txt") .download-btn') await page.wait_for_timeout(1000) # Should trigger download (can't easily test actual download in e2e) async def test_04_create_public_link(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) # Select file await page.click('.file-item:has-text("test-file.txt") .file-checkbox') await page.wait_for_timeout(500) # Click share await page.click('button:has-text("Share")') await page.wait_for_timeout(500) # Click create public link await page.click('button:has-text("Create Public Link")') await page.wait_for_timeout(1000) # Should show link await expect(page.locator('.public-link')).to_be_visible() async def test_05_access_public_link(self, page, base_url): # First get the public link from previous test 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) # Get the public link await page.click('.file-item:has-text("test-file.txt") .file-checkbox') await page.click('button:has-text("Share")') await page.wait_for_timeout(500) link_element = page.locator('.public-link input') public_url = await link_element.get_attribute('value') # Logout await page.click('#logout-btn') await page.wait_for_timeout(1000) # Access public link await page.goto(public_url) await page.wait_for_load_state("networkidle") # Should be able to view/download the file await expect(page.locator('text=test-file.txt')).to_be_visible() async def test_06_revoke_share(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) # Go to shared items view (as owner) await page.click('a.nav-link[data-view="shared"]') await page.wait_for_timeout(1000) # Find the share and revoke await page.click('.share-item .revoke-btn') await page.wait_for_timeout(500) # Confirm revoke await page.click('button:has-text("Confirm")') await page.wait_for_timeout(1000) # Share should be gone await expect(page.locator('.share-item')).not_to_be_visible() async def test_07_share_folder(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) # Select folder await page.click('.folder-item:has-text("Renamed Folder") .folder-checkbox') await page.wait_for_timeout(500) # Click share await page.click('button:has-text("Share")') await page.wait_for_timeout(500) # Share modal should appear await expect(page.locator('share-modal')).to_be_visible() # Fill share form await page.fill('input[placeholder="Username to share with"]', 'billingtest') await page.select_option('select[name="permission"]', 'read') await page.click('button:has-text("Share")') await page.wait_for_timeout(1000) async def test_08_view_shared_folder_as_recipient(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"]', 'billingtest') await page.fill('#login-form input[name="password"]', 'password123') await page.click('#login-form button[type="submit"]') await page.wait_for_timeout(2000) # Go to shared items await page.click('a.nav-link[data-view="shared"]') await page.wait_for_timeout(1000) await expect(page.locator('text=Renamed Folder')).to_be_visible() async def test_09_navigate_into_shared_folder(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"]', 'billingtest') await page.fill('#login-form input[name="password"]', 'password123') await page.click('#login-form button[type="submit"]') await page.wait_for_timeout(2000) # Go to shared items await page.click('a.nav-link[data-view="shared"]') await page.wait_for_timeout(1000) # Click on shared folder await page.click('text=Renamed Folder') await page.wait_for_timeout(1000) # Should see the file inside await expect(page.locator('text=folder-file.txt')).to_be_visible()