"""Tests for conflict status module.""" import datetime from conflict_manager.constants import database as db_consts from conflict_manager.constants import error as error_consts from conflict_manager.constants import schema from conflict_manager.logic import conflict_status as conflict_status_logic from conflict_manager.models import conflict_status as conflict_status_model from conflict_manager.models import fact_conflict as fact_conflict_model def test_bulk_update_conflict_status(mocker): """Test bulk_update_conflict_status.""" existing_ids = ['2|2018-04-13|Test|assert'] mock_get_ids_to_update = mocker.patch.object( conflict_status_model, 'get_ids_to_update', return_value=set(existing_ids)) mocker.patch.object( fact_conflict_model, 'get_grouped_conflicts_ids', return_value={'1|2018-04-13|Test|assert', '2|2018-04-13|Test|assert'}) mock_create = mocker.patch.object(conflict_status_model, 'create') mock_update = mocker.patch.object(conflict_status_model, 'update') user_id = 123 grouped_conflicts_ids = [ { 'grouped_conflict_id': '1|2018-04-13|Test|assert', 'tuid': 1, 'conflict_date': '2018-04-13', 'conflicting_owner': 'Test', 'action': 'assert', }, { 'grouped_conflict_id': '2|2018-04-13|Test|assert', 'tuid': 2, 'conflict_date': '2018-04-13', 'conflicting_owner': 'Test', 'action': 'assert', } ] status = 'CONTACTED_LABEL_MANAGER' note = 'Lorem Ipsum' today = datetime.date.today().strftime(db_consts.SNOWFLAKE_DATE_FORMAT) expected_conflict_status = { 'grouped_conflict_id': '1|2018-04-13|Test|assert', 'tuid': 1, 'conflict_date': '2018-04-13', 'conflicting_owner': 'Test', 'action': 'assert', 'status': status, 'update_date': today, 'user_id': user_id, 'note': note, 'account_type': None, 'account_id': None, } result = conflict_status_logic.bulk_update_conflict_status( user_id=user_id, grouped_conflicts_ids=grouped_conflicts_ids, status=status, note=note) assert sorted(mock_get_ids_to_update.call_args[0][0]) == [ '1|2018-04-13|Test|assert', '2|2018-04-13|Test|assert'] mock_create.assert_called_with([expected_conflict_status]) mock_update.assert_called_with(existing_ids, status, today, note) assert result.message == {'status': status, 'updated_conflicts_amount': 2} def test_bulk_update_conflict_status_invalid_ids(mocker): """Expect error response because of failed validation.""" existing_ids = ['1|2018-04-13|Test|assert'] mock_get_grouped_conflicts_ids = mocker.patch.object( fact_conflict_model, 'get_grouped_conflicts_ids', return_value=set(existing_ids)) user_id = 123 grouped_conflicts_ids = [ { 'grouped_conflict_id': '1|2018-04-13|Test|assert', 'tuid': 1, 'conflict_date': '2018-04-13', 'conflicting_owner': 'Test', 'action': 'assert', }, { 'grouped_conflict_id': '2|2018-04-13|Test|assert', 'tuid': 2, 'conflict_date': '2018-04-13', 'conflicting_owner': 'Test', 'action': 'assert', } ] status = 'CONTACTED_LABEL_MANAGER' note = 'Lorem Ipsum' expected_errors = { 'code': error_consts.ERROR_CODE_VALIDATION, 'message': { schema.GROUPED_CONFLICTS_IDS: { 1: { schema.GROUPED_CONFLICTS_IDS: error_consts.INVALID_GROUPED_ID } } } } result = conflict_status_logic.bulk_update_conflict_status( user_id=user_id, grouped_conflicts_ids=grouped_conflicts_ids, status=status, note=note) mock_get_grouped_conflicts_ids.assert_called_with(grouped_conflicts_ids) assert result.errors == expected_errors assert result.status == 400