File size: 2,697 Bytes
a281968 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | from playwright.sync_api import Page, expect
from conftest import wait_for_sync_idle
def test_document_lifecycle(authenticated_page: Page):
"""Test creating, switching, and reloading documents deterministically."""
page = authenticated_page
sidebar = page.locator("#docs-sidebar")
sidebar.wait_for(state="attached")
# Register dialog handler ONCE
expected_title_ref = ["Test Document 0"]
page.on("dialog", lambda dialog: dialog.accept(expected_title_ref[0]))
# 1. Create multiple documents
for i in range(3):
# Open sidebar if not open by checking class
if "is-open" not in sidebar.get_attribute("class"):
page.evaluate("document.getElementById('docs-sidebar-toggle').click()")
# Wait for animation
expect(sidebar).to_have_class("docs-sidebar is-open")
expected_title_ref[0] = f"Test Document {i}"
# Click new document button
new_btn = page.locator("#docs-new-btn")
new_btn.wait_for(state="visible", timeout=10000)
new_btn.evaluate("el => el.click()")
# Wait for the new document to be created and appear in the list
expect(page.locator(f".doc-list-item__title:has-text('{expected_title_ref[0]}')").first).to_be_visible(timeout=10000)
# Write content
editor = page.locator("#editor-container")
editor.wait_for(state="visible")
editor.click()
editor.focus()
editor.evaluate("el => { el.innerHTML = ''; el.dispatchEvent(new Event('input', {bubbles: true})); }")
editor.press_sequentially(f"Content for document {i}", delay=10)
# Wait for sync to finish before continuing loop
wait_for_sync_idle(page)
# 2. Switch between documents
if "is-open" not in sidebar.get_attribute("class"):
page.evaluate("document.getElementById('docs-sidebar-toggle').click()")
expect(sidebar).to_have_class("docs-sidebar is-open")
docs = page.locator(".doc-list-item__title").all()
assert len(docs) >= 3, "Not all documents were created"
# Click on the first created document (index 0 which is oldest)
docs[-1].evaluate("el => el.click()")
# Wait for the editor to load the content
editor = page.locator("#editor-container")
expect(editor).to_contain_text("Content for document 0", timeout=10000)
# 3. Reload and verify persistence
page.reload()
page.wait_for_load_state("networkidle")
editor = page.locator("#editor-container")
editor.wait_for(state="visible")
expect(editor).to_contain_text("Content for document 0", timeout=10000)
|