import json import pytest from src.backend import responses as resp from src.backend.responses import RespAttr def test_protect_data(): """Attempt to use the 'data' keyword argument in a protected function.""" @resp._protect_data def func(**kwargs): return kwargs with pytest.raises(ValueError): func(data=...) sample_kwargs = {"kwarg": 123} @pytest.mark.parametrize( "status_code,success_expected", [ (200, True), (201, True), (400, False), (404, False), ], ) def test_json_response_kwargs_only(status_code, success_expected): """Test JSON response with only keyword arguments.""" result = getattr(resp, f"json_{status_code}")(**sample_kwargs) decoded_body = json.loads(result.body.decode()) expected_body = { **sample_kwargs, RespAttr.DATA: None, RespAttr.SUCCESS: success_expected, } if not success_expected: expected_body.pop(RespAttr.DATA) assert result.status_code == status_code assert decoded_body == expected_body @pytest.mark.parametrize("status_code", [200, 201]) def test_json_response_data(status_code): """Test JSON response with data.""" data = {"foo": "bar"} result = getattr(resp, f"json_{status_code}_data")(data) assert result.status_code == status_code assert json.loads(result.body.decode()) == { "data": data, RespAttr.SUCCESS: True, } @pytest.mark.parametrize( "func,status_code", [ (resp.json_422, 422), (resp.json_500, 500), ], ) def test_json_error(func, status_code): """Test JSON response with error.""" error_msg = "Error message" result = func(error=error_msg) decoded_body = json.loads(result.body.decode()) assert result.status_code == status_code assert decoded_body == { "error": error_msg, RespAttr.SUCCESS: False, }