from typing import Any, List

import pytest
from fastapi.params import Body, Cookie, Depends, Header, Param, Path, Query

test_data: List[Any] = ["teststr", None, ..., 1, []]


def get_user():
    return {}  # pragma: no cover


@pytest.fixture(scope="function", params=test_data)
def params(request):
    return request.param


def test_param_repr(params):
    assert repr(Param(params)) == "Param(" + str(params) + ")"


def test_path_repr(params):
    assert repr(Path(params)) == "Path(Ellipsis)"


def test_query_repr(params):
    assert repr(Query(params)) == "Query(" + str(params) + ")"


def test_header_repr(params):
    assert repr(Header(params)) == "Header(" + str(params) + ")"


def test_cookie_repr(params):
    assert repr(Cookie(params)) == "Cookie(" + str(params) + ")"


def test_body_repr(params):
    assert repr(Body(params)) == "Body(" + str(params) + ")"


def test_depends_repr():
    assert repr(Depends()) == "Depends(NoneType)"
    assert repr(Depends(get_user)) == "Depends(get_user)"
    assert repr(Depends(use_cache=False)) == "Depends(NoneType, use_cache=False)"
    assert (
        repr(Depends(get_user, use_cache=False)) == "Depends(get_user, use_cache=False)"
    )
