"""Test for account_statement_period schema.""" import datetime from moneyhub.constants.constants import StatementPeriodStatus from moneyhub.schemas.account_statement_period import AccountActivityPeriodSchema from moneyhub.schemas.account_statement_period import AccountActivityPeriodsDataloaderSchema from moneyhub.schemas.account_statement_period import AccountActivitySchema from moneyhub.schemas.account_statement_period import AccountArtistSchema from moneyhub.schemas.account_statement_period import AccountContractsSchema from moneyhub.schemas.account_statement_period import AccountImprintSchema from moneyhub.schemas.account_statement_period import AccountPaymentDetailStatusSchema from moneyhub.schemas.account_statement_period import AccountProjectSchema from moneyhub.schemas.account_statement_period import AccountRecordingSchema from moneyhub.schemas.account_statement_period import AccountStatementPeriodBalanceSchema from moneyhub.schemas.account_statement_period import AccountStatementPeriodDetailSchema from moneyhub.schemas.account_statement_period import AccountStatementPeriodPaymentDetailSchema from moneyhub.schemas.account_statement_period import AccountStatementPeriodSchema from moneyhub.schemas.account_statement_period import AccountStatementPeriodVatDetailSchema def test_account_statement_period_detail_schema(account_statement_periods_by_account_fixture): """Test account statement period detail schema.""" expected = AccountStatementPeriodDetailSchema( account_id=77, contract_id=None, statement_period_id=270, currency_code='USD', total_gross_revenue_amount=1416.38, total_net_revenue_amount=1133.10, distribution_fee=None, mechanical_deduction_total=0.00, mechanical_deduction_admin_fee_total=0.00, ) actual = AccountStatementPeriodDetailSchema( **account_statement_periods_by_account_fixture[0] ) assert expected == actual def test_account_statement_period_payment_detail_schema(): """Test account statement period payment detail schema.""" expected_result = AccountStatementPeriodPaymentDetailSchema( ledger_account_id=1, statement_period_id=20, account_id=10, contract_id=100, currency_code='USD', currency_amount=-5000.00, created_at=datetime.date(2022, 1, 1), action_status='complete', event_name='payment_accepted', withholding_tax_ledger_account_id=2, withholding_tax_currency_code='USD', withholding_tax_currency_amount=-1000.00, withholding_tax_created_at=datetime.date(2022, 1, 1) ) payment = { 'ledger_account_id': 1, 'statement_period_id': 20, 'account_id': 10, 'contract_id': 100, 'currency_code': 'USD', 'action_status': 'complete', 'currency_amount': '-5000.00', 'created_at': '2022-01-01', 'event_name': 'payment_accepted', 'withholding_tax_ledger_account_id': 2, 'withholding_tax_currency_code': 'USD', 'withholding_tax_currency_amount': '-1000.00', 'withholding_tax_created_at': '2022-01-01' } actual = AccountStatementPeriodPaymentDetailSchema(**payment) assert expected_result == actual def test_account_payment_detail_status_schema(): """Test account statement period payment detail schema.""" expected_result = AccountPaymentDetailStatusSchema( worksheet_account_contract_closing_balance_id=1, contract_id=345, closing_balance_statement_period=245, closing_balance_amount=306, payable_amount_pre_tax=361.30, tax_withholding_amount=0.00, vat_amount=None, payable_amount_post_tax=361.30, currency_code='GBP', batch_status='complete', individual_payment_status='complete', payment_statement_period_id=246, created_at=datetime.date(2010, 9, 8), last_modified=datetime.date(2010, 9, 8), ) payment_details = { 'worksheet_account_contract_closing_balance_id': 1, 'contract_id': 345, 'closing_balance_statement_period': 245, 'closing_balance_amount': 306, 'payable_amount_pre_tax': 361.30, 'tax_withholding_amount': 0.00, 'vat_amount': None, 'payable_amount_post_tax': 361.30, 'currency_code': 'GBP', 'batch_status': 'complete', 'individual_payment_status': 'complete', 'payment_statement_period_id': 246, 'created_at': '2010-09-08', 'last_modified': '2010-09-08', } actual = AccountPaymentDetailStatusSchema(**payment_details) assert expected_result == actual def test_account_statement_period_vat_detail_schema(): """Test account statement period vat detail schema.""" expected = AccountStatementPeriodVatDetailSchema( statement_period_id=123, account_id=24601, payee_currency_code='NOK', base_amount_payee_currency=100, net_amount_payee_currency=80, vat_amount_payee_currency=20, currency_code='NOK', gross_revenue=100, net_revenue=80, distribution_fee=20, gross_vat_rate=20, distribution_vat_rate=20, gross_vat=20, distribution_vat=4, adjusted_net_revenue=56, ) data = { 'statement_period_id': 123, 'account_id': 24601, 'payee_currency_code': 'NOK', 'base_amount_payee_currency': '100', 'net_amount_payee_currency': '80', 'vat_amount_payee_currency': '20', 'currency_code': 'NOK', 'gross_revenue': '100', 'net_revenue': '80', 'distribution_fee': '20', 'gross_vat_rate': '20', 'distribution_vat_rate': '20', 'gross_vat': '20', 'distribution_vat': '4', 'adjusted_net_revenue': '56', } actual = AccountStatementPeriodVatDetailSchema(**data) assert expected == actual def test_account_statement_period_schema(): """Test account statement period schema.""" expected = AccountStatementPeriodSchema( statement_period_id=20, statement_period_name='December 2022', statement_period_status=StatementPeriodStatus.CLOSED, currency_code='USD' ) payment = { 'statement_period_id': 20, 'statement_period_name': 'December 2022', 'statement_period_status': 'closed', 'currency_code': 'USD' } actual = AccountStatementPeriodSchema(**payment) assert actual == expected def test_account_statement_period_balance_schema(): """Test account statement period balance schema.""" expected = AccountStatementPeriodBalanceSchema( closing_balance=63853.31, currency_code='GBP', opening_balance=41660.19, ledger_amount=22193.12, payable_balance=63853.31, statement_period_id=121 ) payment = { 'closing_balance': '63853.31', 'currency_code': 'GBP', 'opening_balance': '41660.19', 'ledger_amount': '22193.12', 'payable_balance': '63853.31', 'statement_period_id': 121 } actual = AccountStatementPeriodBalanceSchema(**payment) assert actual == expected def test_account_activity_schema(): """Test account activity schema.""" expected = AccountActivitySchema( adjustments=True, advances=True, expenses=True, mechanicals=True, physical_reserves=True, publishing_revenue=True, revenue=True, taxes=True ) data = { 'adjustments': True, 'advances': True, 'expenses': True, 'mechanicals': True, 'physical_reserves': True, 'publishing_revenue': True, 'revenue': True, 'taxes': True } actual = AccountActivitySchema(**data) assert actual == expected def test_account_activity_period_schema(): """Test account activity period schema.""" expected = AccountActivityPeriodSchema( activity_period_id=123, activity_month_name='Smarch 2012', ) data = { 'activity_period_id': 123, 'activity_month_name': 'Smarch 2012', } actual = AccountActivityPeriodSchema(**data) assert actual == expected def test_account_activity_periods_dataloader_schema(): """Test account activity periods dataloader schema.""" expected = AccountActivityPeriodsDataloaderSchema( activity_period_ids=[123, 124, 125], ) data = { 'activity_period_ids': [123, 124, 125], } result = AccountActivityPeriodsDataloaderSchema(**data) assert result == expected def test_account_contracts_schema(): """Test account contracts schema.""" expected = AccountContractsSchema( account_id=123, contract_id=1, contract_name='Contract 1' ) data = { 'account_id': 123, 'contract_id': 1, 'contract_name': 'Contract 1' } actual = AccountContractsSchema(**data) assert actual == expected def test_imprint_schema(): """Test AccountImprintSchema validation.""" expected = AccountImprintSchema( imprintid=123456, imprint='Universal Music Group', account_id=57608, ) data = { 'imprintid': 123456, 'imprint': 'Universal Music Group', 'account_id': 57608, } actual = AccountImprintSchema(**data) assert actual == expected assert actual.imprintid == 123456 assert actual.imprint == 'Universal Music Group' assert actual.account_id == 57608 def test_artist_schema(): """Test AccountArtistSchema validation.""" expected = AccountArtistSchema( artist_id=123456, artist_name='Taylor Swift' ) data = { 'artist_id': 123456, 'artist_name': 'Taylor Swift' } actual = AccountArtistSchema(**data) assert actual == expected assert actual.artist_id == 123456 assert actual.artist_name == 'Taylor Swift' def test_project_schema(): """Test AccountProjectSchema validation.""" expected = AccountProjectSchema( project_id=501 ) data = { 'project_id': 501 } actual = AccountProjectSchema(**data) assert actual == expected assert actual.project_id == 501 def test_recording_schema(): """Test AccountRecordingSchema validation.""" expected = AccountRecordingSchema( recording_id='1234', recording_title='Title', isrc='JPYE70900611' ) data = { 'recording_id': '1234', 'recording_title': 'Title', 'isrc': 'JPYE70900611' } actual = AccountRecordingSchema(**data) assert actual == expected