Skip to content

Commit

Permalink
Add tests for BadRequest construtor
Browse files Browse the repository at this point in the history
  • Loading branch information
apragacz committed May 8, 2023
1 parent b6e0552 commit aa6efda
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 2 deletions.
4 changes: 2 additions & 2 deletions rest_registration/exceptions.py
Original file line number Diff line number Diff line change
Expand Up @@ -118,8 +118,8 @@ def _wrap_detail_in_dict(detail: _APIExceptionInput) -> Dict[str, List[Any]]:
def _extract_details(detail: _APIExceptionInput) -> List[Union[_Detail, StrOrPromise]]:
if detail is None:
return []
if isinstance(detail, Sequence):
return [ed for d in detail for ed in _extract_details(d)]
if isinstance(detail, Mapping):
return [ed for d in detail.values() for ed in _extract_details(d)]
if isinstance(detail, Sequence) and not isinstance(detail, str):
return [ed for d in detail for ed in _extract_details(d)]
return [detail]
50 changes: 50 additions & 0 deletions tests/test_exceptions.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
import pytest

from rest_registration.exceptions import BadRequest, ErrorDetail
from tests.helpers.settings import override_rest_registration_settings


@pytest.mark.parametrize(
"detail,"
"code,"
"expected_obj_detail", (
("test err", "test-err", ErrorDetail("test err", code="test-err")),
(None, None, ErrorDetail("Bad Request", code="bad-request")),
),
)
def test_bad_request_detail(detail, code, expected_obj_detail):
exc = BadRequest(detail=detail, code=code)
assert exc.detail == expected_obj_detail


@pytest.mark.parametrize(
"detail,"
"expected_obj_detail", [
pytest.param(
None,
{"non_field_errors": [ErrorDetail("Bad Request", code="bad-request")]},
id="none",
),
pytest.param(
["test err"],
{"non_field_errors": [ErrorDetail("test err", code="bad-request")]},
id="str_list",
),
pytest.param(
"test err",
{"non_field_errors": [ErrorDetail("test err", code="bad-request")]},
id="str",
),
pytest.param(
{"field": ["test err"]},
{"field": [ErrorDetail("test err", code="bad-request")]},
id="str_list_dict"
),
],
)
@override_rest_registration_settings({
'USE_NON_FIELD_ERRORS_KEY_FROM_DRF_SETTINGS': True,
})
def test_bad_request_detail_with_use_non_field_errors_key(detail, expected_obj_detail):
exc = BadRequest(detail=detail)
assert exc.detail == expected_obj_detail

0 comments on commit aa6efda

Please sign in to comment.