Files

82 lines
2.6 KiB
Python

"""Palier 7 (0.10.0): mode Triage (issue #11)."""
import json
import re
from tests.conftest import csrf_from
def _queue_from(page_html: str) -> list:
m = re.search(
r'<script id="triage-queue" type="application/json">(.*?)</script>',
page_html, re.S,
)
assert m, "file de triage absente de la page"
return json.loads(m.group(1))
def test_triage_picker_lists_project_with_backlog(client, fake_gitea):
r = client.get("/triage")
assert r.status_code == 200
assert "Projets/demo" in r.text
assert "au backlog" in r.text
def test_triage_session_queue_is_backlog_only(client, fake_gitea):
r = client.get("/triage/Projets/demo")
assert r.status_code == 200
queue = _queue_from(r.text)
numbers = [c["number"] for c in queue]
# Open issues of the fake repo: #1 and #5, both unplaced -> backlog.
# #3 is closed (goes to done), #2 is a PR (excluded).
assert numbers == [1, 5]
card = queue[0]
assert card["title"] == "Tâche un"
assert "excerpt" in card and "html_url" in card
def test_triage_session_empty_when_nothing_to_triage(client, fake_gitea):
for issue in fake_gitea.issues["Projets/demo"]:
if issue["number"] in (1, 5):
issue["state"] = "closed"
r = client.get("/triage/Projets/demo")
assert r.status_code == 200
assert _queue_from(r.text) == []
def test_assign_self_adds_token_user(client, fake_gitea):
token = csrf_from(client)
# Issue #5 is unassigned in the fake; #1 already belongs to bruno.
r = client.post(
"/api/issues/Projets/demo/5/assign-self",
data={"csrf_token": token},
)
assert r.status_code == 200
assert r.json()["ok"] is True
assert r.json()["assignees"] == ["bruno"]
assert fake_gitea.assignee_changes == [("Projets", "demo", 5, ["bruno"])]
# Idempotent: assigning #1 (already bruno's) writes nothing.
r = client.post(
"/api/issues/Projets/demo/1/assign-self",
data={"csrf_token": token},
)
assert r.status_code == 200
assert r.json()["assignees"] == ["bruno"]
assert len(fake_gitea.assignee_changes) == 1
def test_assign_self_requires_csrf(client, fake_gitea):
r = client.post("/api/issues/Projets/demo/1/assign-self", data={})
assert r.status_code == 403
assert fake_gitea.assignee_changes == []
def test_excerpt_strips_markdown():
from app.main import _excerpt
text = _excerpt("# Titre\n\nDu **gras** et un [lien](http://x) ici.", 280)
assert "Titre" in text and "gras" in text and "lien" in text
assert "#" not in text and "**" not in text
assert _excerpt(None) == ""
assert len(_excerpt("mot " * 200, 50)) <= 51