"""Tests for bulk remove territories endpoint.""" import copy import json from unittest.mock import ANY from unittest.mock import Mock from unittest.mock import patch import pytest from masters_registry.constant import error from masters_registry.models import bulk_tasks as task_model from masters_registry.tasks import bulk @pytest.fixture def test_headers(): """Headers for testing this enpoint.""" headers = { 'Correlation-Id': 'test correlation id', 'Content-Type': 'application/json', 'Orchard-User-Id': '123' } return headers @pytest.fixture def test_payload(): """Valid payload for this endpoint.""" payload = { 'items': [ { 'conflict_date': '2018-12-24', 'conflicting_owner': 'UMG', 'isrc': 'US1233123123', 'tuid': 12321, 'territories': ['US', 'CA', 'FR'], } ] } return payload @pytest.fixture def test_invalid_payload(test_payload): """Invalid payload for this endpoint.""" payload = copy.deepcopy(test_payload) del payload['items'][0]['conflict_date'] return payload @pytest.fixture def test_request_params(): params = { 'account_type': 'vendor', 'account_id': '123' } return params @patch( 'masters_registry.tasks.bulk.bulk_remove_territories.delay', new=Mock()) def test_bulk_remove_territories_ff_enabled( client, test_headers, test_payload, test_request_params, setup_bulk_status_db): """Test bulk delete territories.""" result = client.delete( '/ownership/territories', headers=test_headers, data=json.dumps(test_payload), query_string=test_request_params) payload = json.loads(result.data.decode()) expected_payload = {'task_id': 1} assert result.status_code == 200 assert payload == expected_payload expected_celery_call_args = [ test_payload['items'], 'vendor', '123', 'test correlation id', 1, '123'] bulk.bulk_remove_territories.delay.assert_called_with( *expected_celery_call_args) created_task = task_model.get_task(1).message.as_dict() expected_task = { 'create_datetime': ANY, 'correlation_id': 'test correlation id', 'count': 1, 'user_name': '', 'finish_datetime': None, 'user_id': None, 'result': None, 'status': 'PROCESSING', 'id': 1, 'type': 'BULK_REMOVE_TERRITORIES', 'account_id': 123, 'account_type': 'vendor' } assert created_task == expected_task def test_bulk_remove_territories_empty_body( client, test_headers, test_request_params): """Test bulk delete territories with empty request body.""" result = client.delete( '/ownership/territories', headers=test_headers, data='', query_string=test_request_params) assert result.status_code == 400 def test_bulk_remove_territories_invalid_body( client, test_headers, test_invalid_payload, test_request_params): """Test bulk delete territories with invalid request body.""" result = client.delete( '/ownership/territories', headers=test_headers, data=json.dumps(test_invalid_payload), query_string=test_request_params) payload = json.loads(result.data.decode()) assert payload['code'] == error.BODY_VALIDATION_ERROR def test_bulk_remove_territories_no_account( client, test_headers, test_payload): """Test bulk delete territories with empty request body.""" result = client.delete( '/ownership/territories', headers=test_headers, data=json.dumps(test_payload)) payload = json.loads(result.data.decode()) assert payload['code'] == error.ERROR_ACCOUNT_DATA_CODE assert payload['message'] == error.ERROR_ACCOUNT_DATA_REQUIRED_MSG