"""Type validation module unit tests.""" from marshmallow import ValidationError import pytest from lambdacommon import validators @pytest.mark.parametrize( 'mime_type, expected_transcoding_type, expected_file_type', [ ('image/jpeg', 'image', 'jpeg'), ('image/pjpeg', 'image', 'jpeg'), ('image/tiff', 'image', 'tiff'), ('image/x-tiff', 'image', 'tiff'), ('audio/wav', 'audio', 'wav'), ('audio/x-wav', 'audio', 'wav'), ('audio/flac', 'audio', 'flac'), ('audio/mp4', 'audio', 'mp4'), ('audio/flac; charset=UTF-8', 'audio', 'flac'), ('audio/wav; charset=UTF-8', 'audio', 'wav'), ('plain/text', 'unknown', 'unknown'), ('audio/x-m4a; charset=UTF-8', 'audio', 'm4a') ]) def test_get_transcoding_type( mime_type, expected_transcoding_type, expected_file_type): """Test get_transcoding_type function.""" fake_s3_object = {'ContentType': mime_type} # test function call transcoding_type, file_type = validators.get_transcoding_type( fake_s3_object) # checking assert transcoding_type == expected_transcoding_type assert file_type == expected_file_type def test_validate_config(): """Test config validation passes for a proper config.""" payload = { 'asset_type': 'wav', 'config': { 'output_bucket_name': 'output-bucket', 'preview_bucket_name': 'output-bucket', 'elastic_transcoder_id': '123' } } assert validators.validate_config(payload) def test_missing_config(): """Test config validation fails for missing config.""" payload = { 'asset_type': 'wav' } with pytest.raises(ValidationError): assert validators.validate_config(payload) def test_incomplete_config(): """Test config validation fails for missing fields.""" payload = { 'config': { 'output_bucket_name': 'output-bucket', 'preview_bucket_name': 'output-bucket' } } with pytest.raises(ValidationError): assert validators.validate_config(payload) def test_validate_lambda_event(): """Test lambda event validation passes for a proper object.""" event = { 'bucket': 'some-bucket', 'key': 'filename.wav', 'transcoding_type': 'audio', 'file_type': 'wav', 'config': { 'output_bucket_name': 'output-bucket', 'preview_bucket_name': 'output-bucket', 'elastic_transcoder_id': '123' } } assert validators.validate_lambda_event(event) def test_incomplete_lambda_event(): """Test lambda event validation fails for missing fields.""" event = { 'bucket': 'some-bucket', 'transcoding_type': 'audio', 'key': 'filename.wav', 'config': { 'output_bucket_name': 'output-bucket', 'preview_bucket_name': 'output-bucket', 'elastic_transcoder_id': '123' } } with pytest.raises(ValidationError): assert validators.validate_lambda_event(event)