"""Test generating collection summary.""" from os import path from unittest.mock import patch import config from src.documents import collection_summary @patch('src.documents.collection_summary.create_df') @patch('src.documents.collection_summary.snowflake') @patch('src.documents.collection_summary.generate_pdf_file') @patch('src.documents.collection_summary.OwsRoyalties.get_statement_period') @patch('src.documents.collection_summary.OwsMoneyhub.get_reference_signing_entity') @patch('src.documents.collection_summary.OwsRoyalties.get_contract') @patch('src.documents.collection_summary.OwsAbacusAccount.get_account') @patch('src.documents.collection_summary.is_feature_enabled') def test_build_document( mock_is_feature_enabled, mock_get_account, mock_get_contract, mock_get_reference_signing_entity, mock_get_statement_period, mock_generate_pdf_file, mock_snowflake, mock_create_df, account_fixture, signing_entity_fixture, statement_attachments_fixture, statement_period_fixture, contract_fixture, ): """Test generating a document.""" statement_attachment = statement_attachments_fixture[3] data = { 'COLLECTION_SOCIETY': ['FIRST', 'SECOND'], 'COUNTRY': ['France', 'USA'], 'PRE_WHT_AMOUNT': [884.971677158915, 7.990001404148], 'WHT_AMOUNT': [-132.745754698904, -6.160000494543], 'GROSS_AMOUNT': [752.225922459998, 7.990001404148], 'CLIENT_SHARE': [0.9700, 0.9800], 'NET_REVENUE': [722.136885561595, 7.670401347982], } total_rows = 3 currency = 'USD' expected_path = path.join( config.FILE_OUTPUT_PATH, 'Jeans_Nest_12001_July_2022_collection_summary.pdf' ) mock_is_feature_enabled.return_value = False mock_get_account.return_value = account_fixture mock_get_contract.return_value = contract_fixture mock_get_statement_period.return_value = statement_period_fixture mock_get_reference_signing_entity.return_value = signing_entity_fixture mock_snowflake.get_collection_summary_data.return_value = (data, total_rows) mock_create_df.return_value = data, currency actual_path = collection_summary.build_document(statement_attachment) assert actual_path == expected_path mock_get_account.assert_called_once_with(statement_attachment['account_id']) mock_get_contract.assert_called_once_with(statement_attachment['contract_id']) mock_get_statement_period.assert_called_once_with(statement_attachment['statement_period_id']) mock_get_reference_signing_entity.assert_called_once_with(statement_attachment['contract_id']) mock_snowflake.get_collection_summary_data.assert_called_once_with( statement_attachment['statement_period_id'], statement_attachment['account_id'], statement_attachment['contract_id'], statement_attachment['statement_attachment_type'], ) mock_generate_pdf_file.assert_called_once_with( expected_path, 'collection_summary.html', { 'account_id': account_fixture['account_id'], 'account_name': account_fixture['account_name'], 'contract_id': contract_fixture['contract_id'], 'contract_name': contract_fixture['contract_name'], 'currency_code': currency, 'company_name': signing_entity_fixture['legal_name'], 'company_address': signing_entity_fixture['address'].split(',', 1), 'statement_period_name': statement_period_fixture['statement_period_name'], 'table_info': data, 'logo_path': 'https://cdn.theorchard.io/assets/awal/icons/brand-text.png', }, {'footer-html': 'src/documents/templates/includes/footer.html', 'javascript-delay': '1000'}, ) @patch('src.documents.collection_summary.create_df') @patch('src.documents.collection_summary.snowflake') @patch('src.documents.collection_summary.generate_pdf_file_playwright') @patch('src.documents.collection_summary.OwsRoyalties.get_statement_period') @patch('src.documents.collection_summary.OwsMoneyhub.get_reference_signing_entity') @patch('src.documents.collection_summary.OwsRoyalties.get_contract') @patch('src.documents.collection_summary.OwsAbacusAccount.get_account') @patch('src.documents.collection_summary.is_feature_enabled') def test_build_document_new_pdf_library( mock_is_feature_enabled, mock_get_account, mock_get_contract, mock_get_reference_signing_entity, mock_get_statement_period, mock_generate_pdf_file_playwright, mock_snowflake, mock_create_df, account_fixture, signing_entity_fixture, statement_attachments_fixture, statement_period_fixture, contract_fixture, ): """Test generating a document using new PDF library.""" statement_attachment = statement_attachments_fixture[3] data = { 'COLLECTION_SOCIETY': ['FIRST', 'SECOND'], 'COUNTRY': ['France', 'USA'], 'PRE_WHT_AMOUNT': [884.971677158915, 7.990001404148], 'WHT_AMOUNT': [-132.745754698904, -6.160000494543], 'GROSS_AMOUNT': [752.225922459998, 7.990001404148], 'CLIENT_SHARE': [0.9700, 0.9800], 'NET_REVENUE': [722.136885561595, 7.670401347982], } total_rows = 3 currency = 'USD' expected_path = path.join( config.FILE_OUTPUT_PATH, 'Jeans_Nest_12001_July_2022_collection_summary.pdf' ) mock_is_feature_enabled.return_value = True mock_get_account.return_value = account_fixture mock_get_contract.return_value = contract_fixture mock_get_statement_period.return_value = statement_period_fixture mock_get_reference_signing_entity.return_value = signing_entity_fixture mock_snowflake.get_collection_summary_data.return_value = (data, total_rows) mock_create_df.return_value = data, currency actual_path = collection_summary.build_document(statement_attachment) assert actual_path == expected_path mock_get_account.assert_called_once_with(statement_attachment['account_id']) mock_get_contract.assert_called_once_with(statement_attachment['contract_id']) mock_get_statement_period.assert_called_once_with(statement_attachment['statement_period_id']) mock_get_reference_signing_entity.assert_called_once_with(statement_attachment['contract_id']) mock_snowflake.get_collection_summary_data.assert_called_once_with( statement_attachment['statement_period_id'], statement_attachment['account_id'], statement_attachment['contract_id'], statement_attachment['statement_attachment_type'], ) mock_generate_pdf_file_playwright.assert_called_once_with( expected_path, 'collection_summary.html', 'includes/footer_playwright.html', { 'account_id': account_fixture['account_id'], 'account_name': account_fixture['account_name'], 'contract_id': contract_fixture['contract_id'], 'contract_name': contract_fixture['contract_name'], 'currency_code': currency, 'company_name': signing_entity_fixture['legal_name'], 'company_address': signing_entity_fixture['address'].split(',', 1), 'statement_period_name': statement_period_fixture['statement_period_name'], 'table_info': data, 'logo_path': 'https://cdn.theorchard.io/assets/awal/icons/brand-text.png', }, ) def test_create_df(): """Test building a dataframe for table.""" data = { 'COLLECTION_SOCIETY': ['FIRST', 'SECOND'], 'COUNTRY': ['France', 'USA'], 'PRE_WHT_AMOUNT': [884.971677158915, 7.990001404148], 'WHT_AMOUNT': [-132.745754698904, -6.160000494543], 'GROSS_AMOUNT': [752.225922459998, 7.990001404148], 'CLIENT_SHARE': [0.9700, 0.9800], 'NET_REVENUE': [722.136885561595, 7.670401347982], 'CURRENCY': ['USD', 'USD'], } dataframe_dict, currency = collection_summary.create_df(data) expected_dict = [ { 'COLLECTION_SOCIETY': 'FIRST', 'COUNTRY': 'France', 'PRE_WHT_AMOUNT': '884.97', 'WHT_AMOUNT': '-132.75', 'GROSS_AMOUNT': '752.23', 'CLIENT_SHARE': 0.97, 'NET_REVENUE': '722.14', }, { 'COLLECTION_SOCIETY': 'SECOND', 'COUNTRY': 'USA', 'PRE_WHT_AMOUNT': '7.99', 'WHT_AMOUNT': '-6.16', 'GROSS_AMOUNT': '7.99', 'CLIENT_SHARE': 0.98, 'NET_REVENUE': '7.67', }, { 'COLLECTION_SOCIETY': 'Total', 'COUNTRY': '', 'PRE_WHT_AMOUNT': '892.96', 'WHT_AMOUNT': '-138.91', 'GROSS_AMOUNT': '760.22', 'CLIENT_SHARE': '', 'NET_REVENUE': '729.81', }, ] assert expected_dict == dataframe_dict assert currency == 'USD'