46 lines
1.7 KiB
Python
46 lines
1.7 KiB
Python
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)
|