"""Tests for bank details schema.""" import copy from payee.schemas.bank_details_migration import ( MigrationBankDetailsDetailedSchema, MigrationBankDetailsInputSchema, ) from tests.utils.factories import ( BankDetailsCompanyTypeNestedFactory, BankDetailsIndividualTypeNestedFactory, BankDetailsIndividualTypeResponseFactory, ) def test_bank_details_schema(): """Test bank details schema.""" bank_details = BankDetailsIndividualTypeResponseFactory.build() result = MigrationBankDetailsDetailedSchema().dump(bank_details) assert result == bank_details def test_bank_details_personal_type_schema(): """Test bank details create schema for personal type""" bank_details = BankDetailsIndividualTypeNestedFactory.build() result = MigrationBankDetailsInputSchema().load(bank_details) assert result == { 'address': { 'address_1': 'asdf', 'address_2': 'dfgh', 'city': 'odesa', 'country_code': 'US', 'province': 'AZ', 'zip': '65000', }, 'contact': { 'date_of_birth': '2000-10-10', 'first_name': 'firstName', 'last_name': 'lastName', 'email': 'test@example.com', 'phone': '4567890', 'phone_country': 'US', }, 'payout_method': { 'bank_account_type': 'PERSONAL', 'bank_field_details': [ {'name': 'AccountNumber', 'value': '345234552345'}, {'name': 'AccountName', 'value': 'John Smith'}, {'name': 'BankName', 'value': 'Bank of Hope'}, {'name': 'RoutingNumber', 'value': '122105155'}, {'name': 'AccountType', 'value': 'S'}, ], 'country': 'UA', 'currency': 'UAH', }, 'type': 'INDIVIDUAL', } def test_bank_details_sanitization_schema(): """Test bank details create schema sanitization""" spaced = lambda v: f' {v} ' bank_details = BankDetailsIndividualTypeNestedFactory.build() result = MigrationBankDetailsInputSchema().load(bank_details) expected = copy.deepcopy(bank_details) payout_method = bank_details['payout_method'] payout_method['country'] = spaced(payout_method['country']) payout_method['currency'] = spaced(payout_method['currency']) for field in payout_method['bank_field_details']: field['value'] = spaced(field['value']) assert result == expected def test_bank_details_company_type_schema(): """Test bank details create schema for company.""" bank_details = BankDetailsCompanyTypeNestedFactory.build() result = MigrationBankDetailsInputSchema().load(bank_details) assert result == { 'address': { 'address_1': 'asdf', 'address_2': 'dfgh', 'city': 'odesa', 'country_code': 'US', 'province': 'AZ', 'zip': '65000', }, 'company': {'name': 'company name'}, 'payout_method': { 'bank_account_type': 'PERSONAL', 'bank_field_details': [ {'name': 'AccountNumber', 'value': '345234552345'}, {'name': 'AccountName', 'value': 'John Smith'}, {'name': 'BankName', 'value': 'Bank of Hope'}, {'name': 'RoutingNumber', 'value': '122105155'}, {'name': 'AccountType', 'value': 'S'}, ], 'country': 'UA', 'currency': 'UAH', }, 'type': 'COMPANY', } def test_bank_details_personal_type_create_schema(): """Test bank details create schema for personal type""" bank_details = BankDetailsIndividualTypeNestedFactory.build() result = MigrationBankDetailsInputSchema().load(bank_details) assert result == { 'address': { 'address_1': 'asdf', 'address_2': 'dfgh', 'city': 'odesa', 'country_code': 'US', 'province': 'AZ', 'zip': '65000', }, 'contact': { 'date_of_birth': '2000-10-10', 'first_name': 'firstName', 'last_name': 'lastName', 'email': 'test@example.com', 'phone': '4567890', 'phone_country': 'US', }, 'payout_method': { 'bank_account_type': 'PERSONAL', 'bank_field_details': [ {'name': 'AccountNumber', 'value': '345234552345'}, {'name': 'AccountName', 'value': 'John Smith'}, {'name': 'BankName', 'value': 'Bank of Hope'}, {'name': 'RoutingNumber', 'value': '122105155'}, {'name': 'AccountType', 'value': 'S'}, ], 'country': 'UA', 'currency': 'UAH', }, 'type': 'INDIVIDUAL', } def test_bank_details_personal_type_create_schema_empty_fields(): """Test bank details create schema for personal type""" bank_details = { 'address': { 'address_1': '', 'address_2': '', 'city': '', 'country_code': '', 'province': '', 'zip': '', }, 'contact': { 'date_of_birth': '', 'first_name': '', 'last_name': '', 'email': '', }, 'payout_method': { 'bank_account_type': '', 'bank_field_details': [ {'name': 'AccountNumber', 'value': ''}, {'name': 'AccountName', 'value': 'John Smith'}, ], 'country': '', 'currency': '', }, 'type': 'INDIVIDUAL', } result = MigrationBankDetailsInputSchema().load(bank_details) assert result == { 'address': { 'address_1': None, 'address_2': None, 'city': None, 'country_code': None, 'province': None, 'zip': None, }, 'contact': { 'date_of_birth': None, 'first_name': None, 'last_name': None, 'email': None, }, 'payout_method': { 'bank_account_type': None, 'bank_field_details': [ {'name': 'AccountName', 'value': 'John Smith'}, ], 'country': None, 'currency': None, }, 'type': 'INDIVIDUAL', } def test_bank_details_company_type_create_schema(): """Test bank details create schema for company.""" bank_details = BankDetailsCompanyTypeNestedFactory.build() result = MigrationBankDetailsInputSchema().load(bank_details) assert result == { 'address': { 'address_1': 'asdf', 'address_2': 'dfgh', 'city': 'odesa', 'country_code': 'US', 'province': 'AZ', 'zip': '65000', }, 'company': {'name': 'company name'}, 'payout_method': { 'bank_account_type': 'PERSONAL', 'bank_field_details': [ {'name': 'AccountNumber', 'value': '345234552345'}, {'name': 'AccountName', 'value': 'John Smith'}, {'name': 'BankName', 'value': 'Bank of Hope'}, {'name': 'RoutingNumber', 'value': '122105155'}, {'name': 'AccountType', 'value': 'S'}, ], 'country': 'UA', 'currency': 'UAH', }, 'type': 'COMPANY', }