"""Shared fixtures for tests.""" from datetime import datetime, timezone import pytest from abacus_common_logic.connectors.database import db from abacus_common_logic.db.adapters import get_adapter from abacus_file_upload.constants import UPLOAD_STATUSES, UPLOAD_TYPES from abacus_file_upload.tests.utils.factories import ( FileUploadConfigFactory, FileUploadFactory, ) # --- DB Fixtures --- @pytest.fixture def fresh_db(): """Refresh the test database.""" top_level_tables = ( 'abacus_outbox', 'file_upload', 'file_upload_config', ) with db.engine.connect() as conn: get_adapter(conn).truncate_tables(conn, top_level_tables) # --- Mock Fixtures --- @pytest.fixture def mock_file_upload_config(): """Create a mock FileUploadConfig for unit testing using factory.""" return FileUploadConfigFactory.build( 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', ) @pytest.fixture def mock_file_upload(mock_file_upload_config): """Create a mock FileUpload for unit testing using factory.""" return FileUploadFactory.build( file_upload_id=1, file_upload_config=mock_file_upload_config, file_key='550e8400-e29b-41d4-a716-446655440000', original_file_name='test.csv', file_size_bytes=1024000, file_type='csv', mime_type='text/csv', s3_bucket='test-bucket', s3_key='2025/01/550e8400-e29b-41d4-a716-446655440000.csv', md5sum='5d41402abc4b2a76b9719d911017c592', upload_status=UPLOAD_STATUSES.INIT, multipart_upload_id=None, total_parts=1, upload_metadata={}, error_message=None, completed_at=None, expires_at=datetime(2025, 1, 16, 11, 0, 0, tzinfo=timezone.utc), ) # --- Sample Data Fixtures --- @pytest.fixture def sample_upload_params(): """Sample parameters for initiating upload.""" return { 'upload_type': 'adjustments', 'filename': 'test.csv', 'file_size_bytes': 1024000, 'mime_type': 'text/csv', 'md5sum': '5d41402abc4b2a76b9719d911017c592', 'metadata': {'entity_id': 123}, } @pytest.fixture def sample_config_params(): """Sample parameters for creating config.""" return { 'upload_type': 'adjustments', 's3_key_template': '{year}/{month}/{file_key}.{ext}', 'allowed_file_types': ['csv', 'xlsx'], 'max_file_size_bytes': 10485760, 'multipart_threshold_bytes': 104857600, 'min_multipart_chunk_size_bytes': 10485760, 'description': 'Test config', }