Import Prices
This commit is contained in:
@@ -93,9 +93,9 @@ class PurchaseTradeTestCase(ModuleTestCase):
|
||||
'price_value': '98',
|
||||
}])
|
||||
|
||||
self.assertEqual(stats['imported'], 0)
|
||||
self.assertEqual(len(stats['imported']), 0)
|
||||
self.assertEqual(len(stats['skipped']), 1)
|
||||
self.assertEqual(stats['skipped'][0]['reason'], 'price_index missing')
|
||||
self.assertEqual(stats['skipped'][0]['detail'], 'price_index missing')
|
||||
|
||||
def test_import_prices_creates_index_and_imports_new_price(self):
|
||||
'import prices creates missing index when requested'
|
||||
@@ -117,8 +117,8 @@ class PurchaseTradeTestCase(ModuleTestCase):
|
||||
'price_value': '98',
|
||||
}], create_missing_price_index=True)
|
||||
|
||||
self.assertEqual(stats['created_indexes'], 1)
|
||||
self.assertEqual(stats['imported'], 1)
|
||||
self.assertEqual(len(stats['created_indexes']), 1)
|
||||
self.assertEqual(len(stats['imported']), 1)
|
||||
self.assertEqual(price_model.records[0].price_index, 'LME Copper')
|
||||
self.assertEqual(price_value_model.records[0].price_value, 98.0)
|
||||
|
||||
@@ -143,10 +143,10 @@ class PurchaseTradeTestCase(ModuleTestCase):
|
||||
'price_value': '98',
|
||||
}])
|
||||
|
||||
self.assertEqual(stats['updated'], 0)
|
||||
self.assertEqual(len(stats['updated']), 0)
|
||||
self.assertEqual(price_value_model.records[0].price_value, 97.0)
|
||||
self.assertEqual(
|
||||
stats['skipped'][0]['reason'], 'price_date already exists')
|
||||
stats['skipped'][0]['detail'], 'price_date already exists')
|
||||
|
||||
def test_import_prices_overwrites_existing_date_when_requested(self):
|
||||
'import prices updates existing price dates when requested'
|
||||
@@ -169,9 +169,66 @@ class PurchaseTradeTestCase(ModuleTestCase):
|
||||
'price_value': '98',
|
||||
}], overwrite_existing_price=True)
|
||||
|
||||
self.assertEqual(stats['updated'], 1)
|
||||
self.assertEqual(len(stats['updated']), 1)
|
||||
self.assertEqual(price_value_model.records[0].price_value, 98.0)
|
||||
|
||||
def test_import_prices_collects_row_errors(self):
|
||||
'import prices reports invalid row values without hiding the result'
|
||||
price = SimpleNamespace(id=1, price_index='LME Copper')
|
||||
price_model = _FakePriceModel([price])
|
||||
price_value_model = _FakePriceValueModel()
|
||||
|
||||
with patch('trytond.modules.purchase_trade.pricing.Pool') as pool:
|
||||
pool.return_value.get.side_effect = {
|
||||
'price.price': price_model,
|
||||
'price.price_value': price_value_model,
|
||||
}.__getitem__
|
||||
|
||||
stats = ImportPrices._import_rows([{
|
||||
'price_index': 'LME Copper',
|
||||
'price_date': date(2026, 3, 27),
|
||||
'price_value': 'not-a-number',
|
||||
}])
|
||||
|
||||
self.assertEqual(len(stats['errors']), 1)
|
||||
self.assertIn('not-a-number', stats['errors'][0]['detail'])
|
||||
|
||||
def test_import_prices_result_lists_all_outcome_sections(self):
|
||||
'import prices formats detailed result sections'
|
||||
message = ImportPrices._format_result({
|
||||
'created_indexes': [{
|
||||
'row': 2,
|
||||
'price_index': 'LME Copper',
|
||||
'price_date': None,
|
||||
'detail': 'price index created',
|
||||
}],
|
||||
'imported': [{
|
||||
'row': 2,
|
||||
'price_index': 'LME Copper',
|
||||
'price_date': date(2026, 3, 27),
|
||||
'detail': 'price_value=98.0',
|
||||
}],
|
||||
'updated': [],
|
||||
'skipped': [{
|
||||
'row': 3,
|
||||
'price_index': 'LME Copper',
|
||||
'price_date': date(2026, 3, 27),
|
||||
'detail': 'price_date already exists',
|
||||
}],
|
||||
'errors': [{
|
||||
'row': 4,
|
||||
'price_index': 'LME Zinc',
|
||||
'price_date': 'bad-date',
|
||||
'detail': 'Invalid price_date: bad-date',
|
||||
}],
|
||||
})
|
||||
|
||||
self.assertIn('Created price indexes:', message)
|
||||
self.assertIn('Successfully imported prices:', message)
|
||||
self.assertIn('Skipped records:', message)
|
||||
self.assertIn('Errors:', message)
|
||||
self.assertIn('Row 2 - LME Copper / 2026-03-27', message)
|
||||
|
||||
|
||||
class _FakePriceModel:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user