"""KnrDetailsDocument model tests.""" from unittest.mock import patch from payee.logic.secure_document import ( create_secure_document_details, has_secure_document_details, ) from payee.models.knr_details import KnrDetailsDocument from tests.constants import MOCK_AUDIT_FIELDS @patch('payee.logic.secure_document.get_audit_fields') def test_knr_details_document_roundtrip(mock_get_audit_fields, mock_config): """Test knr details document create and retrieve.""" account_payee_id = '1' mock_get_audit_fields.return_value = MOCK_AUDIT_FIELDS create_params = { 'account_payee_id': account_payee_id, 'w_form_type': 'W9', 'w_form_expiry': '2025-12-31', 'sap_vendor_id': 'SAP123456', } create_secure_document_details( mock_config.SDM_CONFIG, KnrDetailsDocument, **create_params ) result = has_secure_document_details(account_payee_id, KnrDetailsDocument) response = KnrDetailsDocument.build_response(account_payee_id, result) assert response is not None assert response['account_payee_id'] == account_payee_id assert response['w_form']['w_form_type'] == 'W9' assert response['w_form']['w_form_expiry'] == '2025-12-31' assert response['sap_vendor_id'] == 'SAP123456' assert response['revision'] == '0' assert ( response['modified_by_profile_type'] == MOCK_AUDIT_FIELDS['modified_by_profile_type'] ) assert ( response['modified_by_profile_id'] == MOCK_AUDIT_FIELDS['modified_by_profile_id'] ) assert response['modified_by_identity'] == MOCK_AUDIT_FIELDS['modified_by_identity'] assert response['modified_at'] == MOCK_AUDIT_FIELDS['modified_at'] @patch('payee.logic.secure_document.get_audit_fields') def test_knr_details_document_minimal_fields(mock_get_audit_fields, mock_config): """Test knr details document with minimal required fields.""" account_payee_id = '2' mock_get_audit_fields.return_value = MOCK_AUDIT_FIELDS create_params = { 'account_payee_id': account_payee_id, 'w_form_type': 'W8BEN', } create_secure_document_details( mock_config.SDM_CONFIG, KnrDetailsDocument, **create_params ) result = has_secure_document_details(account_payee_id, KnrDetailsDocument) response = KnrDetailsDocument.build_response(account_payee_id, result) assert response is not None assert response['account_payee_id'] == account_payee_id assert response['w_form']['w_form_type'] == 'W8BEN' assert response['w_form']['w_form_expiry'] is None assert response['sap_vendor_id'] is None assert response['revision'] == '0' def test_knr_details_document_build_response_with_none(): """Test that build_response handles None secure_document_item gracefully.""" account_payee_id = '1' result = KnrDetailsDocument.build_response(account_payee_id, None) assert result is None def test_knr_details_document_build_response_with_none_obscure_pii(): """Test that build_response handles None secure_document_item with obscure_pii flag.""" account_payee_id = '1' result = KnrDetailsDocument.build_response(account_payee_id, None, obscure_pii=True) assert result is None @patch('payee.logic.secure_document.get_audit_fields') def test_knr_details_document_with_all_optional_fields( mock_get_audit_fields, mock_config ): """Test knr details document with all optional fields populated.""" account_payee_id = '3' mock_get_audit_fields.return_value = MOCK_AUDIT_FIELDS create_params = { 'account_payee_id': account_payee_id, 'w_form_type': 'W8BENE', 'w_form_expiry': '2026-06-30', 'sap_vendor_id': 'SAP987654', } create_secure_document_details( mock_config.SDM_CONFIG, KnrDetailsDocument, **create_params ) result = has_secure_document_details(account_payee_id, KnrDetailsDocument) response = KnrDetailsDocument.build_response(account_payee_id, result) assert response is not None assert response['account_payee_id'] == account_payee_id assert response['w_form']['w_form_type'] == 'W8BENE' assert response['w_form']['w_form_expiry'] == '2026-06-30' assert response['sap_vendor_id'] == 'SAP987654' assert response['modified_at'] == MOCK_AUDIT_FIELDS['modified_at'] assert response['revision'] == '0'