"""Test labelcopy_loader module.""" from unittest import mock from unittest.mock import patch, MagicMock import pytest from sme_labelcopy_loader import config from sme_labelcopy_loader.labelcopy_loader import unload_labelcopy_data @pytest.yield_fixture def mock_boto3(): """Mock boto3.""" path = 'sme_labelcopy_loader.labelcopy_loader.boto3' with patch(path) as boto3: mock_resource = MagicMock() boto3.resource.return_value = mock_resource yield mock_resource @pytest.yield_fixture def mock_psycopg2(): """Mock psycopg2.""" path = 'sme_labelcopy_loader.labelcopy_loader.psycopg2' with patch(path) as psycopg2: mock_client = MagicMock() psycopg2.connect.return_value = mock_client yield mock_client @pytest.yield_fixture def mock_csv(): """Mock csv.""" path = 'sme_labelcopy_loader.labelcopy_loader.csv' with patch(path) as csv: yield csv @pytest.yield_fixture def mock_os(): """Yield mock os.""" path = 'sme_labelcopy_loader.labelcopy_loader.os' with patch(path) as os_module: yield os_module @pytest.yield_fixture def mock_get_secret(): """Yield get_secret.""" path = 'sme_labelcopy_loader.labelcopy_loader.get_secret' with patch(path) as get_secret: yield get_secret @pytest.yield_fixture def mock_get_logger(): """Yield get_secret.""" path = 'sme_labelcopy_loader.labelcopy_loader.get_logger' with patch(path) as get_logger: yield get_logger def test_unload_labelcopy_data( mock_boto3, mock_psycopg2, mock_csv, mock_os, monkeypatch, mock_get_secret, mock_get_logger): """Test unload_labelcopy_data.""" monkeypatch.setenv('Environment', 'test') mock_tables = { 'table1': '', 'table2': 'where c is not NULL' } monkeypatch.setattr(config, 'tables', mock_tables) with patch('builtins.open') as mock_file: unload_labelcopy_data('2020-10-01', '10.10.10.10', 6432) mock_file.assert_has_calls([ mock.call('sme_labelcopy_table1_2020-10-01.csv', 'w', newline=''), mock.call('sme_labelcopy_table2_2020-10-01.csv', 'w', newline='') ], any_order=True) mock_os.remove.assert_has_calls([ mock.call('sme_labelcopy_table1_2020-10-01.csv'), mock.call('sme_labelcopy_table2_2020-10-01.csv')]) mock_boto3.meta.client.upload_file.mock_get_secret( 'sme_labelcopy_2020-10-01.csv', 'dev-cucumbers', 'sme_labelcopy_ingest/source/2020-10-01/sme_labelcopy_2020-10-01.csv', Config=mock.ANY) mock_psycopg2.cursor.return_value.__enter__.return_value.execute( config.sql) mock_get_secret.mock_get_secret('psql_password')