Real install verified on the Westin clone; these were test-only bugs:
- Task-create tests hardcoded scheduled_date 2026-06-03, now in the past, which
the base _check_no_overlap rejects ('Cannot schedule tasks in the past'). Use
future dates (tz test pins a future July date so Toronto stays EDT for the
9:00->13:00 UTC assertion).
- Service-rate resolver tests created rows with seeded codes (callout_standard_normal,
per_km) -> UNIQUE(code) violation post-install. Assert against the seed instead.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
61 lines
2.3 KiB
Python
61 lines
2.3 KiB
Python
# -*- coding: utf-8 -*-
|
|
from odoo.tests.common import TransactionCase, tagged
|
|
|
|
|
|
@tagged('post_install', '-at_install')
|
|
class TestServiceRate(TransactionCase):
|
|
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
super().setUpClass()
|
|
cls.Rate = cls.env['fusion.service.rate']
|
|
cls.product = cls.env['product.product'].create({
|
|
'name': 'Test Service Product', 'type': 'service',
|
|
})
|
|
|
|
def _make(self, **kw):
|
|
vals = dict(name='Rate', code='c1', rate_kind='callout', category='standard',
|
|
timing='normal', product_id=self.product.id, price=95.0, unit='fixed')
|
|
vals.update(kw)
|
|
return self.Rate.create(vals)
|
|
|
|
def test_get_callout_matches_category_and_timing(self):
|
|
# Assert against the real seed (codes are unique, so creating colliding
|
|
# standard/normal rows would violate the UNIQUE(code) constraint).
|
|
r = self.Rate.get_callout('standard', 'normal')
|
|
self.assertTrue(r)
|
|
self.assertEqual(r.code, 'callout_standard_normal')
|
|
self.assertEqual(r.rate_kind, 'callout')
|
|
|
|
def test_get_callout_in_shop_returns_empty(self):
|
|
self._make(code='callout_standard_normal_b')
|
|
self.assertFalse(self.Rate.get_callout('standard', 'normal', in_shop=True))
|
|
|
|
def test_get_rate_by_code(self):
|
|
# 'per_km' is a seeded code; the resolver returns that row.
|
|
r = self.Rate.get_rate('per_km')
|
|
self.assertTrue(r)
|
|
self.assertEqual(r.unit, 'per_km')
|
|
|
|
def test_code_must_be_unique(self):
|
|
self._make(code='dup')
|
|
with self.assertRaises(Exception):
|
|
self._make(code='dup')
|
|
self.env.flush_all()
|
|
|
|
def test_seeded_callouts_exist(self):
|
|
# standard normal $95, lift after-hours $205 are the canonical seeds
|
|
std = self.env.ref('fusion_claims.rate_callout_standard_normal')
|
|
self.assertEqual(std.price, 95.0)
|
|
self.assertEqual(std.rate_kind, 'callout')
|
|
self.assertTrue(std.product_id)
|
|
lift_ah = self.env.ref('fusion_claims.rate_callout_lift_afterhours')
|
|
self.assertEqual(lift_ah.price, 205.0)
|
|
self.assertTrue(lift_ah.adds_per_km)
|
|
|
|
def test_seeded_per_km(self):
|
|
km = self.env['fusion.service.rate'].get_rate('per_km')
|
|
self.assertTrue(km)
|
|
self.assertEqual(km.unit, 'per_km')
|
|
self.assertEqual(km.price, 0.70)
|