from datetime import date from odoo.tests.common import TransactionCase from odoo.tests import tagged @tagged('post_install', '-at_install') class TestFusionAssetDepreciationLine(TransactionCase): def setUp(self): super().setUp() self.asset = self.env['fusion.asset'].create({ 'name': 'Asset for Lines', 'cost': 12000, 'salvage_value': 0, 'acquisition_date': date(2026, 1, 1), 'method': 'straight_line', 'useful_life_years': 1, }) def _make_line(self, period_index, amount=1000.0, scheduled_date=None): return self.env['fusion.asset.depreciation.line'].create({ 'asset_id': self.asset.id, 'period_index': period_index, 'scheduled_date': scheduled_date or date(2026, period_index, 28), 'amount': amount, }) def test_create_line_defaults_unposted(self): line = self._make_line(1) self.assertFalse(line.is_posted) self.assertFalse(line.posted_date) self.assertFalse(line.move_id) self.assertEqual(line.company_id, self.asset.company_id) self.assertEqual(line.currency_id, self.asset.currency_id) def test_action_post_marks_line_posted(self): line = self._make_line(2) line.action_post() self.assertTrue(line.is_posted) self.assertTrue(line.posted_date) def test_action_post_idempotent_keeps_first_date(self): line = self._make_line(3) line.action_post() first_date = line.posted_date line.action_post() self.assertEqual(line.posted_date, first_date) def test_unique_period_per_asset(self): self._make_line(4) with self.assertRaises(Exception): self._make_line(4) def test_book_value_reflects_posted_lines_only(self): l1 = self._make_line(5, amount=1000) self._make_line(6, amount=1500) self.assertEqual(self.asset.book_value, 12000) l1.action_post() self.asset.invalidate_recordset(['book_value', 'total_depreciated']) self.assertEqual(self.asset.total_depreciated, 1000) self.assertEqual(self.asset.book_value, 11000)