import pytest
from api.v1.modules.public.reference_data.customs_warehouses.routes import router
from fastapi import FastAPI
from fastapi.testclient import TestClient

app = FastAPI()
app.include_router(router)
client = TestClient(app)


@pytest.mark.usefixtures("client", "access_token")
def test_list_customs_warehouses(client, access_token):
    headers = {"Authorization": f"Bearer {access_token}"}
    response = client.get("/customs-warehouses/", headers=headers)
    assert response.status_code == 200
    assert "items" in response.json()
    assert "page" in response.json()
    assert "page_size" in response.json()


@pytest.mark.usefixtures("client", "access_token")
def test_get_customs_warehouse_not_found(client, access_token):
    headers = {"Authorization": f"Bearer {access_token}"}
    response = client.get(
        "/customs-warehouses/invalid_key/invalid_customs", headers=headers
    )
    assert response.status_code == 404


def test_create_customs_warehouse_forbidden():
    response = client.post(
        "/customs-warehouses/",
        json={"key": "TST", "customs": "TST", "description": "Test"},
    )
    assert response.status_code in (403, 405, 404)


def test_update_customs_warehouse_forbidden():
    response = client.put(
        "/customs-warehouses/TST/TST",
        json={"key": "TST", "customs": "TST", "description": "Test"},
    )
    assert response.status_code in (403, 405, 404)


def test_delete_customs_warehouse_forbidden():
    response = client.delete("/customs-warehouses/TST/TST")
    assert response.status_code in (403, 405, 404)
