feat: add initial support for order item events

so far just attaching events on creation, but then can view them
This commit is contained in:
Lance Edgar 2025-01-15 19:25:45 -06:00
parent c79b0262f3
commit b4deea76e0
10 changed files with 456 additions and 13 deletions

View file

@ -1109,6 +1109,20 @@ class TestNewOrderBatchHandler(DataTestCase):
self.assertEqual(item.unit_cost, decimal.Decimal('3.99'))
self.assertEqual(item.unit_price_reg, decimal.Decimal('5.99'))
def test_set_initial_item_status(self):
model = self.app.model
enum = self.app.enum
handler = self.make_handler()
user = model.User(username='barney')
item = model.OrderItem()
self.assertIsNone(item.status_code)
self.assertEqual(len(item.events), 0)
handler.set_initial_item_status(item, user)
self.assertEqual(item.status_code, enum.ORDER_ITEM_STATUS_READY)
self.assertEqual(len(item.events), 2)
self.assertEqual(item.events[0].type_code, enum.ORDER_ITEM_EVENT_INITIATED)
self.assertEqual(item.events[1].type_code, enum.ORDER_ITEM_EVENT_READY)
def test_execute(self):
model = self.app.model
enum = self.app.enum

View file

@ -19,6 +19,11 @@ class TestOrder(DataTestCase):
class TestOrderItem(DataTestCase):
def make_config(self, **kw):
config = super().make_config(**kw)
config.setdefault('wutta.enum_spec', 'sideshow.enum')
return config
def test_full_description(self):
item = mod.OrderItem()
@ -44,3 +49,15 @@ class TestOrderItem(DataTestCase):
product_description='Vinegar',
product_size='32oz')
self.assertEqual(str(item), "Bragg Vinegar 32oz")
def test_add_event(self):
model = self.app.model
enum = self.app.enum
user = model.User(username='barney')
item = mod.OrderItem()
self.assertEqual(item.events, [])
item.add_event(enum.ORDER_ITEM_EVENT_INITIATED, user)
item.add_event(enum.ORDER_ITEM_EVENT_READY, user)
self.assertEqual(len(item.events), 2)
self.assertEqual(item.events[0].type_code, enum.ORDER_ITEM_EVENT_INITIATED)
self.assertEqual(item.events[1].type_code, enum.ORDER_ITEM_EVENT_READY)

View file

@ -1338,14 +1338,16 @@ class TestOrderItemView(WebTestCase):
item = model.OrderItem(order_qty=2, order_uom=enum.ORDER_UOM_CASE, case_size=8)
order.items.append(item)
with patch.object(view, 'viewing', new=True):
context = view.get_template_context({'instance': item})
self.assertIn('item', context)
self.assertIs(context['item'], item)
self.assertIn('order', context)
self.assertIs(context['order'], order)
self.assertIn('order_qty_uom_text', context)
self.assertEqual(context['order_qty_uom_text'], "2 Cases (× 8 = 16 Units)")
with patch.object(self.request, 'is_root', new=True):
with patch.object(view, 'viewing', new=True):
form = view.make_model_form(model_instance=item)
context = view.get_template_context({'instance': item, 'form': form})
self.assertIn('item', context)
self.assertIs(context['item'], item)
self.assertIn('order', context)
self.assertIs(context['order'], order)
self.assertIn('order_qty_uom_text', context)
self.assertEqual(context['order_qty_uom_text'], "2 Cases (× 8 = 16 Units)")
def test_get_xref_buttons(self):
self.pyramid_config.add_route('orders.view', '/orders/{uuid}')