from datetime import datetime, timedelta from app.models.journal import EntityType from app.crud.crud_journal import journal def test_search_journal_filters_entries(auth_client, db): yesterday = datetime.utcnow() - timedelta(days=1) matching = journal.log_change( db, EntityType.PPR, 10, "Matching PPR change", "tower", "127.0.0.1", ) other = journal.log_change( db, EntityType.USER, 20, "Other user change", "admin", "127.0.0.1", ) matching.entry_dt = yesterday other.entry_dt = datetime.utcnow() db.commit() response = auth_client.get( "/api/v1/journal/search/all", params={ "date_from": yesterday.date().isoformat(), "date_to": yesterday.date().isoformat(), "entity_type": "PPR", "entity_id": 10, "user": "tower", }, ) assert response.status_code == 200 entries = response.json() assert len(entries) == 1 assert entries[0]["entry"] == "Matching PPR change" def test_search_journal_rejects_invalid_entity_type(auth_client): response = auth_client.get( "/api/v1/journal/search/all", params={"entity_type": "NOT_A_THING"}, ) assert response.status_code == 400 assert "Invalid entity_type" in response.json()["detail"] def test_get_user_and_entity_journal(auth_client, db): journal.log_change(db, EntityType.PPR, 55, "PPR audit entry", "tower", None) user_response = auth_client.get("/api/v1/journal/user/tower") entity_response = auth_client.get("/api/v1/journal/PPR/55") assert user_response.status_code == 200 assert user_response.json()[0]["entry"] == "PPR audit entry" assert entity_response.status_code == 200 body = entity_response.json() assert body["entity_type"] == "PPR" assert body["entity_id"] == 55 assert body["total_entries"] == 1 assert body["entries"][0]["entry"] == "PPR audit entry" def test_get_entity_journal_rejects_invalid_entity_type(auth_client): response = auth_client.get("/api/v1/journal/NOPE/1") assert response.status_code == 400 assert "Invalid entity_type" in response.json()["detail"]