"""Tests for bulk resolve conflicts report logic.""" from unittest.mock import patch import pytest from masters_registry.api import app from masters_registry.constant import bulk_tasks_const from masters_registry.constant import field_const 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 @pytest.fixture def setup_bulk_resolve_bulk_task_result( setup_bulk_status_db, seed_bulk_status_db, default_task_data): """Creates MySQL task_status table and inserts a bulk task into it. Returns: func: function that should be called to setup DB and insert a bulk task """ def wrapped(result): """Wrapper that allows to call fixture from tests. report_values (dict): task result """ task_data = default_task_data task_data[field_const.TYPE] = ( bulk_tasks_const.BULK_RESOLVE_INTERNAL_CONFLICTS) task_data['result'] = result task = task_model.TaskStatus(**task_data) seed_bulk_status_db([task]) return wrapped @patch( 'masters_registry.models.ownership.get_tracks', new=patches.ownership_get_tracks_patch) def test_generate_bulk_resolve_conflicts_all_failed( setup_bulk_resolve_bulk_task_result, feature_engine): """Expect correct report for only failed ISRCs.""" report_values = { 'account_id': '12345', 'successful_isrcs': {}, 'failed_isrcs': {'QA3': [444]}, } setup_bulk_resolve_bulk_task_result(report_values) 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, 'correlation_id', import_report_type='isrc') finish_date = str(patches.TEST_TIME_AS_DATETIME).split(' ') expected_key = 'masters-registry-reports/bulk-action/' \ '{}_Bulk_Resolve_Conflicts_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) @patch( 'masters_registry.models.ownership.get_tracks', new=patches.ownership_get_tracks_patch) def test_generate_bulk_resolve_conflicts_all_succeeded( setup_bulk_resolve_bulk_task_result, feature_engine): """Expect correct report for only succeeded ISRCs.""" report_values = { 'account_id': '12345', 'successful_isrcs': {'QA1': {11: ['AF', 'AD']}}, 'failed_isrcs': {}, } setup_bulk_resolve_bulk_task_result(report_values) 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, 'correlation_id', import_report_type='isrc') finish_date = str(patches.TEST_TIME_AS_DATETIME).split(' ') expected_key = 'masters-registry-reports/bulk-action/' \ '{}_Bulk_Resolve_Conflicts_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) @patch( 'masters_registry.models.ownership.get_tracks', new=patches.ownership_get_tracks_patch) def test_generate_bulk_resolve_conflicts_no_conflicts( setup_bulk_resolve_bulk_task_result, feature_engine): """Expect correct report for a case when there were no conflicts.""" report_values = { 'account_id': '12345', 'successful_isrcs': {'QA1': {11: []}}, 'failed_isrcs': {}, } setup_bulk_resolve_bulk_task_result(report_values) 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, 'correlation_id', import_report_type='isrc') finish_date = str(patches.TEST_TIME_AS_DATETIME).split(' ') expected_key = 'masters-registry-reports/bulk-action/' \ '{}_Bulk_Resolve_Conflicts_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) @patch( 'masters_registry.models.ownership.get_tracks', new=patches.ownership_get_tracks_patch) def test_generate_bulk_resolve_conflicts( setup_bulk_resolve_bulk_task_result, feature_engine): """Expect correct report for a combination of succeeded and failed ISRCs""" report_values = { 'account_id': '12345', 'successful_isrcs': { 'QA1': {11: ['AF', 'AD'], 222: ['CA']}, 'QA2': {222: ['AF', 'AD'], 321: []}, }, 'failed_isrcs': { 'QA1': [12345, 444], 'QA3': [444] }, } setup_bulk_resolve_bulk_task_result(report_values) 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, 'correlation_id', import_report_type='isrc') finish_date = str(patches.TEST_TIME_AS_DATETIME).split(' ') expected_key = 'masters-registry-reports/bulk-action/' \ '{}_Bulk_Resolve_Conflicts_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)