"""Tests for Handlers.""" import json from unittest.mock import MagicMock, patch import pytest from flask.testing import FlaskClient from werkzeug.exceptions import BadRequest, Conflict, HTTPException, NotFound from gridgen import ( api, handlers, # noqa ) @pytest.fixture def fixture_client() -> FlaskClient: """Create an api test client fixture.""" return api.app.test_client() def test_health(fixture_client: FlaskClient) -> None: """Test health handler.""" response = fixture_client.get("/hello/") assert response.status_code == 200 @patch( "gridgen.logic.manager.validate", return_value={"product_nos": [], "errors": []}, ) def test_verify(mock_obj: MagicMock, fixture_client: FlaskClient) -> None: """Test verify handler.""" result = fixture_client.get("/release/123") assert result.status_code == 200 @patch( "gridgen.logic.manager.synchronize", return_value="123456789", ) def test_populate(mock_obj: MagicMock, fixture_client: FlaskClient) -> None: """Test populate handler.""" result = fixture_client.post("/release/456") assert result.status_code == 200 @pytest.mark.parametrize( "mock_exception, status_code, message", [ (NotFound("not found error"), 404, "not found error"), (BadRequest("bad request"), 400, "bad request"), (Conflict("conflict"), 409, "conflict"), ], ) def test_http_exception_handler( mock_exception: HTTPException, status_code: int, message: str ) -> None: """Verify http_exception_handler returns correct status code and message.""" server_response = handlers.http_exception_handler(mock_exception) server_response_json = json.loads(server_response.data.decode()) assert server_response.status_code == status_code assert server_response_json["message"] == message assert server_response_json["code"] == message.replace(" ", "_")