Вики: поля at/author/offset в diff и code/title в versions (#140, ревью задачи 3)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
23192c7a93
commit
060270b854
@ -122,8 +122,8 @@ def _wiki_page(conn, label, code):
|
||||
def h_versions(hub, conn, m, q, body):
|
||||
label, _ = _project(conn, q)
|
||||
code = unquote(m.group(1))
|
||||
_wiki_page(conn, label, code)
|
||||
return 200, {"versions": history.page_versions(conn, label, code)}
|
||||
page_row = _wiki_page(conn, label, code)
|
||||
return 200, {"code": code, "title": page_row["title"], "versions": history.page_versions(conn, label, code)}
|
||||
|
||||
|
||||
def h_diff(hub, conn, m, q, body):
|
||||
|
||||
@ -86,7 +86,7 @@ def page_versions(conn, label: str, code: str) -> list[dict]:
|
||||
def diff(conn, label: str, code: str, version: str | None, offset: int) -> dict:
|
||||
"""Дифф версии относительно предыдущей (первой — относительно пустого текста); version None — последняя.
|
||||
Текст диффа режется по CHUNK символов, с offset; next_offset — где продолжить или None."""
|
||||
rows = conn.execute("SELECT code, created_at, markdown, added, removed FROM wiki_version "
|
||||
rows = conn.execute("SELECT code, created_at, author_login, author_name, markdown, added, removed FROM wiki_version "
|
||||
"WHERE label = ? AND page_code = ? ORDER BY created_at, code", (label, code)).fetchall()
|
||||
if not rows:
|
||||
raise NoVersions()
|
||||
@ -102,8 +102,9 @@ def diff(conn, label: str, code: str, version: str | None, offset: int) -> dict:
|
||||
fromfile=prev["code"] if prev else "", tofile=cur["code"], n=3, lineterm="")
|
||||
text = "".join(f"{x}\n" for x in lines)
|
||||
end = offset + CHUNK
|
||||
return {"version": cur["code"], "index": idx + 1, "total": len(rows), "prev_version": prev["code"] if prev else None,
|
||||
"added": cur["added"], "removed": cur["removed"], "diff": text[offset:end],
|
||||
return {"version": cur["code"], "at": cur["created_at"], "author": _author(cur), "index": idx + 1,
|
||||
"total": len(rows), "prev_version": prev["code"] if prev else None, "added": cur["added"],
|
||||
"removed": cur["removed"], "offset": offset, "diff": text[offset:end],
|
||||
"next_offset": end if end < len(text) else None}
|
||||
|
||||
|
||||
|
||||
@ -102,6 +102,7 @@ def test_changes_no_root_and_unknown(api):
|
||||
|
||||
def test_versions_list(history): # новые первыми
|
||||
d = history.client.get("/wiki/pages/DOC-3/versions", project="AWPCA")
|
||||
assert d["code"] == "DOC-3" and d["title"] == "Статусы"
|
||||
assert len(d["versions"]) == 2 and d["versions"][0]["at"] == "2026-10-27T15:02:00+00:00"
|
||||
assert d["versions"][0]["version"] == "DOCH-31" and d["versions"][0]["author"] == SOSNOV
|
||||
assert hub_error(history.client.get, "/wiki/pages/DOC-99/versions", project="AWPCA").status == 404
|
||||
@ -115,6 +116,7 @@ def test_diff_last(four): # сценарий «Ди
|
||||
assert d["index"] == 4 and d["total"] == 4 and d["prev_version"] == v3 and d["version"] == v4
|
||||
assert d["diff"].startswith(f"--- {v3}\n+++ {v4}\n") and d["next_offset"] is None
|
||||
assert d["code"] == "DOC-3" and d["title"] == "Статусы" and d["path"] == "АРМ КА/01_Статусы"
|
||||
assert d["at"] == "2026-10-27T20:48:02+00:00" and d["author"] == SOSNOV and d["offset"] == 0
|
||||
|
||||
|
||||
def test_diff_first_version(history):
|
||||
@ -137,8 +139,9 @@ def test_diff_chunks(api): # сценарий «Дл
|
||||
|
||||
p0 = part(0)
|
||||
assert len(p0["diff"]) == 20000 and p0["next_offset"] == 20000 and p0["diff"] == full[:20000]
|
||||
assert p0["offset"] == 0
|
||||
p40 = part(40000)
|
||||
assert p40["diff"] == full[40000:] and p40["next_offset"] is None
|
||||
assert p40["diff"] == full[40000:] and p40["next_offset"] is None and p40["offset"] == 40000
|
||||
assert p0["diff"] + part(20000)["diff"] + p40["diff"] == full
|
||||
for bad in ("-1", "x"):
|
||||
e = hub_error(api.client.get, "/wiki/pages/DOC-3/diff", project="AWPCA", offset=bad)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user