Skip to content

Commit 20aa33d

Browse files
committed
Added test for controller_response and generic patch
1 parent ad96d2b commit 20aa33d

File tree

2 files changed

+148
-0
lines changed

2 files changed

+148
-0
lines changed

tests/test_controller_response.py

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
import uuid
2+
3+
import pytest
4+
from pydantic import BaseModel
5+
6+
from ninja_extra.controllers.response import (
7+
ControllerResponse,
8+
ControllerResponseMeta,
9+
Detail,
10+
Id,
11+
Ok,
12+
)
13+
14+
15+
class ASchema(BaseModel):
16+
age: int
17+
18+
19+
def test_controller_response_raise_type_error_for_base_model():
20+
with pytest.raises(TypeError):
21+
ControllerResponse()
22+
23+
24+
def test_ok_normal_response_model():
25+
ok_any = Ok("this is normal response")
26+
assert ok_any.convert_to_schema().dict() == {"detail": "this is normal response"}
27+
assert ok_any.status_code == 200
28+
assert type(Ok) == ControllerResponseMeta
29+
30+
31+
def test_ok_generic_response_model():
32+
ok_a_schema = Ok[ASchema]
33+
ok_a_schema_instance = ok_a_schema(dict(age=34))
34+
assert "ASchema" in ok_a_schema_instance.get_schema().__name__
35+
assert ok_a_schema_instance.convert_to_schema().dict() == {"detail": {"age": 34}}
36+
assert ok_a_schema_instance.status_code == 200
37+
assert ok_a_schema == Ok[ASchema]
38+
dsd = type(ok_a_schema)
39+
assert type(ok_a_schema) == ControllerResponseMeta
40+
41+
42+
def test_id_normal_response_model():
43+
id_any = Id(852)
44+
assert id_any.convert_to_schema().dict() == {"id": 852}
45+
assert id_any.status_code == 201
46+
assert type(Id) == ControllerResponseMeta
47+
48+
49+
def test_id_generic_response_model():
50+
id_uuid = Id[uuid.UUID]
51+
uuid_value = uuid.uuid4()
52+
id_uuid_instance = id_uuid(uuid_value)
53+
assert "UUID" in id_uuid_instance.get_schema().__name__
54+
assert id_uuid_instance.convert_to_schema().dict() == {"id": uuid_value}
55+
assert id_uuid_instance.status_code == 201
56+
assert id_uuid == Id[uuid.UUID]
57+
assert type(id_uuid) == ControllerResponseMeta
58+
59+
60+
def test_details_normal_response_response_model():
61+
detail_any = Detail("this is normal response", 500)
62+
assert detail_any.convert_to_schema().dict() == {
63+
"detail": "this is normal response"
64+
}
65+
assert detail_any.status_code == 500
66+
assert type(Detail) == ControllerResponseMeta
67+
68+
69+
def test_details_generic_response_response_model():
70+
details_a_schema = Detail[ASchema]
71+
detail_a_schema_instance = details_a_schema(dict(age=34), 400)
72+
assert "ASchema" in detail_a_schema_instance.get_schema().__name__
73+
assert detail_a_schema_instance.convert_to_schema().dict() == {
74+
"detail": {"age": 34}
75+
}
76+
assert detail_a_schema_instance.status_code == 400
77+
assert details_a_schema == Detail[ASchema]
78+
assert type(details_a_schema) == ControllerResponseMeta

tests/test_generic_patch.py

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
import sys
2+
3+
import pytest
4+
5+
from ninja_extra.generic import GenericType
6+
from ninja_extra.schemas.response import (
7+
DetailSchema,
8+
IdSchema,
9+
NinjaPaginationResponseSchema,
10+
OkSchema,
11+
PaginatedResponseSchema,
12+
)
13+
14+
15+
class A(object):
16+
wrap_generic: str
17+
18+
19+
class AGenericPatch(GenericType, generic_base_name="A"):
20+
def get_generic_type(self, wrap_type):
21+
class _A(A):
22+
wrap_generic: wrap_type
23+
24+
return _A
25+
26+
27+
def test_generic_patch_works():
28+
B = AGenericPatch[int]
29+
assert str(B.__name__) == "A[int]"
30+
assert B.__annotations__["wrap_generic"] == int
31+
assert hasattr(B, "__generic_model__")
32+
assert B.__generic_model__ == AGenericPatch
33+
assert B == AGenericPatch[int]
34+
35+
36+
@pytest.mark.skipif(sys.version_info < (3, 7), reason="requires python < 3.7")
37+
@pytest.mark.parametrize(
38+
"generic_patch, generic_name",
39+
[
40+
(IdSchema, "IdSchema"),
41+
(OkSchema, "OkSchema"),
42+
(PaginatedResponseSchema, "PaginatedResponseSchema"),
43+
(NinjaPaginationResponseSchema, "NinjaPaginationResponseSchema"),
44+
(DetailSchema, "DetailSchema"),
45+
],
46+
)
47+
def test_response_schemas_generic_patch(generic_patch, generic_name):
48+
new_generic_object = generic_patch[int]
49+
assert str(new_generic_object.__name__) == f"{generic_name}[int]"
50+
assert hasattr(new_generic_object, "__generic_model__")
51+
assert new_generic_object.__generic_model__ == generic_patch
52+
assert new_generic_object == generic_patch[int]
53+
54+
55+
@pytest.mark.skipif(sys.version_info >= (3, 7), reason="requires python >= 3.7")
56+
@pytest.mark.parametrize(
57+
"generic_schema",
58+
[
59+
IdSchema,
60+
OkSchema,
61+
PaginatedResponseSchema,
62+
NinjaPaginationResponseSchema,
63+
DetailSchema,
64+
],
65+
)
66+
def test_response_schemas_generic_patch(generic_schema):
67+
new_generic_object = generic_schema[int]
68+
assert hasattr(new_generic_object, "__generic_model__")
69+
assert new_generic_object.__generic_model__ == generic_schema
70+
assert new_generic_object == generic_schema[int]

0 commit comments

Comments
 (0)