from datetime import date from odoo.tests.common import TransactionCase from odoo.tests import tagged from odoo.exceptions import ValidationError @tagged('post_install', '-at_install') class TestFusionAsset(TransactionCase): def setUp(self): super().setUp() self.asset_vals = { 'name': 'Test Asset', 'cost': 10000, 'salvage_value': 1000, 'acquisition_date': date(2026, 1, 1), 'method': 'straight_line', 'useful_life_years': 5, } def test_create_minimal(self): a = self.env['fusion.asset'].create(self.asset_vals) self.assertEqual(a.state, 'draft') self.assertEqual(a.book_value, 10000) def test_state_transitions_draft_to_running(self): a = self.env['fusion.asset'].create(self.asset_vals) a.action_set_running() self.assertEqual(a.state, 'running') self.assertTrue(a.in_service_date) def test_pause_resume(self): a = self.env['fusion.asset'].create(self.asset_vals) a.action_set_running() a.action_pause() self.assertEqual(a.state, 'paused') a.action_resume() self.assertEqual(a.state, 'running') def test_cannot_pause_from_draft(self): a = self.env['fusion.asset'].create(self.asset_vals) with self.assertRaises(ValidationError): a.action_pause() def test_negative_cost_rejected(self): with self.assertRaises(Exception): self.env['fusion.asset'].create({**self.asset_vals, 'cost': -100}) def test_salvage_exceeds_cost_rejected(self): with self.assertRaises(Exception): self.env['fusion.asset'].create( {**self.asset_vals, 'cost': 1000, 'salvage_value': 5000}, ) def test_book_value_starts_at_cost(self): a = self.env['fusion.asset'].create(self.asset_vals) self.assertEqual(a.book_value, a.cost) self.assertEqual(a.total_depreciated, 0)