Files
Odoo-Modules/fusion_accounting_followup/tests/test_followup_text_generator.py
2026-04-19 20:40:26 -04:00

81 lines
3.0 KiB
Python

from odoo.tests.common import TransactionCase
from odoo.tests import tagged
from odoo.addons.fusion_accounting_followup.services.followup_text_generator import (
generate_followup_text,
)
from odoo.addons.fusion_accounting_followup.services.followup_text_prompt import (
SYSTEM_PROMPT, build_prompt,
)
@tagged('post_install', '-at_install')
class TestFollowupTextGenerator(TransactionCase):
def setUp(self):
super().setUp()
self.env['ir.config_parameter'].sudo().search([
('key', 'in', ['fusion_accounting.provider.followup_text',
'fusion_accounting.provider.default'])
]).unlink()
def test_fallback_gentle(self):
result = generate_followup_text(
self.env, partner_name='Acme Corp', total_overdue=1500,
currency_code='USD', longest_overdue_days=15, tone='gentle',
invoice_count=2,
)
self.assertEqual(result['tone_used'], 'gentle')
self.assertIn('Acme Corp', result['body'])
self.assertIn('1,500.00', result['body'])
def test_fallback_firm(self):
result = generate_followup_text(
self.env, partner_name='Acme', total_overdue=5000,
currency_code='USD', longest_overdue_days=45, tone='firm',
invoice_count=3,
)
self.assertEqual(result['tone_used'], 'firm')
def test_fallback_legal(self):
result = generate_followup_text(
self.env, partner_name='Acme', total_overdue=10000,
currency_code='USD', longest_overdue_days=90, tone='legal',
invoice_count=5,
)
self.assertEqual(result['tone_used'], 'legal')
self.assertIn('FINAL NOTICE', result['subject'])
def test_returns_required_keys(self):
result = generate_followup_text(
self.env, partner_name='X', total_overdue=100,
currency_code='USD', longest_overdue_days=10, tone='gentle',
)
for key in ('subject', 'body', 'tone_used', 'key_points'):
self.assertIn(key, result)
@tagged('post_install', '-at_install')
class TestFollowupTextPrompt(TransactionCase):
def test_system_prompt_requires_json(self):
self.assertIn('JSON', SYSTEM_PROMPT)
self.assertIn('"subject"', SYSTEM_PROMPT)
self.assertIn('"body"', SYSTEM_PROMPT)
def test_build_prompt_returns_tuple(self):
result = build_prompt(
partner_name='X', total_overdue=100, currency_code='USD',
longest_overdue_days=10, tone='gentle',
)
self.assertEqual(len(result), 2)
self.assertIn('100.00', result[1])
def test_build_prompt_includes_risk_drivers(self):
_, user = build_prompt(
partner_name='X', total_overdue=100, currency_code='USD',
longest_overdue_days=10, tone='firm',
risk_drivers=['Chronic late payer', '5/10 paid late'],
)
self.assertIn('RISK FACTORS', user)
self.assertIn('Chronic late payer', user)