"""Functional testcases for file_upload_config.""" from datetime import datetime, timezone from abacus_common_logic.constants.error import ERROR_ENTITY_DOES_NOT_EXIST from abacus_file_upload.constants import UPLOAD_TYPES from abacus_file_upload.tests.utils.factories import ( FileUploadConfigFactory, ) class TestGetFileUploadConfig: """Tests for GET /file-upload-config/ endpoint.""" def test_get_file_upload_config_by_id(self, fixture_client): """Test to get FileUploadConfig by ID.""" mock_file_upload_config = FileUploadConfigFactory.create( file_upload_config_id=1, upload_type=UPLOAD_TYPES.ADJUSTMENTS, s3_key_template='{year}/{month}/{file_key}.{ext}', allowed_file_types=['csv', 'xlsx'], max_file_size_bytes=10485760, # 10MB multipart_threshold_bytes=104857600, # 100MB min_multipart_chunk_size_bytes=10485760, # 10MB description='Test config', event_name='test_event', ) file_upload_config_id = mock_file_upload_config.file_upload_config_id result = fixture_client.get(f'/file-upload-config/{file_upload_config_id}') assert result.status_code == 200 assert result.json == { 'file_upload_config_id': file_upload_config_id, 'upload_type': mock_file_upload_config.upload_type, 's3_key_template': mock_file_upload_config.s3_key_template, 'allowed_file_types': mock_file_upload_config.allowed_file_types, 'max_file_size_bytes': mock_file_upload_config.max_file_size_bytes, 'multipart_threshold_bytes': mock_file_upload_config.multipart_threshold_bytes, 'min_multipart_chunk_size_bytes': mock_file_upload_config.min_multipart_chunk_size_bytes, 'description': mock_file_upload_config.description, 'event_name': mock_file_upload_config.event_name, } def test_get_non_existent_file_upload_config(self, fixture_client): """Test to get non existent FileUploadConfig.""" result = fixture_client.get('/file-upload-config/9999') assert result.status_code == 404 assert result.data.decode('utf-8') == "Upload config with ID '9999' not found" def test_get_soft_deleted_file_upload_config(self, fixture_client): """Test to get soft deleted FileUploadConfig by ID.""" mock_file_upload_config = FileUploadConfigFactory.create( deleted_by='Test User', deleted_at=datetime(2025, 1, 1, 11, 0, 0, tzinfo=timezone.utc), ) file_upload_config_id = mock_file_upload_config.file_upload_config_id result = fixture_client.get(f'/file-upload-config/{file_upload_config_id}') assert result.status_code == 404 assert ( result.data.decode('utf-8') == f"Upload config with ID '{file_upload_config_id}' not found" ) class TestSoftFileUploadConfig: """Tests for DELETE /file-upload-config/ endpoint.""" def test_soft_delete_file_upload_config_by_id(self, fixture_client): """Test to soft delete FileUploadConfig by ID.""" mock_file_upload_config = FileUploadConfigFactory.create() file_upload_config_id = mock_file_upload_config.file_upload_config_id result = fixture_client.delete(f'/file-upload-config/{file_upload_config_id}') assert result.status_code == 204 def test_soft_delete_non_existent_file_upload_config(self, fixture_client): """Test to soft delete non existent FileUploadConfig by ID.""" file_upload_config_id = 1234 result = fixture_client.delete(f'/file-upload-config/{file_upload_config_id}') assert result.status_code == 404 assert result.json['message'] == ERROR_ENTITY_DOES_NOT_EXIST.format( object_type='FileUploadConfig', object_id=file_upload_config_id, ) def test_soft_delete_already_deleted_file_upload_config(self, fixture_client): """Test to soft delete already deleted FileUploadConfig by ID.""" mock_file_upload_config = FileUploadConfigFactory.create( deleted_by='Test User', deleted_at=datetime(2025, 1, 1, 11, 0, 0, tzinfo=timezone.utc), ) file_upload_config_id = mock_file_upload_config.file_upload_config_id result = fixture_client.delete(f'/file-upload-config/{file_upload_config_id}') assert result.status_code == 400 assert result.json['message'] == 'Specified instance is already deleted.'