from odoo.tests.common import TransactionCase from odoo.tests import tagged from odoo.addons.fusion_accounting_assets.services.useful_life_predictor import ( predict_useful_life, ) from odoo.addons.fusion_accounting_assets.services.useful_life_prompt import ( SYSTEM_PROMPT, build_prompt, ) @tagged('post_install', '-at_install') class TestUsefulLifePredictor(TransactionCase): def setUp(self): super().setUp() # Ensure no provider configured for these fallback tests. self.env['ir.config_parameter'].sudo().search([ ('key', 'in', [ 'fusion_accounting.provider.asset_useful_life', 'fusion_accounting.provider.default', ]) ]).unlink() def test_fallback_computer(self): result = predict_useful_life(self.env, description="Dell laptop") self.assertEqual(result['useful_life_years'], 4) self.assertEqual(result['depreciation_method'], 'straight_line') def test_fallback_furniture(self): result = predict_useful_life(self.env, description="office desk") self.assertEqual(result['useful_life_years'], 7) def test_fallback_vehicle_uses_declining(self): result = predict_useful_life(self.env, description="Ford F-150 truck") self.assertEqual(result['useful_life_years'], 5) self.assertEqual(result['depreciation_method'], 'declining_balance') def test_fallback_default_for_unknown(self): result = predict_useful_life(self.env, description="mystery widget") self.assertEqual(result['useful_life_years'], 5) self.assertEqual(result['confidence'], 0.3) def test_returns_dict_with_required_keys(self): result = predict_useful_life(self.env, description="server") for key in ('useful_life_years', 'depreciation_method', 'rationale', 'confidence'): self.assertIn(key, result) @tagged('post_install', '-at_install') class TestUsefulLifePrompt(TransactionCase): def test_system_prompt_requires_json(self): self.assertIn('JSON', SYSTEM_PROMPT) def test_build_prompt_returns_tuple(self): result = build_prompt(description='test') self.assertEqual(len(result), 2) def test_user_prompt_includes_amount(self): _, user = build_prompt(description='laptop', amount=2000) self.assertIn('2,000', user)