"""Functional tests for POST /conflicts/status/bulk endpoint.""" import json from conflict_manager import config from conflict_manager.constants import header from conflict_manager.constants import query_parameters as query_const 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_validation_error(client): """Expect error response because of failed validation.""" headers = { header.GRASS_HEADER_USER_ID: '123', header.CORRELATION_ID: 'test id', header.CONTENT_TYPE: 'application/json' } data = { 'grouped_conflicts_ids': [ 'X|2018-04-01X|APM_GoDigital|assert', '2|2018-04-01|APM_Go|Digital|assert', '2|2018-04-01|APM_Go_Digital|assert', '3|2018-04-01||Release', '9|2018-04-01|Good Songs Records|', '9|2018-04-01|Good Songs Records| ', ], 'status': 'invalid', 'note': 'X' * (config.MAX_NOTE_LENGTH + 1) } expected_errors = { 'grouped_conflicts_ids': { '0': { 'tuid': ['Not a valid integer.'], 'conflict_date': [ 'Date is expected to be in YYYY-MM-DD format' ], }, '1': { '_schema': [ 'Grouped conflicts id is expected to be in ' 'TUID|CONFLICT_DATE|CONFLICTING_OWNER|ACTION format' ] }, '3': { '_schema': [ 'Grouped conflicts id is expected to be in ' 'TUID|CONFLICT_DATE|CONFLICTING_OWNER|ACTION format' ] }, '4': { '_schema': [ 'Grouped conflicts id is expected to be in ' 'TUID|CONFLICT_DATE|CONFLICTING_OWNER|ACTION format' ] }, '5': { '_schema': [ 'Grouped conflicts id is expected to be in ' 'TUID|CONFLICT_DATE|CONFLICTING_OWNER|ACTION format' ] }, }, 'note': ['Longer than maximum length 10000.'], 'status': ['Invalid value.'] } result = client.post( 'conflicts/status/bulk', headers=headers, data=json.dumps(data)) res_body = json.loads(result.data.decode()) assert result.status_code == 400 assert res_body['message'] == expected_errors def test_bulk_update_conflict_status_validation_success(client, mocker): """Expect OK response.""" grouped_conflicts_ids = [ '1|2018-04-13|APM_Go_Digital|assert', '1|2018-04-13|APM_Go_Digital|assert', '2|2018-04-01|APM_Go_Digital|assert', ] mocker.patch.object( conflict_status_model, 'get_ids_to_update', return_value=set()) mocker.patch.object(conflict_status_model, 'create') mocker.patch.object( fact_conflict_model, 'get_grouped_conflicts_ids', return_value=set(grouped_conflicts_ids)) bulk_update_status_mock = mocker.patch.object( conflict_status_logic, 'bulk_update_conflict_status', side_effect=conflict_status_logic.bulk_update_conflict_status) headers = { header.GRASS_HEADER_USER_ID: 'oa:123', header.CORRELATION_ID: 'test id', header.CONTENT_TYPE: 'application/json' } data = { 'grouped_conflicts_ids': grouped_conflicts_ids, 'status': 'orchard_asserted', 'note': 'Status note' } result = client.post( 'conflicts/status/bulk', headers=headers, data=json.dumps(data)) res_body = json.loads(result.data.decode()) assert result.status_code == 200 assert res_body == { schema.STATUS: 'ORCHARD_ASSERTED', schema.UPDATED_CONFLICTS_AMOUNT: 2} bulk_update_status_mock_kwargs = bulk_update_status_mock .call_args[1] assert bulk_update_status_mock_kwargs['user_id'] == '123' assert bulk_update_status_mock_kwargs['account_type'] is None assert bulk_update_status_mock_kwargs['account_id'] is None def test_bulk_update_conflict_status_validation_workstation_user( client, mocker, feature_engine): """Expect OK response.""" grouped_conflicts_ids = [ '1|2018-04-13|APM_Go_Digital|assert', '1|2018-04-13|APM_Go_Digital|assert', '2|2018-04-01|APM_Go_Digital|assert', ] mocker.patch.object( conflict_status_model, 'get_ids_to_update', return_value=set()) mocker.patch.object(conflict_status_model, 'create') mocker.patch.object( fact_conflict_model, 'get_grouped_conflicts_ids', return_value=set(grouped_conflicts_ids)) bulk_update_status_mock = mocker.patch.object( conflict_status_logic, 'bulk_update_conflict_status', side_effect=conflict_status_logic.bulk_update_conflict_status) headers = { header.CORRELATION_ID: 'test id', header.CONTENT_TYPE: 'application/json' } query_string_data = { query_const.ACCOUNT_ID: '1234', query_const.ACCOUNT_TYPE: 'vendor', } data = { 'grouped_conflicts_ids': grouped_conflicts_ids, 'status': 'orchard_asserted', 'note': 'Status note' } result = client.post( 'conflicts/status/bulk', headers=headers, query_string=query_string_data, data=json.dumps(data)) res_body = json.loads(result.data.decode()) assert result.status_code == 200 assert res_body == { schema.STATUS: 'ORCHARD_ASSERTED', schema.UPDATED_CONFLICTS_AMOUNT: 2} bulk_update_status_mock_kwargs = bulk_update_status_mock .call_args[1] assert bulk_update_status_mock_kwargs['user_id'] is None assert bulk_update_status_mock_kwargs['account_type'] == 'vendor' assert bulk_update_status_mock_kwargs['account_id'] == '1234'