"""Test integration.""" from unittest.mock import patch class MockConfig: """Config for testing.""" ENVIRONMENT = 'test' DYNAMO_TABLE = 'foo' S3_REPORT_BUCKET = 'bar' AWS_REGION = 'us-east-1' PRINT_AFTER_MODULO = 2 REPLACE_MISSING_ITEMS = True @patch('reports.replacement_generator.boto3') def test_check_for_missing_items(mock_boto): """Test integration.""" from reports.period_reports import PeriodReports from reports.replacement_generator import ReplacementGenerator # Setup getting the list of s3 files mock_boto.client.return_value.get_paginator.return_value.paginate.return_value = [ {'Contents': [{'Key': 'foo/bar/1L/1_0'}]}, {'Contents': [{'Key': 'foo/bar/2L/1_0'}]}, {'Contents': [{'Key': 'foo/bar/9L/1_0'}]}, ] # Set up calling ddb mock_boto.resource.return_value.Table.return_value.query.side_effect = [ {'Items': [1]}, {}, {'Items': [1]} ] period = PeriodReports(20, 'month', 'label') ReplacementGenerator.run(period) assert not mock_boto.resource.return_value.Table.return_value.put_item.call_count @patch('reports.replacement_generator.config', new=MockConfig()) @patch('reports.replacement_generator.boto3') def test_find_and_replace(mock_boto): """Test integration.""" from reports.period_reports import PeriodReports from reports.replacement_generator import ReplacementGenerator # Setup getting the list of s3 files mock_boto.client.return_value.get_paginator.return_value.paginate.return_value = [ {'Contents': [{'Key': 'foo/bar/user_id_type=1L/'}]}, {'Contents': [{'Key': 'foo/bar/user_id_type=1L/1_0'}]}, {'Contents': [{'Key': 'foo/bar/user_id_type=2L/1_0'}]}, {'Contents': [{'Key': 'foo/bar/user_id_type=9L/1_0'}]}, ] # Set up calling ddb mock_boto.resource.return_value.Table.return_value.query.side_effect = [ {'Items': [1]}, {'Items': []}, {'Items': [1]} ] mock_boto.resource.return_value.Table.return_value.put_item.return_value = {} period = PeriodReports(20, 'month', 'label') ReplacementGenerator.run(period) _, actual = mock_boto.resource.return_value.\ Table.return_value.put_item.call_args_list[0] assert actual.get('Item') == { 'file_type': 'AVRO', 'period_ids': '20', 's3_path': ( 's3://bar/schematized_files/' '20_label_all_all_month/user_id_type=2L/1_0' ), 'status': 'GENERATED', 'user_id_type': '2L', 'user_params': '20__all__AVRO__en_US' }