81 lines
3.0 KiB
Python
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)
|