style: repo-wide lint pass — make the lint gate green again
Push builds have been RED on the lint step since ~build 209 from accumulated formatting drift. This is the mechanical cleanup: ruff format + ruff --fix (UP038 isinstance unions, SIM105 contextlib.suppress, UP031 f-strings, SIM115 tempfile context manager), shfmt -i 2 -ci, nixpkgs-fmt/statix/deadnix (merged attrsets, dropped unused lib args), yamllint, and shell quoting fixes in tests/lasuite-docs/setup_custom_tests.sh. No behaviour changes intended; lint: PASS, unit tests: 138 passed.
This commit is contained in:
@ -26,6 +26,7 @@ Transient `net::ERR_NETWORK_CHANGED` is handled by the shared `goto_with_retry`
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import contextlib
|
||||
import os
|
||||
import sys
|
||||
import uuid
|
||||
@ -39,7 +40,11 @@ def _open_pad(ctx, url):
|
||||
bar once CryptPad has created/loaded the fragment-keyed pad (`#/2/pad/edit/<key>/`)."""
|
||||
page = ctx.new_page()
|
||||
harness_browser.goto_with_retry(
|
||||
page, url, accept_statuses=(200,), goto_timeout_ms=60_000, wait_until="load",
|
||||
page,
|
||||
url,
|
||||
accept_statuses=(200,),
|
||||
goto_timeout_ms=60_000,
|
||||
wait_until="load",
|
||||
deadline_seconds=150,
|
||||
)
|
||||
pad_url = url
|
||||
@ -53,13 +58,15 @@ def _open_pad(ctx, url):
|
||||
pad_url = page.url
|
||||
break
|
||||
if i == 40:
|
||||
try:
|
||||
with contextlib.suppress(Exception): # best-effort unstick
|
||||
harness_browser.goto_with_retry(
|
||||
page, url, accept_statuses=(200,), goto_timeout_ms=60_000,
|
||||
wait_until="load", deadline_seconds=120,
|
||||
page,
|
||||
url,
|
||||
accept_statuses=(200,),
|
||||
goto_timeout_ms=60_000,
|
||||
wait_until="load",
|
||||
deadline_seconds=120,
|
||||
)
|
||||
except Exception: # noqa: BLE001 — best-effort unstick
|
||||
pass
|
||||
return page, pad_url
|
||||
|
||||
|
||||
@ -74,18 +81,22 @@ def _ckeditor_frame(page, deadline_polls=90, reload_at=22, reload_url=None):
|
||||
if "ckeditor-inner" in f.url:
|
||||
return f
|
||||
if i == reload_at and reload_url is not None:
|
||||
try:
|
||||
with contextlib.suppress(Exception): # reload is a best-effort unstick
|
||||
harness_browser.goto_with_retry(
|
||||
page, reload_url, accept_statuses=(200,), goto_timeout_ms=60_000,
|
||||
wait_until="load", deadline_seconds=120,
|
||||
page,
|
||||
reload_url,
|
||||
accept_statuses=(200,),
|
||||
goto_timeout_ms=60_000,
|
||||
wait_until="load",
|
||||
deadline_seconds=120,
|
||||
)
|
||||
except Exception: # noqa: BLE001 — reload is a best-effort unstick
|
||||
pass
|
||||
page.wait_for_timeout(2000)
|
||||
return None
|
||||
|
||||
|
||||
def _poll_any_frame_for_text(page, needle, deadline_polls=120, reload_at=(20, 45, 75, 100), reload_url=None):
|
||||
def _poll_any_frame_for_text(
|
||||
page, needle, deadline_polls=120, reload_at=(20, 45, 75, 100), reload_url=None
|
||||
):
|
||||
"""Robust read-back (F2-13): poll EVERY frame's body text for `needle`, returning True as soon as
|
||||
it appears. The fresh cold-cache read-back context's deeply-nested CKEditor frame is slow/flaky to
|
||||
*attach* by URL (the prior `_ckeditor_frame` wait timed out on the Adversary's cold run), but the
|
||||
@ -101,13 +112,15 @@ def _poll_any_frame_for_text(page, needle, deadline_polls=120, reload_at=(20, 45
|
||||
except Exception: # noqa: BLE001 — frame not ready / detached; keep polling
|
||||
pass
|
||||
if reload_url and i in reload_at:
|
||||
try:
|
||||
with contextlib.suppress(Exception): # best-effort unstick
|
||||
harness_browser.goto_with_retry(
|
||||
page, reload_url, accept_statuses=(200,), goto_timeout_ms=60_000,
|
||||
wait_until="load", deadline_seconds=120,
|
||||
page,
|
||||
reload_url,
|
||||
accept_statuses=(200,),
|
||||
goto_timeout_ms=60_000,
|
||||
wait_until="load",
|
||||
deadline_seconds=120,
|
||||
)
|
||||
except Exception: # noqa: BLE001 — best-effort unstick
|
||||
pass
|
||||
page.wait_for_timeout(2000)
|
||||
return False
|
||||
|
||||
@ -137,9 +150,9 @@ def test_cryptpad_pad_content_survives_fresh_session(live_app):
|
||||
# --- session 1: create the pad + write the marker ---
|
||||
ctx1 = browser.new_context(ignore_https_errors=True)
|
||||
page, pad_url = _open_pad(ctx1, f"https://{live_app}/pad/")
|
||||
assert "#/2/pad/edit/" in pad_url, (
|
||||
f"CryptPad did not create a fragment-keyed pad URL; got {pad_url!r}"
|
||||
)
|
||||
assert (
|
||||
"#/2/pad/edit/" in pad_url
|
||||
), f"CryptPad did not create a fragment-keyed pad URL; got {pad_url!r}"
|
||||
ck = _ckeditor_frame(page, reload_url=pad_url)
|
||||
assert ck is not None, "CKEditor content frame never attached (pad editor not ready)"
|
||||
_dismiss_store_modal(page)
|
||||
@ -148,9 +161,9 @@ def test_cryptpad_pad_content_survives_fresh_session(live_app):
|
||||
page.wait_for_timeout(1000)
|
||||
body.type(marker, delay=40)
|
||||
page.wait_for_timeout(12000) # let CryptPad encrypt + sync the update to the server
|
||||
assert marker in ck.locator("body").inner_text(), (
|
||||
"marker not present in the editor after typing — type did not land"
|
||||
)
|
||||
assert (
|
||||
marker in ck.locator("body").inner_text()
|
||||
), "marker not present in the editor after typing — type did not land"
|
||||
ctx1.close()
|
||||
|
||||
# --- session 2: FRESH context (no shared storage/localStorage) reads the pad back by URL.
|
||||
|
||||
@ -51,9 +51,9 @@ def test_cryptpad_spa_renders_with_no_console_errors(live_app):
|
||||
title = (page.title() or "").lower()
|
||||
body = page.content()
|
||||
blower = body.lower()
|
||||
assert "cryptpad" in title or "cryptpad" in blower, (
|
||||
f"CryptPad SPA does not carry brand. title={title!r}, body excerpt: {body[:200]!r}"
|
||||
)
|
||||
assert (
|
||||
"cryptpad" in title or "cryptpad" in blower
|
||||
), f"CryptPad SPA does not carry brand. title={title!r}, body excerpt: {body[:200]!r}"
|
||||
|
||||
# Canonical CryptPad asset references in the rendered DOM
|
||||
canonical = ("/customize/", "/components/", "main.js", "/api/broadcast")
|
||||
|
||||
@ -8,7 +8,8 @@ import os
|
||||
import sys
|
||||
|
||||
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "..", "runner"))
|
||||
from harness import browser as harness_browser, generic, lifecycle # noqa: E402
|
||||
from harness import browser as harness_browser # noqa: E402
|
||||
from harness import generic, lifecycle
|
||||
|
||||
|
||||
def test_serving_and_content(live_app, meta):
|
||||
|
||||
Reference in New Issue
Block a user