coulomb-social/tests/usecases/test_reichelag_browser.py
tegwick a1989f19db
Some checks failed
Use-case regression gate / usecase-regressions (push) Failing after 6m2s
Establish use-case regression collection and real browser gate
Assistant: codex
Assistant-Model: gpt-6.1-sol
Assistant-Session: 01a10e2d-a5ef-7e92-b03d-b1694e915680
2026-10-06 14:02:01 +02:00

51 lines
2.3 KiB
Python

"""Actual browser user journey against an isolated Django live server."""
import json
import subprocess
from pathlib import Path
import pytest
from coulomb_social.apps.members.models import Member, User
from coulomb_social.apps.spaces import pageops
from coulomb_social.apps.spaces.models import SpaceMembership
from coulomb_social.apps.spaces.services import create_space, put_space_page
ROOT = Path(__file__).resolve().parents[2]
SCENARIO = ROOT / "tests/usecases/fixtures/reichelag-weekly-call.json"
@pytest.mark.usecase("CSOC-UC-008")
@pytest.mark.browser
@pytest.mark.django_db(transaction=True)
def test_weekly_call_through_real_ui(tmp_path, settings, request):
settings.DEBUG = True
settings.OIDC_ENABLED = False
settings.USER_ENGINE_BASE_URL = ""
settings.FLEX_AUTH_BASE_URL = ""
settings.FORGEJO_BASE_URL = ""
settings.CONTENT_ROOT = str(tmp_path / "content")
settings.STATIC_ROOT = str(tmp_path / "static")
scenario = json.loads(SCENARIO.read_text(encoding="utf-8"))
actors = {}
for role in ("writer", "reader", "outsider"):
subject = scenario[f"{role}_subject"]
actors[role] = Member.objects.create(
user=User.objects.create_user(username=subject), tenant_id=scenario["tenant"],
user_engine_user_id=subject, issuer="https://local.dev/issuer", subject=subject,
)
space = create_space(actors["writer"], title=scenario["space_title"],
slug=scenario["space_slug"])
put_space_page(actors["writer"], space, scenario["previous_slug"],
title=scenario["previous_title"], body=scenario["previous_body"])
SpaceMembership.objects.create(space=space, member=actors["reader"], role="viewer")
server = request.getfixturevalue("live_server")
result = subprocess.run(
["node", str(ROOT / "scripts/test-usecase-browser.mjs"), str(server), str(SCENARIO)],
cwd=ROOT, capture_output=True, text=True, timeout=120,
)
assert result.returncode == 0, result.stdout + result.stderr
# Browser POSTs must persist the new protocol without changing the old one.
assert (pageops.read_page(space.slug, scenario["previous_slug"]).body
== scenario["previous_body"])
assert pageops.read_page(space.slug, scenario["next_slug"]).body == scenario["next_body"]