"""Tests for bulk lock report logic.""" from unittest.mock import patch from masters_registry.api import app from masters_registry.logic import bulk_tasks as task_logic from masters_registry.models import bulk_tasks as task_model from tests.helpers import patches def test_generate_bulk_lock_report_single_isrc_internal_conflict( setup_bulk_status_db, seed_bulk_status_db, default_task_data, valid_correlation_id): """Expect correct report for single ISRC failure internal conflict.""" task_data = default_task_data report_values = { 'failed_isrcs': False, 'successful_isrcs': True, 'isrcs': {'QA123': {'territories': [], 'failed_territories': ['AF']}}, 'reason': 'test lock reason' } task_data['result'] = report_values task = task_model.TaskStatus(**task_data) seed_bulk_status_db([task]) with app.app_context(), patch('masters_registry.logic.bulk_tasks.s3') as mock_s3: mock_s3.check_if_file_exists.return_value = False task_logic.generate_report( 1, valid_correlation_id, import_report_type='isrc') finish_date = str(patches.TEST_TIME_AS_DATETIME).split(' ') expected_key = 'masters-registry-reports/bulk-action/' \ '{}_Bulk_Lock_Territories_ISRC_1.csv'.\ format(finish_date[0]) mock_s3.check_if_file_exists.assert_called() mock_s3.upload_file_object.assert_called() mock_s3.get_file_url.assert_called_with(expected_key) def test_generate_bulk_lock_report_single_isrc_internal_conflict_success( setup_bulk_status_db, seed_bulk_status_db, default_task_data, valid_correlation_id): """Expect correct report for single ISRC success with internal conflict. Some territories have internal conflict so they should be displayed in separate rows from territories that have no conflict. """ task_data = default_task_data report_values = { 'reason': 'test lock reason', 'successful_isrcs': True, 'failed_isrcs': True, 'isrcs': { 'QA123': {'failed_territories': ['AF'], 'territories': ['AD']}} } task_data['result'] = report_values task = task_model.TaskStatus(**task_data) seed_bulk_status_db([task]) with app.app_context(), patch('masters_registry.logic.bulk_tasks.s3') as mock_s3: mock_s3.check_if_file_exists.return_value = False task_logic.generate_report( 1, valid_correlation_id, import_report_type='isrc') finish_date = str(patches.TEST_TIME_AS_DATETIME).split(' ') expected_key = 'masters-registry-reports/bulk-action/' \ '{}_Bulk_Lock_Territories_ISRC_1.csv'.\ format(finish_date[0]) mock_s3.check_if_file_exists.assert_called() mock_s3.upload_file_object.assert_called() mock_s3.get_file_url.assert_called_with(expected_key) def test_generate_bulk_lock_report_multiple_isrcs_internal_conflict( setup_bulk_status_db, seed_bulk_status_db, default_task_data, valid_correlation_id): """Expect correct report for multiple ISRCs failure. Contains ISRC with internal conflict and should be displayed correctly. """ task_data = default_task_data report_values = { 'reason': 'test lock reason', 'successful_isrcs': True, 'failed_isrcs': True, 'isrcs': { 'QA123': {'failed_territories': ['AF'], 'territories': []}, 'QA456': {'failed_territories': [], 'territories': ['AD']}} } task_data['result'] = report_values task = task_model.TaskStatus(**task_data) seed_bulk_status_db([task]) with app.app_context(), patch('masters_registry.logic.bulk_tasks.s3') as mock_s3: mock_s3.check_if_file_exists.return_value = False task_logic.generate_report( 1, valid_correlation_id, import_report_type='isrc') finish_date = str(patches.TEST_TIME_AS_DATETIME).split(' ') expected_key = 'masters-registry-reports/bulk-action/' \ '{}_Bulk_Lock_Territories_ISRC_1.csv'.\ format(finish_date[0]) mock_s3.check_if_file_exists.assert_called() mock_s3.upload_file_object.assert_called() mock_s3.get_file_url.assert_called_with(expected_key)