diff --git a/tests/test_coffre_secrets.py b/tests/test_coffre_secrets.py index 68391b4..57cea22 100644 --- a/tests/test_coffre_secrets.py +++ b/tests/test_coffre_secrets.py @@ -778,3 +778,56 @@ class TestDistribuables: # Flag désactivé : 503 comme les autres routes. monkeypatch.setenv("OBSIGATE_SECRETS_ENABLED", "0") assert self._lister(client, jeton).status_code == 503 + + +# --------------------------------------------------------------------------- +# Révélation manuelle (panneau détail : Afficher / Copier la valeur) +# --------------------------------------------------------------------------- + +class TestRevelation: + def test_proprietaire_revele_et_audit_sans_valeur(self, client, env_coffre): + _creer_coffre_secret(client) + resp = client.post("/api/coffres/personnel/secrets/gitea-token/reveler") + assert resp.status_code == 200, resp.text + corps = resp.json() + assert corps["valeur"] == VALEUR_TEST + assert corps["reference"] == "coffre:personnel/gitea-token" + assert corps["version"] == 1 + audit = (env_coffre / "audit.log").read_text(encoding="utf-8") + assert "revelation_manuelle" in audit + assert VALEUR_TEST not in audit + + def test_lecteur_octroi_utilisateur_ne_revele_pas(self, client): + _creer_coffre_secret(client) + resp = client.post("/api/coffres/personnel/octrois", json={ + "cible_type": "utilisateur", "cible_id": "alice", + "secret_nom": "gitea-token"}) + assert resp.status_code == 200, resp.text + _connecter(client, "alice", role="user") + # Voit les métadonnées… + assert client.get("/api/coffres/personnel/secrets").status_code == 200 + # …mais ne révèle jamais la valeur. + resp = client.post("/api/coffres/personnel/secrets/gitea-token/reveler") + assert resp.status_code == 403 + + def test_secret_inexistant_404(self, client): + _creer_coffre_secret(client) + resp = client.post("/api/coffres/personnel/secrets/absent/reveler") + assert resp.status_code == 404 + + def test_secret_expire_410(self, client): + _creer_coffre_secret(client) + hier = (datetime.now(timezone.utc) - timedelta(days=1)).isoformat() + resp = client.post("/api/coffres/personnel/secrets", json={ + "nom": "vieux-jeton", "type": "token", "valeur": VALEUR_TEST, + "expiration": hier}) + assert resp.status_code == 200, resp.text + resp = client.post("/api/coffres/personnel/secrets/vieux-jeton/reveler") + assert resp.status_code == 410 + assert resp.json()["detail"] == "secret_expire" + + def test_flag_desactive_503(self, client, monkeypatch): + _creer_coffre_secret(client) + monkeypatch.setenv("OBSIGATE_SECRETS_ENABLED", "0") + resp = client.post("/api/coffres/personnel/secrets/gitea-token/reveler") + assert resp.status_code == 503