feat: add tools to change order item status; add notes
This commit is contained in:
parent
b4deea76e0
commit
9d378a0c5f
6 changed files with 520 additions and 18 deletions
|
@ -1183,6 +1183,19 @@ class TestOrderView(WebTestCase):
|
|||
view.configure_row_grid(grid)
|
||||
self.assertIn('product_scancode', grid.linked_columns)
|
||||
|
||||
def test_row_grid_row_class(self):
|
||||
model = self.app.model
|
||||
enum = self.app.enum
|
||||
view = self.make_view()
|
||||
|
||||
# typical
|
||||
item = model.OrderItem(status_code=enum.ORDER_ITEM_STATUS_READY)
|
||||
self.assertIsNone(view.row_grid_row_class(item, {}, 1))
|
||||
|
||||
# warning
|
||||
item = model.OrderItem(status_code=enum.ORDER_ITEM_STATUS_CANCELED)
|
||||
self.assertEqual(view.row_grid_row_class(item, {}, 1), 'has-background-warning')
|
||||
|
||||
def test_render_status_code(self):
|
||||
enum = self.app.enum
|
||||
view = self.make_view()
|
||||
|
@ -1291,17 +1304,18 @@ class TestOrderItemView(WebTestCase):
|
|||
self.assertEqual(view.render_status_code(None, None, enum.ORDER_ITEM_STATUS_INITIATED),
|
||||
'initiated')
|
||||
|
||||
def test_get_instance_title(self):
|
||||
def test_grid_row_class(self):
|
||||
model = self.app.model
|
||||
enum = self.app.enum
|
||||
view = self.make_view()
|
||||
|
||||
item = model.OrderItem(product_brand='Bragg',
|
||||
product_description='Vinegar',
|
||||
product_size='32oz',
|
||||
status_code=enum.ORDER_ITEM_STATUS_INITIATED)
|
||||
title = view.get_instance_title(item)
|
||||
self.assertEqual(title, "(initiated) Bragg Vinegar 32oz")
|
||||
# typical
|
||||
item = model.OrderItem(status_code=enum.ORDER_ITEM_STATUS_READY)
|
||||
self.assertIsNone(view.grid_row_class(item, {}, 1))
|
||||
|
||||
# warning
|
||||
item = model.OrderItem(status_code=enum.ORDER_ITEM_STATUS_CANCELED)
|
||||
self.assertEqual(view.grid_row_class(item, {}, 1), 'has-background-warning')
|
||||
|
||||
def test_configure_form(self):
|
||||
model = self.app.model
|
||||
|
@ -1349,6 +1363,24 @@ class TestOrderItemView(WebTestCase):
|
|||
self.assertIn('order_qty_uom_text', context)
|
||||
self.assertEqual(context['order_qty_uom_text'], "2 Cases (× 8 = 16 Units)")
|
||||
|
||||
def test_render_event_note(self):
|
||||
model = self.app.model
|
||||
enum = self.app.enum
|
||||
view = self.make_view()
|
||||
|
||||
# typical
|
||||
event = model.OrderItemEvent(type_code=enum.ORDER_ITEM_EVENT_READY, note='testing')
|
||||
result = view.render_event_note(event, 'note', 'testing')
|
||||
self.assertEqual(result, 'testing')
|
||||
|
||||
# user note
|
||||
event = model.OrderItemEvent(type_code=enum.ORDER_ITEM_EVENT_NOTE_ADDED, note='testing2')
|
||||
result = view.render_event_note(event, 'note', 'testing2')
|
||||
self.assertNotEqual(result, 'testing2')
|
||||
self.assertIn('<span', result)
|
||||
self.assertIn('class="has-background-info-light"', result)
|
||||
self.assertIn('testing2', result)
|
||||
|
||||
def test_get_xref_buttons(self):
|
||||
self.pyramid_config.add_route('orders.view', '/orders/{uuid}')
|
||||
model = self.app.model
|
||||
|
@ -1371,3 +1403,86 @@ class TestOrderItemView(WebTestCase):
|
|||
buttons = view.get_xref_buttons(item)
|
||||
self.assertEqual(len(buttons), 1)
|
||||
self.assertIn("View the Order", buttons[0])
|
||||
|
||||
def test_add_note(self):
|
||||
self.pyramid_config.add_route('order_items.view', '/order-items/{uuid}')
|
||||
model = self.app.model
|
||||
enum = self.app.enum
|
||||
view = self.make_view()
|
||||
|
||||
user = model.User(username='barney')
|
||||
self.session.add(user)
|
||||
|
||||
order = model.Order(order_id=42, created_by=user)
|
||||
self.session.add(order)
|
||||
item = model.OrderItem(order_qty=1, order_uom=enum.ORDER_UOM_UNIT,
|
||||
status_code=enum.ORDER_ITEM_STATUS_INITIATED)
|
||||
order.items.append(item)
|
||||
self.session.flush()
|
||||
|
||||
with patch.object(view, 'Session', return_value=self.session):
|
||||
with patch.object(self.request, 'matchdict', new={'uuid': item.uuid}):
|
||||
with patch.object(self.request, 'POST', new={'note': 'testing'}):
|
||||
self.assertEqual(len(item.events), 0)
|
||||
result = view.add_note()
|
||||
self.assertEqual(len(item.events), 1)
|
||||
self.assertEqual(item.events[0].type_code, enum.ORDER_ITEM_EVENT_NOTE_ADDED)
|
||||
self.assertEqual(item.events[0].note, 'testing')
|
||||
|
||||
def test_change_status(self):
|
||||
self.pyramid_config.add_route('order_items.view', '/order-items/{uuid}')
|
||||
model = self.app.model
|
||||
enum = self.app.enum
|
||||
view = self.make_view()
|
||||
|
||||
user = model.User(username='barney')
|
||||
self.session.add(user)
|
||||
|
||||
order = model.Order(order_id=42, created_by=user)
|
||||
self.session.add(order)
|
||||
item = model.OrderItem(order_qty=1, order_uom=enum.ORDER_UOM_UNIT,
|
||||
status_code=enum.ORDER_ITEM_STATUS_INITIATED)
|
||||
order.items.append(item)
|
||||
self.session.flush()
|
||||
|
||||
with patch.object(view, 'Session', return_value=self.session):
|
||||
with patch.object(self.request, 'user', new=user):
|
||||
with patch.object(self.request, 'matchdict', new={'uuid': item.uuid}):
|
||||
|
||||
# just status change, no note
|
||||
with patch.object(self.request, 'POST', new={
|
||||
'new_status': enum.ORDER_ITEM_STATUS_PLACED}):
|
||||
self.assertEqual(len(item.events), 0)
|
||||
result = view.change_status()
|
||||
self.assertIsInstance(result, HTTPFound)
|
||||
self.assertFalse(self.request.session.peek_flash('error'))
|
||||
self.assertEqual(len(item.events), 1)
|
||||
self.assertEqual(item.events[0].type_code, enum.ORDER_ITEM_EVENT_STATUS_CHANGE)
|
||||
self.assertEqual(item.events[0].note,
|
||||
"status changed from 'initiated' to 'placed'")
|
||||
|
||||
# status change plus note
|
||||
with patch.object(self.request, 'POST', new={
|
||||
'new_status': enum.ORDER_ITEM_STATUS_RECEIVED,
|
||||
'note': 'check it out'}):
|
||||
self.assertEqual(len(item.events), 1)
|
||||
result = view.change_status()
|
||||
self.assertIsInstance(result, HTTPFound)
|
||||
self.assertFalse(self.request.session.peek_flash('error'))
|
||||
self.assertEqual(len(item.events), 3)
|
||||
self.assertEqual(item.events[0].type_code, enum.ORDER_ITEM_EVENT_STATUS_CHANGE)
|
||||
self.assertEqual(item.events[0].note,
|
||||
"status changed from 'initiated' to 'placed'")
|
||||
self.assertEqual(item.events[1].type_code, enum.ORDER_ITEM_EVENT_STATUS_CHANGE)
|
||||
self.assertEqual(item.events[1].note,
|
||||
"status changed from 'placed' to 'received'")
|
||||
self.assertEqual(item.events[2].type_code, enum.ORDER_ITEM_EVENT_NOTE_ADDED)
|
||||
self.assertEqual(item.events[2].note, "check it out")
|
||||
|
||||
# invalid status
|
||||
with patch.object(self.request, 'POST', new={'new_status': 23432143}):
|
||||
self.assertEqual(len(item.events), 3)
|
||||
result = view.change_status()
|
||||
self.assertIsInstance(result, HTTPFound)
|
||||
self.assertTrue(self.request.session.peek_flash('error'))
|
||||
self.assertEqual(len(item.events), 3)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue