52 lines
2.3 KiB
Python
52 lines
2.3 KiB
Python
from __future__ import annotations
|
|
|
|
|
|
def register_project(client, headers, root, name: str) -> dict:
|
|
root.mkdir()
|
|
response = client.post(
|
|
"/api/projects",
|
|
headers=headers,
|
|
json={"name": name, "path": str(root)},
|
|
)
|
|
assert response.status_code == 201
|
|
return response.json()
|
|
|
|
|
|
def test_global_search_finds_owned_content_and_respects_user_scope(logged_in):
|
|
client, app, projects, _, admin_headers = logged_in
|
|
television = register_project(client, admin_headers, projects / "television-admin", "Télévision salon")
|
|
receiver = register_project(client, admin_headers, projects / "receiver-admin", "Récepteur multimédia")
|
|
conversation = client.post(
|
|
f"/api/projects/{television['id']}/conversations",
|
|
headers=admin_headers,
|
|
json={"title": "Contrat HDMI partagé"},
|
|
)
|
|
assert conversation.status_code == 201
|
|
group = client.post(
|
|
"/api/project-groups",
|
|
headers=admin_headers,
|
|
json={"name": "Groupe TV", "description": "Projets connectés à la télévision", "project_ids": [television["id"], receiver["id"]]},
|
|
)
|
|
assert group.status_code == 201
|
|
|
|
admin_results = client.get("/api/search", params={"q": "HDMI"}).json()
|
|
assert [(item["kind"], item["label"]) for item in admin_results] == [("conversation", "Contrat HDMI partagé")]
|
|
assert any(item["kind"] == "group" for item in client.get("/api/search", params={"q": "Groupe TV"}).json())
|
|
assert client.get("/api/search", params={"q": "T"}).json() == []
|
|
|
|
app.state.auth.create_user("member", "a-different-long-test-password", is_admin=False)
|
|
assert client.post("/api/auth/logout", headers=admin_headers).status_code == 200
|
|
login = client.post(
|
|
"/api/auth/login",
|
|
json={"username": "member", "password": "a-different-long-test-password"},
|
|
)
|
|
assert login.status_code == 200
|
|
member_headers = {"X-CSRF-Token": login.json()["csrf_token"]}
|
|
own = register_project(client, member_headers, projects / "television-member", "Télévision personnelle")
|
|
|
|
member_results = client.get("/api/search", params={"q": "Télévision"}).json()
|
|
assert [(item["kind"], item["id"]) for item in member_results] == [("project", own["id"])]
|
|
assert all(item["id"] != television["id"] for item in member_results)
|
|
assert not any(item["kind"] == "group" for item in member_results)
|
|
|