1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
|
import pytest
from main import router
from ninja.testing import TestClient
response_missing = {
"detail": [
{
"type": "missing",
"loc": ["query", "query"],
"msg": "Field required",
}
]
}
response_not_valid_int = {
"detail": [
{
"type": "int_parsing",
"loc": ["query", "query"],
"msg": "Input should be a valid integer, unable to parse string as an integer",
}
]
}
response_not_valid_int_float = {
"detail": [
{
"type": "int_parsing",
"loc": ["query", "query"],
"msg": "Input should be a valid integer, unable to parse string as an integer",
}
]
}
client = TestClient(router)
@pytest.mark.parametrize(
"path,expected_status,expected_response",
[
("/query", 422, response_missing),
("/query?query=baz", 200, "foo bar baz"),
("/query?not_declared=baz", 422, response_missing),
("/query/optional", 200, "foo bar"),
("/query/optional?query=baz", 200, "foo bar baz"),
("/query/optional?not_declared=baz", 200, "foo bar"),
("/query/int", 422, response_missing),
("/query/int?query=42", 200, "foo bar 42"),
("/query/int?query=42.5", 422, response_not_valid_int_float),
("/query/int?query=baz", 422, response_not_valid_int),
("/query/int?not_declared=baz", 422, response_missing),
("/query/int/optional", 200, "foo bar"),
("/query/int/optional?query=50", 200, "foo bar 50"),
("/query/int/optional?query=foo", 422, response_not_valid_int),
("/query/int/default", 200, "foo bar 10"),
("/query/int/default?query=50", 200, "foo bar 50"),
("/query/int/default?query=foo", 422, response_not_valid_int),
("/query/list?query=a&query=b&query=c", 200, "a,b,c"),
("/query/list-optional?query=a&query=b&query=c", 200, "a,b,c"),
("/query/list-optional?query=a", 200, "a"),
("/query/list-optional", 200, None),
("/query/param", 200, "foo bar"),
("/query/param?query=50", 200, "foo bar 50"),
("/query/param-required", 422, response_missing),
("/query/param-required?query=50", 200, "foo bar 50"),
("/query/param-required/int", 422, response_missing),
("/query/param-required/int?query=50", 200, "foo bar 50"),
("/query/param-required/int?query=foo", 422, response_not_valid_int),
("/query/aliased-name?aliased.-_~name=foo", 200, "foo bar foo"),
("/query/str/optional", 200, "foo bar"),
("/query/str/optional?query=test", 200, "foo bar test"),
],
)
def test_get_path(path, expected_status, expected_response):
response = client.get(path)
resp = response.json()
print(resp)
assert response.status_code == expected_status
assert resp == expected_response
@pytest.mark.parametrize(
"path,query_params,expected_status,expected_response",
[
("/query", {}, 422, response_missing),
("/query", {"query": "baz"}, 200, "foo bar baz"),
("/query", {"not_declared": "baz"}, 422, response_missing),
("/query/optional", {}, 200, "foo bar"),
("/query/optional", {"query": "baz"}, 200, "foo bar baz"),
("/query/optional", {"not_declared": "baz"}, 200, "foo bar"),
("/query/int", {}, 422, response_missing),
("/query/int", {"query": "42"}, 200, "foo bar 42"),
("/query/int", {"query": "42.5"}, 422, response_not_valid_int_float),
("/query/int", {"query": "baz"}, 422, response_not_valid_int),
("/query/int", {"not_declared": "baz"}, 422, response_missing),
("/query/int/optional", {}, 200, "foo bar"),
("/query/int/optional", {"query": "50"}, 200, "foo bar 50"),
("/query/int/optional", {"query": "foo"}, 422, response_not_valid_int),
("/query/int/default", {}, 200, "foo bar 10"),
("/query/int/default", {"query": "50"}, 200, "foo bar 50"),
("/query/int/default", {"query": "foo"}, 422, response_not_valid_int),
("/query/list", {"query": ["a", "b", "c"]}, 200, "a,b,c"),
("/query/list-optional", {"query": ["a", "b", "c"]}, 200, "a,b,c"),
("/query/list-optional", {"query": ["a"]}, 200, "a"),
("/query/list-optional", {}, 200, None),
("/query/param", {}, 200, "foo bar"),
("/query/param", {"query": "50"}, 200, "foo bar 50"),
("/query/param-required", {}, 422, response_missing),
("/query/param-required", {"query": "50"}, 200, "foo bar 50"),
("/query/param-required/int", {}, 422, response_missing),
("/query/param-required/int", {"query": "50"}, 200, "foo bar 50"),
("/query/param-required/int", {"query": "foo"}, 422, response_not_valid_int),
("/query/aliased-name", {"aliased.-_~name": "foo"}, 200, "foo bar foo"),
],
)
def test_get_query_params(path, query_params, expected_status, expected_response):
response = client.get(path, query_params=query_params)
resp = response.json()
print(resp)
assert response.status_code == expected_status
assert resp == expected_response
|