import pytest
from httpx import ASGITransport, AsyncClient


@pytest.mark.anyio
async def test_rest_create_list_reveal(app):
    async with AsyncClient(transport=ASGITransport(app=app), base_url="http://test") as client:
        response = await client.post(
            "/api/v1/secrets",
            json={
                "title": "Server",
                "purpose": "db01",
                "category": "infra",
                "tags": ["ssh"],
                "fields": [
                    {"name": "username", "value": "deploy", "encrypted": False, "position": 1},
                    {
                        "name": "password",
                        "value": "pass123",
                        "encrypted": True,
                        "masked": True,
                        "position": 2,
                    },
                ],
            },
        )
        assert response.status_code == 200, response.text
        secret_id = response.json()["id"]

        response = await client.get("/api/v1/secrets?q=deploy")
        assert response.status_code == 200
        assert response.json()["total"] == 1
        fields = response.json()["items"][0]["fields"]
        assert {field["name"]: field["value"] for field in fields}["username"] == "deploy"
        assert {field["name"]: field["value"] for field in fields}["password"] is None

        response = await client.post(f"/api/v1/secrets/{secret_id}/reveal")
        assert response.status_code == 200
        assert {field["name"]: field["value"] for field in response.json()["fields"]}[
            "password"
        ] == "pass123"
