Skip to content

Commit e091702

Browse files
committed
added coverage tests
1 parent b5879bc commit e091702

File tree

2 files changed

+92
-0
lines changed

2 files changed

+92
-0
lines changed

tests/test_fastapi_jsonapi/__init__.py

Whitespace-only changes.
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
import json
2+
from unittest.mock import MagicMock
3+
4+
import pytest
5+
from fastapi import status
6+
from starlette.datastructures import QueryParams
7+
8+
from fastapi_jsonapi.exceptions import InvalidFilters
9+
from fastapi_jsonapi.exceptions.json_api import BadRequest
10+
from fastapi_jsonapi.querystring import QueryStringManager
11+
12+
13+
def test__extract_item_key():
14+
manager = QueryStringManager(MagicMock())
15+
16+
key = "fields[user]"
17+
assert manager._extract_item_key(key) == "user"
18+
19+
with pytest.raises(BadRequest) as exc_info: # noqa: PT012
20+
key = "fields[user"
21+
manager._extract_item_key(key)
22+
23+
assert exc_info.value.status_code == status.HTTP_400_BAD_REQUEST
24+
assert exc_info.value.detail == {
25+
"errors": [
26+
{
27+
"status_code": status.HTTP_400_BAD_REQUEST,
28+
"source": {"parameter": "fields[user"},
29+
"title": "Bad Request",
30+
"detail": "Parse error",
31+
},
32+
],
33+
}
34+
35+
36+
def test_querystring():
37+
request = MagicMock()
38+
request.query_params = QueryParams([("fields[user]", "name")])
39+
manager = QueryStringManager(request)
40+
assert manager.querystring == {"fields[user]": "name"}
41+
42+
43+
def test_filters__errors():
44+
request = MagicMock()
45+
request.query_params = QueryParams([("filter", "not_json")])
46+
manager = QueryStringManager(request)
47+
48+
with pytest.raises(InvalidFilters) as exc_info:
49+
manager.filters
50+
51+
assert exc_info.value.status_code == status.HTTP_400_BAD_REQUEST
52+
assert exc_info.value.detail == {
53+
"errors": [
54+
{
55+
"status_code": status.HTTP_400_BAD_REQUEST,
56+
"source": {"parameter": "filters"},
57+
"title": "Invalid filters querystring parameter.",
58+
"detail": "Parse error",
59+
},
60+
],
61+
}
62+
63+
request.query_params = QueryParams(
64+
[
65+
(
66+
"filter",
67+
json.dumps(
68+
{
69+
"name": "",
70+
"op": "",
71+
"val": "",
72+
},
73+
),
74+
),
75+
],
76+
)
77+
manager = QueryStringManager(request)
78+
79+
with pytest.raises(InvalidFilters) as exc_info:
80+
manager.filters
81+
82+
assert exc_info.value.status_code == status.HTTP_400_BAD_REQUEST
83+
assert exc_info.value.detail == {
84+
"errors": [
85+
{
86+
"status_code": status.HTTP_400_BAD_REQUEST,
87+
"source": {"parameter": "filters"},
88+
"title": "Invalid filters querystring parameter.",
89+
"detail": "Incorrect filters format, expected list of conditions but got dict",
90+
},
91+
],
92+
}

0 commit comments

Comments
 (0)