207 lines
8.0 KiB
Python
207 lines
8.0 KiB
Python
|
|
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()
|