"""bank_details module tests.""" import pytest from payee.constants.constants import BANK_DETAILS_PAYEE_TYPE from payee.utils.bank_details import BankDetailsDataHelper def test_build_payoneer_address(): """Test build address.""" params = { 'address_1': 'address 1', 'city': 'city', 'country_code': 'US', 'zip': '12345', } address = BankDetailsDataHelper.build_payee_address(params) assert address == { 'address_1': 'address 1', 'address_2': '', 'city': 'city', 'country_code': 'US', 'zip': '12345', 'province': None, } params['address_2'] = 'address 2' address = BankDetailsDataHelper.build_payee_address(params) assert address == { 'address_1': 'address 1', 'city': 'city', 'country_code': 'US', 'zip': '12345', 'address_2': 'address 2', 'province': None, } params['province'] = 'province' address = BankDetailsDataHelper.build_payee_address(params) assert address == { 'address_1': 'address 1', 'city': 'city', 'country_code': 'US', 'zip': '12345', 'address_2': 'address 2', 'province': 'province', } def test_build_individual_payee(): """Test build individual payee.""" params = { 'address_1': 'address 1', 'city': 'city', 'country_code': 'US', 'zip': '12345', 'last_name': 'last name', 'first_name': 'first name', 'date_of_birth': '01-01-2000', } payee = BankDetailsDataHelper.build_individual_payee(params) assert payee == { 'address': { 'address_1': 'address 1', 'address_2': '', 'city': 'city', 'country_code': 'US', 'zip': '12345', 'province': None, }, 'contact': { 'last_name': 'last name', 'first_name': 'first name', 'date_of_birth': '01-01-2000', 'email': None, 'phone': None, 'phone_country': None, }, } params['address_2'] = 'address 2' payee = BankDetailsDataHelper.build_individual_payee(params) assert payee == { 'address': { 'address_1': 'address 1', 'city': 'city', 'country_code': 'US', 'zip': '12345', 'address_2': 'address 2', 'province': None, }, 'contact': { 'last_name': 'last name', 'first_name': 'first name', 'date_of_birth': '01-01-2000', 'email': None, 'phone': None, 'phone_country': None, }, } params['province'] = 'province' payee = BankDetailsDataHelper.build_individual_payee(params) assert payee == { 'address': { 'address_1': 'address 1', 'city': 'city', 'country_code': 'US', 'zip': '12345', 'address_2': 'address 2', 'province': 'province', }, 'contact': { 'last_name': 'last name', 'first_name': 'first name', 'date_of_birth': '01-01-2000', 'email': None, 'phone': None, 'phone_country': None, }, } params['email'] = 'test@example.com' params['phone'] = '4567890' params['phone_country'] = 'US' payee = BankDetailsDataHelper.build_individual_payee(params) assert payee == { 'address': { 'address_1': 'address 1', 'city': 'city', 'country_code': 'US', 'zip': '12345', 'address_2': 'address 2', 'province': 'province', }, 'contact': { 'last_name': 'last name', 'first_name': 'first name', 'date_of_birth': '01-01-2000', 'email': 'test@example.com', 'phone': '4567890', 'phone_country': 'US', }, } def test_build_company_payee(): """Test build company payee.""" params = { 'address_1': 'address 1', 'city': 'city', 'country_code': 'US', 'zip': '12345', 'name': 'name', } payee = BankDetailsDataHelper.build_company_payee(params) assert payee == { 'address': { 'address_1': 'address 1', 'city': 'city', 'country_code': 'US', 'zip': '12345', 'address_2': '', 'province': None, }, 'company': { 'name': 'name', }, 'contact': { 'email': None, 'phone': None, 'phone_country': None, }, } params['address_2'] = 'address 2' params['email'] = 'test@example.com' params['phone'] = '4567890' params['phone_country'] = 'US' payee = BankDetailsDataHelper.build_company_payee(params) assert payee == { 'address': { 'address_1': 'address 1', 'city': 'city', 'country_code': 'US', 'zip': '12345', 'address_2': 'address 2', 'province': None, }, 'company': { 'name': 'name', }, 'contact': { 'email': 'test@example.com', 'phone': '4567890', 'phone_country': 'US', }, } params['province'] = 'province' payee = BankDetailsDataHelper.build_company_payee(params) assert payee == { 'address': { 'address_1': 'address 1', 'city': 'city', 'country_code': 'US', 'zip': '12345', 'address_2': 'address 2', 'province': 'province', }, 'company': { 'name': 'name', }, 'contact': { 'email': 'test@example.com', 'phone': '4567890', 'phone_country': 'US', }, } def test_build_individual_payee_contact(): """Test build individual payee contact.""" params = { 'last_name': 'last name', 'first_name': 'first name', 'date_of_birth': '01-01-2000', 'email': 'test@example.com', 'phone': '4567890', 'phone_country': 'US', } contact = BankDetailsDataHelper.build_individual_payee_contact(params) assert contact == { 'last_name': 'last name', 'first_name': 'first name', 'date_of_birth': '01-01-2000', 'email': 'test@example.com', 'phone': '4567890', 'phone_country': 'US', } def test_build_company_payee_contact(): """Test build company payee contact.""" params = { 'email': 'test@example.com', 'phone': '4567890', 'phone_country': 'US', } contact = BankDetailsDataHelper.build_company_payee_contact(params) assert contact == { 'email': 'test@example.com', 'phone': '4567890', 'phone_country': 'US', } @pytest.mark.parametrize('country', ['GB', 'XK']) def test_build_payout_method_countries(country): """Test build payout method for different countries.""" params = { 'bank_account_type': 'bank account type', 'country': country, 'currency': 'currency', 'bank_field_details': 'bank field details', } payout_method = BankDetailsDataHelper.build_payout_method(params) assert payout_method == { 'bank_account_type': 'bank account type', 'country': country, 'currency': 'currency', 'bank_field_details': 'bank field details', } def test_get_strategy(): """Test get strategy.""" assert ( BankDetailsDataHelper.get_strategy('INDIVIDUAL') == BankDetailsDataHelper.build_individual_payee ) assert ( BankDetailsDataHelper.get_strategy('COMPANY') == BankDetailsDataHelper.build_company_payee ) with pytest.raises(KeyError): BankDetailsDataHelper.get_strategy('UNKNOWN') def test_format_payee_name(): """Test format_payee_name.""" params = { 'type': 'INDIVIDUAL', 'contact': { 'last_name': 'last name', 'first_name': 'first name', 'date_of_birth': '01-01-2000', }, } name = BankDetailsDataHelper.format_payee_name(params) assert name == 'first name last name' params = { 'type': 'COMPANY', 'company': { 'name': 'company name', }, } name = BankDetailsDataHelper.format_payee_name(params) assert name == 'company name' params = { 'type': 'INDIVIDUAL', 'last_name': 'last name', 'first_name': 'first name', 'date_of_birth': '01-01-2000', } name = BankDetailsDataHelper.format_payee_name(params, True) assert name == 'first name last name' params = { 'type': 'COMPANY', 'name': 'company name', } name = BankDetailsDataHelper.format_payee_name(params, True) assert name == 'company name' def test_payee_identity(): """Test format_payee_name.""" params = { 'type': 'INDIVIDUAL', 'contact': { 'last_name': 'last name', 'first_name': 'first name', 'date_of_birth': '01-01-2000', }, } name = BankDetailsDataHelper.build_payee_identity(params) assert name == { 'date_of_birth': '01-01-2000', 'name': 'FIRST NAME LAST NAME', 'type': 'INDIVIDUAL', } params = { 'type': 'COMPANY', 'company': { 'name': 'company name', }, } name = BankDetailsDataHelper.build_payee_identity(params) assert name == {'name': 'COMPANY NAME', 'type': 'COMPANY'} params = { 'type': 'INDIVIDUAL', 'last_name': 'last name', 'first_name': 'first name', 'date_of_birth': '01-01-2000', } name = BankDetailsDataHelper.build_payee_identity(params, True) assert name == { 'date_of_birth': '01-01-2000', 'name': 'FIRST NAME LAST NAME', 'type': 'INDIVIDUAL', } params = { 'type': 'COMPANY', 'name': 'company name', } name = BankDetailsDataHelper.build_payee_identity(params, True) assert name == {'name': 'COMPANY NAME', 'type': 'COMPANY'} def test_get_email_individual_flattened(): params = { 'type': BANK_DETAILS_PAYEE_TYPE.INDIVIDUAL, 'email': 'individual@example.com', } result = BankDetailsDataHelper.get_email(params, flattened=True) assert result == 'individual@example.com' def test_get_email_individual_not_flattened(): params = { 'type': BANK_DETAILS_PAYEE_TYPE.INDIVIDUAL, 'contact': {'email': 'individual@example.com'}, } result = BankDetailsDataHelper.get_email(params, flattened=False) assert result == 'individual@example.com' def test_get_phone_individual_flattened(): params = { 'type': BANK_DETAILS_PAYEE_TYPE.INDIVIDUAL, 'phone': '4567890', } result = BankDetailsDataHelper.get_phone(params, flattened=True) assert result == '4567890' def test_get_phone_individual_not_flattened(): params = { 'type': BANK_DETAILS_PAYEE_TYPE.INDIVIDUAL, 'contact': {'phone': '4567890'}, } result = BankDetailsDataHelper.get_phone(params, flattened=False) assert result == '4567890' def test_get_email_company(): params = {'type': BANK_DETAILS_PAYEE_TYPE.COMPANY} result = BankDetailsDataHelper.get_email(params, flattened=True) assert result is None def test_get_email_individual_no_email(): params = {'type': BANK_DETAILS_PAYEE_TYPE.INDIVIDUAL, 'contact': {}} result = BankDetailsDataHelper.get_email(params, flattened=False) assert result is None def test_get_account_holder_name(): assert ( BankDetailsDataHelper.get_account_holder_name( { 'payout_method': { 'bank_field_details': [ {'name': 'AccountName', 'value': 'test name'} ] } } ) == 'test name' ) assert ( BankDetailsDataHelper.get_account_holder_name( {'bank_field_details': [{'name': 'AccountName', 'value': 'test name'}]}, True, ) == 'test name' )