"""Tests for exceptions module.""" import unittest from utils.exceptions import ( APIError, BadGateway, BadRequest, ServiceUnavailable, TooManyRequests, Unauthorized, UnsupportedMediaType, ) class TestAPIError(unittest.TestCase): """Test APIError class and its subclasses.""" def test_api_error(self): obj = APIError() self.assertIs(obj.detail, None) self.assertIs(obj.code, None) self.assertIs(obj.status_code, None) self.assertIs(obj.extra, None) self.assertEqual(obj.to_dict(), {"code": None, "detail": None}) obj.detail = "Bad Request." obj.code = "bad_request" obj.status_code = 400 obj.extra = {"foo": "bar"} self.assertEqual(obj.to_dict(), {"code": "bad_request", "detail": "Bad Request.", "extra": {"foo": "bar"}}) obj = APIError("Not Found.", "not_found", 404, {"url": "example.com"}) self.assertEqual(obj.detail, "Not Found.") self.assertEqual(obj.code, "not_found") self.assertEqual(obj.status_code, 404) self.assertEqual(obj.extra, {"url": "example.com"}) self.assertEqual(obj.to_dict(), {"code": "not_found", "detail": "Not Found.", "extra": {"url": "example.com"}}) obj.detail = "Bad Gateway." obj.code = "bad_gateway" obj.extra = None self.assertEqual(obj.to_dict(), {"code": "bad_gateway", "detail": "Bad Gateway."}) def test_subclasses(self): bad_request = BadRequest() self.assertEqual(bad_request.to_dict(), {"code": "bad_request", "detail": "Bad Request."}) unauthorized = Unauthorized() self.assertEqual(unauthorized.to_dict(), {"code": "unauthorized", "detail": "Unauthorized."}) unsupported_media_type = UnsupportedMediaType() self.assertEqual( unsupported_media_type.to_dict(), {"code": "unsupported_media_type", "detail": "Unsupported Media Type."} ) too_many_requests = TooManyRequests() self.assertEqual(too_many_requests.to_dict(), {"code": "too_many_requests", "detail": "Too Many Requests."}) bad_gateway = BadGateway() self.assertEqual(bad_gateway.to_dict(), {"code": "bad_gateway", "detail": "Bad Gateway."}) service_unavailable = ServiceUnavailable() self.assertEqual( service_unavailable.to_dict(), {"code": "service_unavailable", "detail": "Service Unavailable."} )