"""Functional tests for getting collaborator data.""" import json from unittest.mock import ANY, patch from oto import status as response_code import pytest from tests.testutils import db, mock_auth from tests.testutils.seed.collaborator_seed import next_collaborator_id @patch("collaborator.handlers.collaborator.has_direct_payments") @db.test_schema_default_seed @pytest.mark.parametrize( "vendor_id, data, expected_response", [ ( 12345, {"participant_id": "8888", "name": "Person", "vendor_id": 12345}, { "id": next_collaborator_id, "name": "Person", "vendor_id": "12345", "performance_rights": True, "subaccount_id": None, "participant_id": "8888", "recipient_id": None, "currency": None, "collaborator_type": "COLLABORATOR", "description": None, "internal_id": None, "created_date": ANY, "dp_enabled_date": ANY, "dp_splits_agreed_date": ANY, }, ), ( 24601, { "name": "New Person", "subaccount_id": 5681, "participant_id": "2", "currency": "USD", "vendor_id": 24601, }, { "id": next_collaborator_id, "name": "New Person", "vendor_id": "24601", "performance_rights": True, "subaccount_id": 5681, "participant_id": "2", "recipient_id": None, "currency": "USD", "collaborator_type": "COLLABORATOR", "description": None, "internal_id": None, "created_date": ANY, "dp_enabled_date": ANY, "dp_splits_agreed_date": ANY, }, ), ( 24601, { "name": "New Subaccount", "subaccount_id": 5681, "currency": "USD", "collaborator_type": "SUBACCOUNT", "vendor_id": 24601, }, { "id": next_collaborator_id, "name": "New Subaccount", "vendor_id": "24601", "performance_rights": True, "subaccount_id": 5681, "participant_id": None, "recipient_id": None, "currency": "USD", "collaborator_type": "SUBACCOUNT", "description": None, "internal_id": None, "created_date": ANY, "dp_enabled_date": ANY, "dp_splits_agreed_date": ANY, }, ), ], ) def test_post_collaborator_success( has_direct_payments_mock, auth_client, mocker, vendor_id, data, expected_response ): """Testing successfully creating with a CollaboratorsProfile.""" mock_auth(mocker, vendor_id) mocker.patch( "collaborator.models.rds.statement_period_persister.ows_royalties." "get_current_abacus_statement_period", return_value={"statement_period_id": 123}, ) has_direct_payments_mock.return_value = False result = auth_client.post( "/collaborators", data=json.dumps(data), content_type="application/json" ) result_data = json.loads(result.data.decode()) result_data["created_date"] = "now" assert result.status_code == response_code.CREATED assert result_data == expected_response @patch("collaborator.handlers.collaborator.has_direct_payments") @db.test_schema_default_seed @pytest.mark.parametrize( "vendor_id, data, expected_status, expected_response", [ ( 9876, { "name": "New Subaccount", "subaccount_id": 123456, "currency": "USD", "collaborator_type": "SUBACCOUNT", "vendor_id": 9876, }, response_code.OK, { "id": 8, "collaborator_type": "SUBACCOUNT", "currency": "USD", "name": "Subaccount", "participant_id": None, "performance_rights": True, "recipient_id": 90, "subaccount_id": 123456, "vendor_id": 9876, "description": None, "internal_id": None, "created_date": ANY, "dp_enabled_date": ANY, "dp_splits_agreed_date": ANY, }, ), ( 24601, {"participant_id": "9000"}, response_code.BAD_REQUEST, None, ), ], ) def test_post_collaborator_fail( has_direct_payments_mock, auth_client, vendor_id, data, expected_status, expected_response, mocker, ): """Testing failing to create a collaborator.""" mock_auth(mocker, vendor_id) mocker.patch( "collaborator.models.rds.statement_period_persister.ows_royalties." "get_current_abacus_statement_period", return_value={"statement_period_id": 123}, ) has_direct_payments_mock.return_value = False result = auth_client.post( "/collaborators", data=json.dumps(data), content_type="application/json" ) result_data = json.loads(result.data.decode()) if "created_date" in result_data: result_data["created_date"] = "now" assert result.status_code == expected_status if expected_response is not None: assert result_data == expected_response