"""Test reports utils.""" from src.models import ( Address, BankFieldDetail, Company, Contact, PayeeDetails, PayoutMethod, ) from src.processors.reports.utils import flatten_model, map_bank_details_fields def test_flatten_model_company_is_none() -> None: account_payee_id = 123 payee = PayeeDetails( account_payee_id=account_payee_id, type='INDIVIDUAL', contact=Contact( first_name='John', last_name='Doe', date_of_birth='1990-01-01', email='john.doe@example.com', ), company=None, address=Address( country_code='US', address_1='123 Main St', address_2='Apt 4B', city='Metropolis', province='MetroState', zip='12345', ), payout_method=PayoutMethod( bank_account_type='checking', country='US', currency='USD', bank_field_details=[ BankFieldDetail(name='BankName', value='HSBC BANK ARGENTINA SA'), BankFieldDetail(name='RoutingNumber', value='Checking'), ], ), ) expected_json = { 'account_payee_id': account_payee_id, 'address_address_1': '123 Main St', 'address_address_2': 'Apt 4B', 'address_city': 'Metropolis', 'address_country_code': 'US', 'address_province': 'MetroState', 'address_zip': '12345', 'contact_date_of_birth': '1990-01-01', 'contact_email': 'john.doe@example.com', 'contact_first_name': 'John', 'contact_last_name': 'Doe', 'payout_method_bank_account_type': 'checking', 'payout_method_bank_field_details_BankName': 'HSBC BANK ARGENTINA SA', 'payout_method_bank_field_details_RoutingNumber': 'Checking', 'payout_method_country': 'US', 'payout_method_currency': 'USD', 'type': 'INDIVIDUAL', } assert flatten_model(payee) == expected_json def test_flatten_model_contact_is_none() -> None: account_payee_id = 123 payee = PayeeDetails( account_payee_id=account_payee_id, type='COMPANY', contact=None, company=Company(name='some name'), address=Address( country_code='US', address_1='123 Main St', address_2='Apt 4B', city='Metropolis', province='MetroState', zip='12345', ), payout_method=PayoutMethod( bank_account_type='checking', country='US', currency='USD', bank_field_details=[ BankFieldDetail(name='BankName', value='HSBC BANK ARGENTINA SA'), BankFieldDetail(name='RoutingNumber', value='Checking'), ], ), ) expected_json = { 'account_payee_id': 123, 'address_address_1': '123 Main St', 'address_address_2': 'Apt 4B', 'address_city': 'Metropolis', 'address_country_code': 'US', 'address_province': 'MetroState', 'address_zip': '12345', 'company_name': 'some name', 'payout_method_bank_account_type': 'checking', 'payout_method_bank_field_details_BankName': 'HSBC BANK ARGENTINA SA', 'payout_method_bank_field_details_RoutingNumber': 'Checking', 'payout_method_country': 'US', 'payout_method_currency': 'USD', 'type': 'COMPANY', } assert flatten_model(payee) == expected_json def test_map_bank_details_fields() -> None: input_data = { 'account_id': 123, 'contact_first_name': 'John', 'contact_last_name': 'Doe', 'address_address_1': '123 Main St', 'address_address_2': 'Apt 4B', 'address_city': 'Metropolis', 'address_country_code': 'US', 'address_province': 'MetroState', 'address_zip': '12345', 'company_name': 'some name', 'payout_method_bank_account_type': 'checking', 'payout_method_bank_field_details_BankName': 'HSBC', 'payout_method_bank_field_details_RoutingNumber': '123456', } expected_output = { 'AccountHolderCitizenship': None, 'AccountName': None, 'AccountNameEnglish': None, 'AccountNumber': None, 'AccountTaxNumber': None, 'AccountType': None, 'Address': None, 'BIC': None, 'BIN': None, 'BSB': None, 'BankCode': None, 'BankName': 'HSBC', 'BankNumber': None, 'BranchCode': None, 'BranchName': None, 'CNIC': None, 'CardNumber': None, 'CardorAccount': None, 'CityCode': None, 'ForeignIDNumber': None, 'IBAN': None, 'IdNumber': None, 'IdType': None, 'IncorporationNumber': None, 'OtherAccountType': None, 'OtherBankName': None, 'PassportNumber': None, 'ProvinceCode': None, 'RoutingNumber': '123456', 'SNIC': None, 'SortCode': None, 'State': None, 'StorefrontURL': None, 'Suffix': None, 'Swift': None, 'TIN': None, 'address1': '123 Main St', 'address2': 'Apt 4B', 'bankAccountType': 'checking', 'bankCountry': None, 'city': 'Metropolis', 'companyName': 'some name', 'country': 'US', 'currency': None, 'dateOfBirth': None, 'email': None, 'firstName': 'John', 'lastName': 'Doe', 'payeeType': None, 'postal_code': '12345', 'state': 'MetroState', 'vendorId': 123, } assert map_bank_details_fields(input_data) == expected_output