trainUs/tests/test_step23_first_load_warning.py
David b69fae1edc
Some checks are pending
CI / Lint & Format (push) Waiting to run
CI / Build (push) Waiting to run
CI / Tests (${{ matrix.browser }}) (chromium) (push) Waiting to run
CI / Tests (${{ matrix.browser }}) (firefox) (push) Waiting to run
Add installation modal dialog
2026-07-04 15:06:03 +02:00

70 lines
2.6 KiB
Python

"""
Backlog — First-launch warning modal (single tab / no private browsing)
- test_modal_appears_on_fresh_db: Modal appears on first load of a fresh database
- test_modal_shows_both_messages: Both the single-tab and private-browsing messages are shown
- test_dismiss_persists_flag: Dismissing sets the settings flag and hides the modal
- test_modal_does_not_reappear_after_reload: Modal does not reappear on reload once dismissed
"""
import pytest
from playwright.sync_api import Page, expect
# The conftest `page` fixture auto-dismisses this modal for every other test file
# (since a fresh browser context = a fresh DB = "first launch" every time); opt out
# here since these tests exercise the modal directly.
pytestmark = pytest.mark.keep_first_load_warning
def _wait_for_db(page: Page, app_url: str):
"""Navigate and wait for the database to be ready."""
page.goto(app_url)
page.wait_for_function(
"document.documentElement.getAttribute('data-db-ready') === 'true'",
timeout=15000,
)
def test_modal_appears_on_fresh_db(page: Page, app_url: str):
"""Modal appears on first load of a fresh database."""
_wait_for_db(page, app_url)
expect(page.locator('[data-testid="first-load-warning-modal"]')).to_be_visible()
def test_modal_shows_both_messages(page: Page, app_url: str):
"""Both the single-tab and private-browsing messages are shown together."""
_wait_for_db(page, app_url)
expect(page.locator('[data-testid="first-load-warning-single-tab"]')).to_be_visible()
expect(page.locator('[data-testid="first-load-warning-private-mode"]')).to_be_visible()
def test_dismiss_persists_flag(page: Page, app_url: str):
"""Dismissing the modal sets the settings flag and hides the modal."""
_wait_for_db(page, app_url)
modal = page.locator('[data-testid="first-load-warning-modal"]')
expect(modal).to_be_visible()
page.locator('[data-testid="first-load-warning-dismiss"]').click()
expect(modal).not_to_be_visible()
flag = page.evaluate(
"async () => await window.__repos.settings.get('first_load_warning_seen')"
)
assert flag == 'true', f"first_load_warning_seen should be 'true', got '{flag}'"
def test_modal_does_not_reappear_after_reload(page: Page, app_url: str):
"""Once dismissed, the modal does not reappear on reload."""
_wait_for_db(page, app_url)
page.locator('[data-testid="first-load-warning-dismiss"]').click()
page.reload()
page.wait_for_function(
"document.documentElement.getAttribute('data-db-ready') === 'true'",
timeout=15000,
)
expect(page.locator('[data-testid="first-load-warning-modal"]')).not_to_be_visible()