Hedging setup
This commit is contained in:
@@ -266,6 +266,112 @@ class PurchaseTradeTestCase(ModuleTestCase):
|
||||
|
||||
lot_model.save.assert_not_called()
|
||||
|
||||
def test_purchase_auto_hedge_under_uses_floor_contract_count(self):
|
||||
'purchase auto hedge under creates a short floor contract quantity'
|
||||
unit = Mock()
|
||||
price_index = Mock(id=7)
|
||||
price_index.get_qt.side_effect = [Decimal('17'), Decimal('17')]
|
||||
line = Mock(
|
||||
id=12,
|
||||
derivatives=[],
|
||||
coffee_market_reference=price_index,
|
||||
coffee_market_price=Decimal('300'),
|
||||
quantity_theorical=Decimal('26.4'),
|
||||
quantity=None,
|
||||
unit=unit,
|
||||
product=Mock(id=3),
|
||||
purchase=Mock(id=4, party=Mock(id=5)))
|
||||
config_model = Mock()
|
||||
config_model.search.return_value = [
|
||||
Mock(auto_hedging=True, auto_hedging_over=False)]
|
||||
derivative_model = Mock()
|
||||
date_model = Mock()
|
||||
date_model.today.return_value = datetime.date(2026, 7, 16)
|
||||
pool = Mock()
|
||||
pool.get.side_effect = lambda name: {
|
||||
'purchase.configuration': config_model,
|
||||
'derivative.derivative': derivative_model,
|
||||
'ir.date': date_model,
|
||||
}[name]
|
||||
|
||||
with patch.object(purchase_module, 'Pool', return_value=pool):
|
||||
purchase_module.Line._ensure_auto_hedge_derivative(line)
|
||||
|
||||
derivative_model.create.assert_called_once_with([{
|
||||
'purchase': 4,
|
||||
'line': 12,
|
||||
'product': 3,
|
||||
'party': 5,
|
||||
'price_index': 7,
|
||||
'nb_ct': 1,
|
||||
'price': Decimal('300'),
|
||||
'direction': 'short',
|
||||
'trade_date': datetime.date(2026, 7, 16),
|
||||
'open_qty': Decimal('17'),
|
||||
}])
|
||||
|
||||
def test_sale_auto_hedge_over_uses_ceiling_contract_count(self):
|
||||
'sale auto hedge over creates a long ceiling contract quantity'
|
||||
unit = Mock()
|
||||
price_index = Mock(id=8)
|
||||
price_index.get_qt.side_effect = [Decimal('17'), Decimal('34')]
|
||||
line = Mock(
|
||||
id=22,
|
||||
derivatives=[],
|
||||
coffee_market_reference=price_index,
|
||||
coffee_market_price=Decimal('301'),
|
||||
quantity_theorical=Decimal('26.4'),
|
||||
quantity=None,
|
||||
unit=unit,
|
||||
product=Mock(id=13),
|
||||
sale=Mock(id=14, party=Mock(id=15)))
|
||||
config_model = Mock()
|
||||
config_model.search.return_value = [
|
||||
Mock(auto_hedging=True, auto_hedging_over=True)]
|
||||
derivative_model = Mock()
|
||||
date_model = Mock()
|
||||
date_model.today.return_value = datetime.date(2026, 7, 16)
|
||||
pool = Mock()
|
||||
pool.get.side_effect = lambda name: {
|
||||
'sale.configuration': config_model,
|
||||
'derivative.derivative': derivative_model,
|
||||
'ir.date': date_model,
|
||||
}[name]
|
||||
|
||||
with patch.object(sale_module, 'Pool', return_value=pool):
|
||||
sale_module.SaleLine._ensure_auto_hedge_derivative(line)
|
||||
|
||||
derivative_model.create.assert_called_once_with([{
|
||||
'sale': 14,
|
||||
'sale_line': 22,
|
||||
'product': 13,
|
||||
'party': 15,
|
||||
'price_index': 8,
|
||||
'nb_ct': 2,
|
||||
'price': Decimal('301'),
|
||||
'direction': 'long',
|
||||
'trade_date': datetime.date(2026, 7, 16),
|
||||
'open_qty': Decimal('34'),
|
||||
}])
|
||||
|
||||
def test_auto_hedge_keeps_existing_manual_derivative(self):
|
||||
'auto hedge does not create a duplicate when a derivative exists'
|
||||
line = Mock(derivatives=[Mock()])
|
||||
config_model = Mock()
|
||||
config_model.search.return_value = [
|
||||
Mock(auto_hedging=True, auto_hedging_over=True)]
|
||||
derivative_model = Mock()
|
||||
pool = Mock()
|
||||
pool.get.side_effect = lambda name: {
|
||||
'purchase.configuration': config_model,
|
||||
'derivative.derivative': derivative_model,
|
||||
}[name]
|
||||
|
||||
with patch.object(purchase_module, 'Pool', return_value=pool):
|
||||
purchase_module.Line._ensure_auto_hedge_derivative(line)
|
||||
|
||||
derivative_model.create.assert_not_called()
|
||||
|
||||
def test_itsa_book_year_suffix_uses_april_fiscal_start(self):
|
||||
'ITSA book year changes on April 1st'
|
||||
self.assertEqual(
|
||||
|
||||
Reference in New Issue
Block a user