"""The one index the global search matches against.""" from fastapi.testclient import TestClient from fluksio.core.config import settings PREFIX = f"{settings.API_V1_STR}/search" FLOWS = f"{settings.API_V1_STR}/flows" DASHBOARDS = f"{settings.API_V1_STR}/dashboards" SECRETS = f"{settings.API_V1_STR}/secrets" def test_search_requires_authentication(client: TestClient) -> None: assert client.get(f"{PREFIX}/").status_code == 401 def test_index_reaches_inside_flows_and_dashboards( client: TestClient, superuser_token_headers: dict[str, str] ) -> None: """A node and a widget are the point: neither is on any list endpoint.""" client.put( f"{FLOWS}/searchable", headers=superuser_token_headers, json={ "name": "searchable", "title": "Searchable", "nodes": [{"id": "sensor", "type": "python", "title": "Hall sensor"}], }, ) client.put( f"{DASHBOARDS}/hall", headers=superuser_token_headers, json={ "name": "hall", "title": "Hall", "widgets": [ { "id": "temperature", "type": "stat", "title": "Temperature", "layout": {"lg": {"x": 0, "y": 0, "w": 3, "h": 2}}, "config": {"message": "hall.temperature", "dtype": "float"}, } ], "version": 0, }, ) entries = client.get(f"{PREFIX}/", headers=superuser_token_headers).json() # Keyed on the parent too: an id is only unique within the document it is # in, and the other suites seed their own `sensor` and `temperature`. found = { (entry["category"], entry["parent"], entry["name"]): entry for entry in entries } assert found[("flow", "", "searchable")]["title"] == "Searchable" assert found[("node", "searchable", "sensor")]["title"] == "Hall sensor" assert found[("node", "searchable", "sensor")]["kind"] == "python" assert found[("dashboard", "", "hall")]["title"] == "Hall" assert found[("widget", "hall", "temperature")]["title"] == "Temperature" assert found[("widget", "hall", "temperature")]["kind"] == "stat" def test_secrets_are_named_only_to_a_superuser( client: TestClient, superuser_token_headers: dict[str, str], normal_user_token_headers: dict[str, str], ) -> None: client.put( f"{SECRETS}/broker_password", headers=superuser_token_headers, json={"value": "hunter2"}, ) def secrets(headers: dict[str, str]) -> set[str]: entries = client.get(f"{PREFIX}/", headers=headers).json() return {e["name"] for e in entries if e["category"] == "secret"} assert "broker_password" in secrets(superuser_token_headers) assert secrets(normal_user_token_headers) == set()