"""Tests for deactivation endpoint schemas.""" from typing import Any, Type import pytest from pydantic import BaseModel from pdp.fastapi.schemas.deactivation import ( DeactivateAllResponse, DeactivateOneResponse, DeactivateResponse, DeactivationSummary, ) @pytest.mark.parametrize( "payload, expected", [ pytest.param( {}, DeactivationSummary.model_validate({"deleted": 0, "remaining": 0}), id="Empty input is OK.", ), pytest.param( {"deleted": 1, "remaining": 2}, DeactivationSummary.model_validate({"deleted": 1, "remaining": 2}), id="Input with valid values is OK.", ), pytest.param( {"deleted": 1}, DeactivationSummary.model_validate({"deleted": 1, "remaining": 0}), id="Input with missing 'remaining' field is OK.", ), pytest.param( {"remaining": 1}, DeactivationSummary.model_validate({"deleted": 0, "remaining": 1}), id="Input with missing 'deleted' field is OK.", ), pytest.param( {"remaining": "9999"}, DeactivationSummary.model_validate({"deleted": 0, "remaining": 9999}), id="Input with string 'remaining' value is OK.", ), pytest.param( {"deleted": "8888"}, DeactivationSummary.model_validate({"deleted": 8888, "remaining": 0}), id="Input with string 'deleted' value is OK.", ), ], ) def test_deactivation_summary(payload: Any, expected: DeactivationSummary) -> None: """Test the DeactivationSummary schema.""" actual = DeactivationSummary.model_validate(payload) assert actual == expected @pytest.mark.parametrize( "payload, expect_exception, expected", [ pytest.param({}, True, None, id="Empty input will FAIL."), pytest.param( {"summary": {}}, False, {"summary": {"deleted": 0, "remaining": 0}}, id="An empty 'summary' value is OK.", ), pytest.param( {"summary": {"deleted": 99, "remaining": 1}}, False, {"summary": {"deleted": 99, "remaining": 1}}, id="A valid object is OK.", ), ], ) @pytest.mark.parametrize( "schema_class", [ (DeactivateResponse), (DeactivateAllResponse), (DeactivateOneResponse), ], ) def test_deactivate_response( schema_class: Type[BaseModel], payload: Any, expect_exception: bool, expected: dict[str, Any], ) -> None: """Test the DeactivateResponse schema, and its variants.""" if expect_exception: with pytest.raises(Exception): schema_class.model_validate(payload) else: actual = schema_class.model_validate(payload) assert actual == schema_class(**expected)