File: test_query.py

package info (click to toggle)
django-ninja 1.6.0-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 11,280 kB
  • sloc: python: 15,956; javascript: 1,689; makefile: 39; sh: 25
file content (123 lines) | stat: -rw-r--r-- 5,169 bytes parent folder | download | duplicates (2)
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