feat: display provenance and incomplete signals
This commit is contained in:
@@ -49,6 +49,7 @@ def test_activity_filters_and_explains_score() -> None:
|
||||
assert payload[0]["catches"] == 3
|
||||
assert payload[0]["unique_players"] == 3
|
||||
assert "3 свежих улова" in payload[0]["explanation"]
|
||||
assert payload[0]["sources"] == ["manual-import"]
|
||||
|
||||
|
||||
def test_invalid_period_is_rejected() -> None:
|
||||
@@ -81,6 +82,7 @@ def test_spot_detail_and_catches() -> None:
|
||||
assert detail.json()["catches_24h"] == 3
|
||||
assert catches.status_code == 200
|
||||
assert len(catches.json()) == 3
|
||||
assert catches.json()[0]["source_system"] == "manual-import"
|
||||
|
||||
|
||||
def test_records_list_is_empty_before_import() -> None:
|
||||
@@ -164,7 +166,7 @@ def test_external_observation_requires_mapping_and_complete_data_before_publicat
|
||||
assert {alias.entity_type for alias in aliases} == {"fish", "waterbody"}
|
||||
|
||||
|
||||
def test_incomplete_external_observation_stays_out_of_public_data() -> None:
|
||||
def test_incomplete_external_observation_is_publicly_labelled_but_not_counted() -> None:
|
||||
with Session(engine) as db:
|
||||
stage_observations(db, [{
|
||||
"source_system": "rf4db", "source_external_id": "review-incomplete",
|
||||
@@ -174,6 +176,13 @@ def test_incomplete_external_observation_stays_out_of_public_data() -> None:
|
||||
observation_id = db.scalar(select(ExternalObservation.id).where(
|
||||
ExternalObservation.source_external_id == "review-incomplete"
|
||||
))
|
||||
public = client.get("/api/v1/community-observations")
|
||||
assert public.status_code == 200
|
||||
signal = next(item for item in public.json() if item["id"] == str(observation_id))
|
||||
assert signal["source_system"] == "rf4db"
|
||||
assert signal["quality"] == "incomplete"
|
||||
assert signal["missing_fields"] == ["вес"]
|
||||
assert all(item["x"] != 32 or item["y"] != 42 for item in client.get("/api/v1/activity").json())
|
||||
headers = {"Authorization": "Bearer change-me-in-production"}
|
||||
mapped = client.patch(
|
||||
f"/api/v1/admin/external-observations/{observation_id}/mapping", headers=headers,
|
||||
@@ -186,6 +195,7 @@ def test_incomplete_external_observation_stays_out_of_public_data() -> None:
|
||||
json={"reason": "weight is absent"},
|
||||
)
|
||||
assert rejected.json()["status"] == "rejected"
|
||||
assert all(item["id"] != str(observation_id) for item in client.get("/api/v1/community-observations").json())
|
||||
|
||||
|
||||
def test_admin_can_start_and_list_official_import(monkeypatch) -> None:
|
||||
|
||||
Reference in New Issue
Block a user