fix: persist cleared knowledge collection timestamps
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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"])
|
||||
|
||||
Reference in New Issue
Block a user