Premium composition
This commit is contained in:
@@ -1907,6 +1907,13 @@ class PurchaseTradeTestCase(ModuleTestCase):
|
||||
self.assertEqual(trigger.from_a, datetime.date(2026, 4, 1))
|
||||
self.assertEqual(trigger.to_a, datetime.date(2026, 4, 30))
|
||||
|
||||
def test_pricing_trigger_average_defaults_to_true_and_last_label_is_latest(self):
|
||||
'pricing trigger defaults to Avg and labels last as Latest'
|
||||
Trigger = Pool().get('pricing.trigger')
|
||||
|
||||
self.assertTrue(Trigger.default_average())
|
||||
self.assertEqual(Trigger.last.string, 'Latest')
|
||||
|
||||
def test_pricing_component_matrix_returns_generic_line_price(self):
|
||||
'matrix pricing can use an unconditional matrix line as a component price'
|
||||
Component = Pool().get('pricing.component')
|
||||
@@ -2041,6 +2048,37 @@ class PurchaseTradeTestCase(ModuleTestCase):
|
||||
self.assertEqual(Sale.default_tolerance_option(), '')
|
||||
self.assertEqual(Purchase.default_tolerance_option(), '')
|
||||
|
||||
def test_purchase_line_premium_sums_decomposition_base_amounts(self):
|
||||
'purchase line premium is the sum of premium decomposition base amounts'
|
||||
Line = Pool().get('purchase.line')
|
||||
line = Line()
|
||||
line.premium_decomposition = [
|
||||
Mock(base_amount=Decimal('12.50')),
|
||||
Mock(base_amount=Decimal('-2.25')),
|
||||
]
|
||||
|
||||
self.assertEqual(line.get_premium('premium'), Decimal('10.2500'))
|
||||
|
||||
def test_premium_composition_base_amount_converts_on_contract_date(self):
|
||||
'premium composition base amount converts to contract currency at spot date'
|
||||
Premium = Pool().get('premium.composition')
|
||||
premium = Premium()
|
||||
source_currency = Mock(id=1)
|
||||
target_currency = Mock(id=2)
|
||||
premium.premium = Decimal('100')
|
||||
premium.currency = source_currency
|
||||
premium.line = Mock(purchase=Mock(
|
||||
currency=target_currency,
|
||||
purchase_date=datetime.date(2026, 5, 1)))
|
||||
currency_model = Mock(
|
||||
compute=Mock(return_value=Decimal('120')))
|
||||
|
||||
with patch('trytond.modules.purchase_trade.purchase.Pool') as PoolMock:
|
||||
PoolMock.return_value.get.return_value = currency_model
|
||||
amount = premium.get_base_amount('base_amount')
|
||||
|
||||
self.assertEqual(amount, Decimal('120.000000'))
|
||||
|
||||
def test_fee_rule_matches_purchase_line_conditions(self):
|
||||
'fee rule matches purchase line conditions'
|
||||
party = Mock(id=1)
|
||||
|
||||
Reference in New Issue
Block a user