feat: visibilité & recherche des partages dirigés #196
- icône share-2 bleue sur les fichiers partagés dans l'arborescence
- dossier virtuel Partage/ Ã la racine du home du destinataire (lecture seule /s/{token})
- recherche plein texte couvre les documents reçus (merge search_vaults, share_token)
- cache front invalidé à la création/révocation ; +2 tests non-fuite
This commit is contained in:
@@ -140,3 +140,30 @@ class TestDirectedShareGate:
|
||||
assert user_client.get(f"/s/{body['token']}").status_code == 200
|
||||
admin_client.delete(f"/api/share/{body['id']}")
|
||||
assert user_client.get(f"/s/{body['token']}").status_code == 404
|
||||
|
||||
def test_search_finds_received_share_for_recipient(self, sessions):
|
||||
# #196 : le contenu du document reçu est cherchable par le destinataire.
|
||||
admin_client, user_client = sessions
|
||||
path = _ensure_shared_file()
|
||||
resp = admin_client.post("/api/share/TestVault", json={
|
||||
"path": path, "shared_with": ["normaluser"],
|
||||
})
|
||||
token = resp.json()["token"]
|
||||
resp = user_client.get("/api/search", params={"q": "dirigé", "vault": "all"})
|
||||
assert resp.status_code == 200
|
||||
hits = [r for r in resp.json()["results"] if r.get("share_token") == token]
|
||||
assert hits, "le destinataire doit trouver le document reçu via la recherche"
|
||||
assert hits[0]["vault"] == "home-normaluser"
|
||||
assert hits[0]["path"].startswith("Partage/")
|
||||
|
||||
def test_search_does_not_leak_share_to_other_user(self, sessions):
|
||||
# Un utilisateur non destinataire ne voit JAMAIS le contenu partagé
|
||||
# dans ses résultats (le vault source lui est interdit).
|
||||
admin_client, user_client = sessions
|
||||
path = _ensure_shared_file()
|
||||
admin_client.post("/api/share/TestVault", json={
|
||||
"path": path, "shared_with": ["admin"], # dirigé à admin seul
|
||||
})
|
||||
resp = user_client.get("/api/search", params={"q": "dirigé", "vault": "all"})
|
||||
assert resp.status_code == 200
|
||||
assert not [r for r in resp.json()["results"] if r.get("share_token")]
|
||||
|
||||
Reference in New Issue
Block a user