import json import pytest from pydantic import ValidationError from src.asset_upload.models import AssetUploadValidationRequest class TestAssetUploadValidationRequest: def test_parses_minimal_body(self) -> None: asset_upload_validation_request = AssetUploadValidationRequest.model_validate_json( json.dumps({"task_token": "tok", "asset_upload_type": "atmos"}), ) assert asset_upload_validation_request.task_token == "tok" assert asset_upload_validation_request.asset_upload_type == "atmos" def test_silently_ignores_domain_fields(self) -> None: body = { "task_token": "tok", "asset_upload_type": "atmos", "atmos_bucket": "b", "atmos_key": "k", "stereo_reference_bucket": "sb", "stereo_reference_key": "sk", "completely_unknown": 42, } asset_upload_validation_request = AssetUploadValidationRequest.model_validate_json(json.dumps(body)) assert asset_upload_validation_request.task_token == "tok" assert asset_upload_validation_request.asset_upload_type == "atmos" assert not hasattr(asset_upload_validation_request, "atmos_bucket") @pytest.mark.parametrize( "missing_field", ["task_token", "asset_upload_type"], ) def test_rejects_missing_required_field(self, missing_field: str) -> None: body = {"task_token": "tok", "asset_upload_type": "atmos"} del body[missing_field] with pytest.raises(ValidationError, match=missing_field): AssetUploadValidationRequest.model_validate_json(json.dumps(body)) @pytest.mark.parametrize( "empty_field", ["task_token", "asset_upload_type"], ) def test_rejects_empty_string_field(self, empty_field: str) -> None: body = {"task_token": "tok", "asset_upload_type": "atmos"} | {empty_field: ""} with pytest.raises(ValidationError, match="String should have at least 1 character"): AssetUploadValidationRequest.model_validate_json(json.dumps(body))