import unittest from contextlib import contextmanager from unittest.mock import Mock from exp_sf_storage.models.inbound_file_status import InboundFileStatusData, InboundFileStatusType from exp_sf_storage.models.inbound_file_status_mapping import InboundFileStatusMappingData from exp_results_process_lambda.entities import Input from exp_results_process_lambda.services.snowflake import SnowflakeService @contextmanager def ctx_manager_mock(**kwargs): yield int class SnowflakeServiceTestCase(unittest.TestCase): def setUp(self): self.sf_repo = Mock() self.pg_repo = Mock() self.pg_repo.advisory_locked_transaction.side_effect = ctx_manager_mock self.input = Input( archive_status='OK', chunks_count=10, content_name='foo', context='foo', dbx_state='OK', dest_bucket='foo_bucket', disassemble_content_status_id=11, file_lines_count=12, source_path='foo', start_dbx_status='OK', sync_dbx_status='OK', uow_id='bar', use_databricks=False, ) self.service = SnowflakeService( payload=self.input, sf_repository=self.sf_repo, pg_repository=self.pg_repo, logger=Mock(), ) def test_create_file_metadata__ok(self): slz_db_data = { 'dsp': 'foo', 'content_status_id': 123, 'report_name': 'bar', 'report_date': 'baz', 'context': 'foobar', 'licensor': 'bazbar', } status = InboundFileStatusType.LOADED bucket_parts = ['foo.gz', 'bar.gz'] self.service.create_file_metadata(slz_db_data, status, bucket_parts) self.sf_repo.create_file_metadata.assert_called_once_with( InboundFileStatusData( **slz_db_data, disassemble_content_status_id=11, total_split_chunks_number=self.input.chunks_count, total_file_row_count=self.input.file_lines_count, inbound_file_name=self.input.content_name, status=status, ), status_mappings_data=[ InboundFileStatusMappingData( disassemble_content_status_id=11, content_status_id=slz_db_data.get('content_status_id'), pipe_full_file_name=file_name, ) for file_name in bucket_parts ] )