"""Tests for Graphql logic.""" from unittest.mock import patch from payee.constants.constants import PAYMENT_ENTITIES_LOGOS from payee.logic import graphql as logic @patch('payee.logic.graphql.graphql_client.execute') def test_get_abacus_account_details(mock_graphql): """Test to get abacus account details.""" mock_graphql.side_effect = [ { 'data': { 'abacusAccount': { 'accountName': 'Test Account', 'accountPaymentTerm': { 'paymentEntity': { 'paymentEntityName': 'KNR-UK', 'referencePaymentEntityId': '3', } }, }, 'abacusContracts': { 'items': [ { 'referenceSigningEntity': { 'legalName': 'Kollective Neighbouring Rights Limited', 'vatNumber': 'GB 423 4787 86', } } ], }, 'abacusReferenceSigningEntities': { 'items': [ { 'legalName': 'Kollective Neighbouring Rights Limited', 'vatNumber': 'GB 423 4787 86', 'referenceSigningEntityId': '3', }, { 'legalName': 'Essential Music & Marketing Limited', 'vatNumber': 'GB 821 0187 68', 'referenceSigningEntityId': '15', }, { 'legalName': 'The Orchard AS', 'vatNumber': 'NO 980 910 857 MVA', 'referenceSigningEntityId': '16', }, ], }, } }, ] account_id = 123 res = logic.get_abacus_account_details(account_id) assert res == { 'account_id': account_id, 'logo_path': PAYMENT_ENTITIES_LOGOS['KNR-UK'], 'account_name': 'Test Account', 'signing_entity_name': 'Kollective Neighbouring Rights Limited', 'signing_entity_vat_number': 'GB 423 4787 86', } @patch('payee.logic.graphql.graphql_client.execute') def test_get_abacus_account_details_fallback(mock_graphql): """Test to get abacus account details.""" mock_graphql.side_effect = [ { 'data': { 'abacusAccount': { 'accountName': 'Test Account', 'accountPaymentTerm': { 'paymentEntity': { 'paymentEntityName': 'ORCHARD-NO', 'referencePaymentEntityId': '7', } }, }, 'abacusContracts': { 'items': [ { 'referenceSigningEntity': { 'legalName': 'No VAT INFO Entity', 'vatNumber': None, } } ], }, 'abacusReferenceSigningEntities': { 'items': [ { 'legalName': 'Kollective Neighbouring Rights Limited', 'vatNumber': 'GB 423 4787 86', 'referenceSigningEntityId': '3', }, { 'legalName': 'Essential Music & Marketing Limited', 'vatNumber': 'GB 821 0187 68', 'referenceSigningEntityId': '15', }, { 'legalName': 'The Orchard AS', 'vatNumber': 'NO 980 910 857 MVA', 'referenceSigningEntityId': '16', }, ], }, } }, ] account_id = 123 res = logic.get_abacus_account_details(account_id) assert res == { 'account_id': account_id, 'logo_path': PAYMENT_ENTITIES_LOGOS['ORCHARD-NO'], 'account_name': 'Test Account', 'signing_entity_name': 'The Orchard AS', 'signing_entity_vat_number': 'NO 980 910 857 MVA', } @patch('payee.logic.graphql.graphql_client.execute') def test_get_abacus_account_details_no_fallback_item(mock_graphql): """Test to get abacus account details.""" mock_graphql.side_effect = [ { 'data': { 'abacusAccount': { 'accountName': 'Test Account', 'accountPaymentTerm': { 'paymentEntity': { 'paymentEntityName': 'AWAL-UK', 'referencePaymentEntityId': '1', } }, }, 'abacusContracts': { 'items': [ { 'referenceSigningEntity': { 'legalName': 'No VAT INFO Entity', 'vatNumber': None, } } ], }, 'abacusReferenceSigningEntities': { 'items': [ { 'legalName': 'Essential Music & Marketing Limited', 'vatNumber': 'GB 821 0187 68', 'referenceSigningEntityId': '15', }, { 'legalName': 'The Orchard AS', 'vatNumber': 'NO 980 910 857 MVA', 'referenceSigningEntityId': '16', }, ], }, } }, ] account_id = 123 res = logic.get_abacus_account_details(account_id) assert res == { 'account_id': account_id, 'logo_path': PAYMENT_ENTITIES_LOGOS['AWAL-UK'], 'account_name': 'Test Account', 'signing_entity_name': 'No VAT INFO Entity', 'signing_entity_vat_number': None, } @patch('payee.logic.graphql.graphql_client.execute') def test_get_abacus_account_details_no_valid_account(mock_graphql): """Test to get abacus account details of an account that doesn't exist.""" mock_graphql.return_value = {'data': {'abacusAccount': None}} account_id = 123 res = logic.get_abacus_account_details(account_id) assert not res @patch('payee.logic.graphql.graphql_client.execute') def test_get_abacus_account_details_no_payment_entity(mock_graphql): """Test to get abacus account details when there is no payment entity associated with an account.""" # noqa: E501 mock_graphql.return_value = { 'data': { 'abacusAccount': { 'accountName': 'Test Account', 'accountPaymentTerm': {'paymentEntity': None}, } } } account_id = 123 res = logic.get_abacus_account_details(account_id) assert res == { 'account_id': account_id, 'account_name': 'Test Account', 'signing_entity_name': None, 'signing_entity_vat_number': None, } @patch('payee.logic.graphql.graphql_client.execute') def test_get_abacus_account_details_no_signing_entity(mock_graphql): """Test to get abacus account details when there is no signing entity.""" mock_graphql.side_effect = [ { 'data': { 'abacusAccount': { 'accountName': 'Test Account', 'accountPaymentTerm': { 'paymentEntity': { 'paymentEntityName': 'KNR-UK', 'referencePaymentEntityId': '3', } }, }, 'abacusContracts': { 'items': [], }, 'abacusReferenceSigningEntities': { 'items': [ { 'legalName': 'Kollective Neighbouring Rights Limited', 'vatNumber': 'GB 423 4787 86', 'referenceSigningEntityId': '3', }, { 'legalName': 'Essential Music & Marketing Limited', 'vatNumber': 'GB 821 0187 68', 'referenceSigningEntityId': '15', }, { 'legalName': 'The Orchard AS', 'vatNumber': 'NO 980 910 857 MVA', 'referenceSigningEntityId': '16', }, ], }, } }, ] account_id = 123 res = logic.get_abacus_account_details(account_id) assert res == { 'account_id': account_id, 'logo_path': PAYMENT_ENTITIES_LOGOS['KNR-UK'], 'account_name': 'Test Account', 'signing_entity_name': None, 'signing_entity_vat_number': None, } @patch('payee.logic.graphql.graphql_client.execute') def test_get_payment_entity_name_by_account_id(mock_graphql): """Test to get payment entity name for an account.""" mock_graphql.return_value = { 'data': { 'abacusAccount': { 'accountPaymentTerm': { 'paymentEntity': {'paymentEntityName': 'AWAL-UK'} } } } } account_id = 123 res = logic.get_payment_entity_name_by_account_id(account_id) assert res == 'AWAL-UK' @patch('payee.logic.graphql.graphql_client.execute') def test_get_payment_entity_name_by_account_id_no_valid_account(mock_graphql): """Test to get payment entity name for an account that doesn't exist.""" mock_graphql.return_value = {'data': {'abacusAccount': None}} res = logic.get_payment_entity_name_by_account_id(123) assert res is None @patch('payee.logic.graphql.graphql_client.execute') def test_get_payment_entity_name_by_account_id_no_payment_entity(mock_graphql): """Test to get payment entity name when there is no payment entity associated.""" mock_graphql.return_value = { 'data': {'abacusAccount': {'accountPaymentTerm': {'paymentEntity': None}}} } res = logic.get_payment_entity_name_by_account_id(123) assert res is None