import pytest from playwright.sync_api import Browser, expect from conftest import CONFIG, RECORDS, check_for, testuser, setup_context, STATES # playwright = sync_playwright().start() # browser = playwright.chromium.launch(headless=False) """ Delete Nextcloud Account """ @pytest.fixture(scope="session", autouse=True) def delete_nextcloud_user(browser: Browser): yield context = setup_context(browser, f"{STATES}/admin_state.json") page = context.new_page() page.goto(CONFIG['domain']) with page.expect_popup() as nextcloud_info: page.get_by_role("link", name="Nextcloud").click() nextcloud = nextcloud_info.value nextcloud.get_by_role("link", name="Open settings menu").click() nextcloud.get_by_role("link", name="Users").click() nextcloud.locator("#app-content div").filter(has_text=testuser["username"]).get_by_role("button", name="Toggle user actions menu").click() nextcloud.get_by_role("button", name="Delete user").click() nextcloud.get_by_role("button", name=f"Delete authentik-{testuser['username']}'s account").click() context.tracing.stop(path=f"{RECORDS}/nextcloud_delete_user.zip") context.close() """ Nextcloud Login """ @pytest.fixture(scope="session", autouse=True) def nc_login(browser: Browser): context = setup_context(browser, f"{STATES}/user_state.json") page = context.new_page() page.goto(CONFIG['domain']) with page.expect_popup() as nextcloud_info: link = page.get_by_role("link", name="Nextcloud") CONFIG['nc_domain'] = link.get_attribute("href") link.click() nextcloud = nextcloud_info.value check_for(nextcloud.get_by_role("link", name="Name")) if nextcloud.query_selector('.close-icon'): close_button = nextcloud.get_by_role("button", name="Close modal") close_button.click() expect(close_button).to_be_hidden() nextcloud.wait_for_timeout(2000) context.storage_state(path=f"{STATES}/nc_user_state.json") context.tracing.stop(path=f"{RECORDS}/nextcloud_login_user.zip") context.close() """ Reuse Nextcloud User Session """ @pytest.fixture def nc_session(browser: Browser): context = setup_context(browser, f"{STATES}/nc_user_state.json") page = context.new_page() page.goto(CONFIG['nc_domain']) if page.query_selector('.close-icon'): page.get_by_role("button", name="Close modal").click() yield context, page context.close() """ Test Nextcloud """ def test_nextcloud(nc_session): context, page = nc_session #if page.query_selector('.close-icon'): # page.get_by_role("button", name="Close modal").click() if CONFIG.get('default_quota'): quota = int(page.get_by_role("listitem", name="Storage informations").get_by_role("link").inner_text().split()[3]) assert quota == CONFIG['default_quota'] for app in CONFIG['nc_apps']: check_for(page.get_by_role("link", name=app)) context.tracing.stop(path=f"{RECORDS}/nextcloud.zip") """ Test Onlyoffice in Nextcloud """ def test_onlyoffice(nc_session): context, page = nc_session #if page.query_selector('.close-icon'): # page.get_by_role("button", name="Close modal").click() page.get_by_role("link", name="New file/folder menu").click() page.get_by_role("link", name="New document").click() page.locator("#view9-input-file").fill("test.docx") page.get_by_role("button", name="Submit").click() outer_frame = page.frame_locator('#onlyofficeFrame') check_for(outer_frame.locator('body')) inner_frame = outer_frame.frame_locator('#app > iframe') check_for(inner_frame.locator('body')) onlyoffice = page.frame("frameEditor") check_for(onlyoffice.locator('//*[@id="area_id"]')) onlyoffice.locator("#btn-goback").click() page.get_by_role("link", name="Not favorited test .docx Share Actions").get_by_role("link", name="Actions").click() page.get_by_role("link", name="Delete file").click() context.tracing.stop(path=f"{RECORDS}/onlyoffice.zip")