fix: persist cleared knowledge collection timestamps

This commit is contained in:
2026-10-17 15:31:03 +08:00
parent fb51081750
commit aad79aea5f
8 changed files with 110 additions and 4 deletions
+8 -2
View File
@@ -41,8 +41,7 @@ class Patch(Input):
@classmethod
def disallow_required_null(cls, value, info):
if (
info.field_name
in {"name", "title", "category", "content", "notes", "collected_at", "expected_version"}
info.field_name in {"name", "title", "category", "content", "notes", "expected_version"}
and value is None
):
raise ValueError("该字段不能为 null")
@@ -92,6 +91,13 @@ class DocumentUpdate(Patch):
collected_at: AwareDatetime | None = None
notes: Notes | None = None
@field_validator("collected_at", mode="before")
@classmethod
def collection_time_is_required(cls, value):
if value is None:
raise ValueError("文档采集时间不能为 null")
return value
class DocumentRead(Read):
source_id: int
+46
View File
@@ -156,6 +156,52 @@ def test_review_edit_and_history(client):
assert events["items"][1]["snapshot"]["item"]["verification_status"] == "verified"
def test_clear_knowledge_collection_time_requires_new_evidence(client):
verified = review(client, knowledge(client)).json()
path = f"/api/knowledge/{verified['id']}"
before = client.get(path + "/history").json()["items"]
response = client.patch(
path, json={"expected_version": verified["version"], "collected_at": None}
)
assert response.status_code == 200
cleared = response.json()
assert cleared["collected_at"] is None
assert cleared["version"] == verified["version"] + 1
assert cleared["verification_status"] == "pending"
assert cleared["reviewer"] is None and cleared["reviewed_at"] is None
assert cleared["verification_notes"] is None
assert review(client, cleared).status_code == 422
assert client.get(path).json() == cleared
events = client.get(path + "/history").json()["items"]
assert events[0]["snapshot"]["item"]["collected_at"] is None
assert events[1:] == before
assert (
client.patch(
path, json={"expected_version": verified["version"], "collected_at": COLLECTED}
).status_code
== 409
)
restored = client.patch(
path, json={"expected_version": cleared["version"], "collected_at": COLLECTED}
).json()
assert review(client, restored).status_code == 200
def test_document_collection_time_cannot_be_cleared(client):
doc = document(client, source(client)["id"])
path = f"/api/documents/{doc['id']}"
before = client.get(path + "/history").json()
response = client.patch(path, json={"expected_version": doc["version"], "collected_at": None})
assert response.status_code == 422
assert client.get(path).json() == doc
assert client.get(path + "/history").json() == before
def test_source_document_changes_invalidate_evidence(client):
src = source(client)
doc = document(client, src["id"])