from odoo.tests.common import TransactionCase from odoo.tests import tagged from odoo.addons.fusion_accounting_assets.services.salvage_value import ( SalvageConfig, compute_salvage_value, remaining_useful_life_value, ) @tagged('post_install', '-at_install') class TestSalvageValue(TransactionCase): def test_zero_method_returns_zero(self): v = compute_salvage_value(cost=10000, config=SalvageConfig(method='zero')) self.assertEqual(v, 0.0) def test_percentage_method(self): v = compute_salvage_value( cost=10000, config=SalvageConfig(method='percentage', value=10), ) self.assertAlmostEqual(v, 1000.0, places=2) def test_fixed_method(self): v = compute_salvage_value( cost=10000, config=SalvageConfig(method='fixed', value=750), ) self.assertAlmostEqual(v, 750.0, places=2) def test_unknown_method_raises(self): with self.assertRaises(ValueError): compute_salvage_value( cost=10000, config=SalvageConfig(method='bogus', value=0), # type: ignore[arg-type] ) def test_remaining_useful_life_value_midway(self): # Halfway through life; current book 6000, salvage 1000 -> 1000 + 5000*0.5 = 3500 v = remaining_useful_life_value( current_book=6000, salvage=1000, periods_used=5, total_periods=10, ) self.assertAlmostEqual(v, 3500.0, places=2) def test_remaining_useful_life_value_at_end_returns_salvage(self): v = remaining_useful_life_value( current_book=1200, salvage=1000, periods_used=10, total_periods=10, ) self.assertEqual(v, 1000.0)