"""Revenue By Project model tests.""" from decimal import Decimal from moneyhub.constants.constants import OrderDirection from moneyhub.models import RevenueByProject from tests.unit.conftest import using_mock_snowflake_table ACCOUNT_ID = 24601 _MOCK_DATA = { 'revenue_by_project_dbt': [ { 'account_id': ACCOUNT_ID, 'contract_id': 10001, 'subaccount_id': 1, 'statement_period_id': 10, 'activity_period_id': 10, 'store_id': 1, 'country_code': 'US', 'imprint_id': 11, 'transaction_type_id': 100, 'project_id': 9001, 'project_name': 'Project Alpha', 'project_code': 'PA-001', 'project_artist': 'Artist Alpha', 'product_count': 1, 'account_payee_currency': 'USD', 'net_share_payee_currency': Decimal('10.00'), 'gross_revenue_payee_currency': Decimal('12.00'), }, { 'account_id': ACCOUNT_ID, 'contract_id': 10001, 'subaccount_id': 1, 'statement_period_id': 10, 'activity_period_id': 10, 'store_id': 2, 'country_code': 'GB', 'imprint_id': 12, 'transaction_type_id': 101, 'project_id': 9002, 'project_name': 'Project Beta', 'project_code': 'PB-002', 'project_artist': 'Artist Beta', 'product_count': 2, 'account_payee_currency': 'USD', 'net_share_payee_currency': Decimal('20.00'), 'gross_revenue_payee_currency': Decimal('25.00'), }, { 'account_id': ACCOUNT_ID, 'contract_id': 10002, 'subaccount_id': 2, 'statement_period_id': 11, 'activity_period_id': 11, 'store_id': 2, 'country_code': 'US', 'imprint_id': 11, 'transaction_type_id': 100, 'project_id': 9002, 'project_name': 'Project Beta', 'project_code': 'PB-002', 'project_artist': 'Artist Beta', 'product_count': 2, 'account_payee_currency': 'USD', 'net_share_payee_currency': Decimal('30.00'), 'gross_revenue_payee_currency': Decimal('35.00'), }, ] } @using_mock_snowflake_table(RevenueByProject, _MOCK_DATA) def test_get_by_account_id(): """Test getting revenue by project for an account.""" items, total_records = RevenueByProject.get_by_account_id( ACCOUNT_ID, 10, 0, None, None, None, None, 'project_id', OrderDirection.ASC, None, None, None, None, None, None, None, None, ) assert total_records == 2 assert [item._asdict() for item in items] == [ { 'project_id': Decimal('9001'), 'project_name': 'Project Alpha', 'project_code': 'PA-001', 'project_artist': 'Artist Alpha', 'product_count': Decimal('1'), 'account_payee_currency': 'USD', 'net_share_payee_currency': Decimal('10.000000000000'), 'gross_revenue_payee_currency': Decimal('12.000000000000'), 'total_records': 2, }, { 'project_id': Decimal('9002'), 'project_name': 'Project Beta', 'project_code': 'PB-002', 'project_artist': 'Artist Beta', 'product_count': Decimal('2'), 'account_payee_currency': 'USD', 'net_share_payee_currency': Decimal('50.000000000000'), 'gross_revenue_payee_currency': Decimal('60.000000000000'), 'total_records': 2, }, ] @using_mock_snowflake_table(RevenueByProject, _MOCK_DATA) def test_get_by_account_id_with_filters_and_search(): """Test project query filters and search term on name/code/id.""" items, total_records = RevenueByProject.get_by_account_id( ACCOUNT_ID, 10, 0, 10001, 1, 10, 10, 'project_name', OrderDirection.ASC, 'Project', None, 10, 10, ['US'], [11], [100], [1], ) assert total_records == 1 assert items[0].project_id == 9001 numeric_items, numeric_total_records = RevenueByProject.get_by_account_id( ACCOUNT_ID, 10, 0, None, None, None, None, 'project_id', OrderDirection.ASC, '9002', None, None, None, None, None, None, None, ) assert numeric_total_records == 1 assert numeric_items[0].project_id == 9002 @using_mock_snowflake_table(RevenueByProject, _MOCK_DATA) def test_get_projects_by_account_id(): """Test getting distinct projects by account id.""" projects = RevenueByProject.get_projects_by_account_id(ACCOUNT_ID, 50, None, None) assert len(projects) == 2 assert projects[0].project_id == 9001 @using_mock_snowflake_table(RevenueByProject, _MOCK_DATA) def test_get_projects_by_account_id_with_code_search(): """Test getting distinct projects filtered by project code.""" projects = RevenueByProject.get_projects_by_account_id(ACCOUNT_ID, 50, 'PA-001', None) assert len(projects) == 1 assert projects[0].project_id == 9001 @using_mock_snowflake_table(RevenueByProject, _MOCK_DATA) def test_get_projects_by_account_id_with_name_search(): """Test getting distinct projects filtered by project name.""" projects = RevenueByProject.get_projects_by_account_id(ACCOUNT_ID, 50, 'Alpha', None) assert len(projects) == 1 assert projects[0].project_id == 9001 @using_mock_snowflake_table(RevenueByProject, _MOCK_DATA) def test_get_projects_by_account_id_with_id_search(): """Test getting distinct projects filtered by numeric project ID.""" projects = RevenueByProject.get_projects_by_account_id(ACCOUNT_ID, 50, '9002', None) assert len(projects) == 1 assert projects[0].project_id == 9002 @using_mock_snowflake_table(RevenueByProject, _MOCK_DATA) def test_get_projects_by_account_id_with_subaccount(): """Test getting distinct projects filtered by subaccount id.""" projects = RevenueByProject.get_projects_by_account_id(ACCOUNT_ID, 50, None, 1) assert len(projects) == 2