feat: add config option to show/hide Store ID; default value
This commit is contained in:
parent
3ef84ff706
commit
89e3445ace
19 changed files with 445 additions and 64 deletions
|
@ -20,6 +20,16 @@ class TestNewOrderBatchHandler(DataTestCase):
|
|||
def make_handler(self):
|
||||
return mod.NewOrderBatchHandler(self.config)
|
||||
|
||||
def test_get_default_store_id(self):
|
||||
handler = self.make_handler()
|
||||
|
||||
# null by default
|
||||
self.assertIsNone(handler.get_default_store_id())
|
||||
|
||||
# whatever is configured
|
||||
self.config.setdefault('sideshow.orders.default_store_id', '042')
|
||||
self.assertEqual(handler.get_default_store_id(), '042')
|
||||
|
||||
def test_use_local_customers(self):
|
||||
handler = self.make_handler()
|
||||
|
||||
|
@ -108,6 +118,23 @@ class TestNewOrderBatchHandler(DataTestCase):
|
|||
# search for sally finds nothing
|
||||
self.assertEqual(handler.autocomplete_customers_local(self.session, 'sally'), [])
|
||||
|
||||
def test_init_batch(self):
|
||||
model = self.app.model
|
||||
handler = self.make_handler()
|
||||
|
||||
# store_id is null by default
|
||||
batch = handler.model_class()
|
||||
self.assertIsNone(batch.store_id)
|
||||
handler.init_batch(batch)
|
||||
self.assertIsNone(batch.store_id)
|
||||
|
||||
# but default can be configured
|
||||
self.config.setdefault('sideshow.orders.default_store_id', '042')
|
||||
batch = handler.model_class()
|
||||
self.assertIsNone(batch.store_id)
|
||||
handler.init_batch(batch)
|
||||
self.assertEqual(batch.store_id, '042')
|
||||
|
||||
def test_set_customer(self):
|
||||
model = self.app.model
|
||||
handler = self.make_handler()
|
||||
|
|
|
@ -13,3 +13,16 @@ class TestPendingCustomer(DataTestCase):
|
|||
|
||||
store.name = "Acme Goods"
|
||||
self.assertEqual(str(store), "Acme Goods")
|
||||
|
||||
store.store_id = "001"
|
||||
self.assertEqual(str(store), "001 Acme Goods")
|
||||
|
||||
def test_get_display(self):
|
||||
store = mod.Store()
|
||||
self.assertEqual(store.get_display(), "")
|
||||
|
||||
store.name = "Acme Goods"
|
||||
self.assertEqual(store.get_display(), "Acme Goods")
|
||||
|
||||
store.store_id = "001"
|
||||
self.assertEqual(store.get_display(), "001 Acme Goods")
|
||||
|
|
17
tests/test_app.py
Normal file
17
tests/test_app.py
Normal file
|
@ -0,0 +1,17 @@
|
|||
# -*- coding: utf-8; -*-
|
||||
|
||||
from wuttjamaican.testing import ConfigTestCase
|
||||
|
||||
from sideshow import app as mod
|
||||
from sideshow.orders import OrderHandler
|
||||
|
||||
|
||||
class TestSideshowAppProvider(ConfigTestCase):
|
||||
|
||||
def make_provider(self):
|
||||
return mod.SideshowAppProvider(self.config)
|
||||
|
||||
def test_get_order_handler(self):
|
||||
provider = self.make_provider()
|
||||
handler = provider.get_order_handler()
|
||||
self.assertIsInstance(handler, OrderHandler)
|
|
@ -16,6 +16,16 @@ class TestOrderHandler(DataTestCase):
|
|||
def make_handler(self):
|
||||
return mod.OrderHandler(self.config)
|
||||
|
||||
def test_expose_store_id(self):
|
||||
handler = self.make_handler()
|
||||
|
||||
# false by default
|
||||
self.assertFalse(handler.expose_store_id())
|
||||
|
||||
# config can enable
|
||||
self.config.setdefault('sideshow.orders.expose_store_id', 'true')
|
||||
self.assertTrue(handler.expose_store_id())
|
||||
|
||||
def test_get_order_qty_uom_text(self):
|
||||
enum = self.app.enum
|
||||
handler = self.make_handler()
|
||||
|
|
|
@ -30,10 +30,19 @@ class TestNewOrderBatchView(WebTestCase):
|
|||
def test_configure_grid(self):
|
||||
model = self.app.model
|
||||
view = self.make_view()
|
||||
|
||||
# store_id not exposed by default
|
||||
grid = view.make_grid(model_class=model.NewOrderBatch)
|
||||
self.assertNotIn('total_price', grid.renderers)
|
||||
self.assertIn('store_id', grid.columns)
|
||||
view.configure_grid(grid)
|
||||
self.assertIn('total_price', grid.renderers)
|
||||
self.assertNotIn('store_id', grid.columns)
|
||||
|
||||
# store_id is exposed if configured
|
||||
self.config.setdefault('sideshow.orders.expose_store_id', 'true')
|
||||
grid = view.make_grid(model_class=model.NewOrderBatch)
|
||||
self.assertIn('store_id', grid.columns)
|
||||
view.configure_grid(grid)
|
||||
self.assertIn('store_id', grid.columns)
|
||||
|
||||
def test_configure_form(self):
|
||||
model = self.app.model
|
||||
|
@ -58,6 +67,19 @@ class TestNewOrderBatchView(WebTestCase):
|
|||
self.assertIsInstance(schema['pending_customer'].typ, PendingCustomerRef)
|
||||
self.assertIsInstance(schema['total_price'].typ, WuttaMoney)
|
||||
|
||||
# store_id not exposed by default
|
||||
form = view.make_form(model_instance=batch)
|
||||
self.assertIn('store_id', form)
|
||||
view.configure_form(form)
|
||||
self.assertNotIn('store_id', form)
|
||||
|
||||
# store_id is exposed if configured
|
||||
self.config.setdefault('sideshow.orders.expose_store_id', 'true')
|
||||
form = view.make_form(model_instance=batch)
|
||||
self.assertIn('store_id', form)
|
||||
view.configure_form(form)
|
||||
self.assertIn('store_id', form)
|
||||
|
||||
def test_configure_row_grid(self):
|
||||
model = self.app.model
|
||||
view = self.make_view()
|
||||
|
|
|
@ -31,27 +31,28 @@ class TestOrderView(WebTestCase):
|
|||
def make_handler(self):
|
||||
return NewOrderBatchHandler(self.config)
|
||||
|
||||
def test_order_handler(self):
|
||||
view = self.make_view()
|
||||
handler = view.order_handler
|
||||
self.assertIsInstance(handler, OrderHandler)
|
||||
handler2 = view.get_order_handler()
|
||||
self.assertIs(handler2, handler)
|
||||
|
||||
def test_configure_grid(self):
|
||||
model = self.app.model
|
||||
view = self.make_view()
|
||||
grid = view.make_grid(model_class=model.PendingProduct)
|
||||
self.assertNotIn('order_id', grid.linked_columns)
|
||||
self.assertNotIn('total_price', grid.renderers)
|
||||
|
||||
# store_id hidden by default
|
||||
grid = view.make_grid(model_class=model.Order, columns=['store_id', 'order_id'])
|
||||
self.assertIn('store_id', grid.columns)
|
||||
view.configure_grid(grid)
|
||||
self.assertIn('order_id', grid.linked_columns)
|
||||
self.assertIn('total_price', grid.renderers)
|
||||
self.assertNotIn('store_id', grid.columns)
|
||||
|
||||
# store_id is shown if configured
|
||||
self.config.setdefault('sideshow.orders.expose_store_id', 'true')
|
||||
grid = view.make_grid(model_class=model.Order, columns=['store_id', 'order_id'])
|
||||
self.assertIn('store_id', grid.columns)
|
||||
view.configure_grid(grid)
|
||||
self.assertIn('store_id', grid.columns)
|
||||
|
||||
def test_create(self):
|
||||
self.pyramid_config.include('sideshow.web.views')
|
||||
self.config.setdefault('wutta.batch.neworder.handler.spec',
|
||||
'sideshow.batch.neworder:NewOrderBatchHandler')
|
||||
self.config.setdefault('sideshow.orders.expose_store_id', 'true')
|
||||
self.config.setdefault('sideshow.orders.allow_item_discounts', 'true')
|
||||
model = self.app.model
|
||||
enum = self.app.enum
|
||||
|
@ -59,6 +60,10 @@ class TestOrderView(WebTestCase):
|
|||
|
||||
user = model.User(username='barney')
|
||||
self.session.add(user)
|
||||
store = model.Store(store_id='001', name='Acme Goods')
|
||||
self.session.add(store)
|
||||
store = model.Store(store_id='002', name='Acme Services')
|
||||
self.session.add(store)
|
||||
self.session.flush()
|
||||
|
||||
with patch.object(view, 'Session', return_value=self.session):
|
||||
|
@ -101,6 +106,7 @@ class TestOrderView(WebTestCase):
|
|||
self.assertIsInstance(response, Response)
|
||||
self.assertEqual(response.content_type, 'application/json')
|
||||
self.assertEqual(response.json_body, {
|
||||
'store_id': None,
|
||||
'customer_is_known': False,
|
||||
'customer_id': None,
|
||||
'customer_name': 'Fred Flintstone',
|
||||
|
@ -304,6 +310,7 @@ class TestOrderView(WebTestCase):
|
|||
self.session.flush()
|
||||
context = view.get_context_customer(batch)
|
||||
self.assertEqual(context, {
|
||||
'store_id': None,
|
||||
'customer_is_known': True,
|
||||
'customer_id': 42,
|
||||
'customer_name': 'Fred Flintstone',
|
||||
|
@ -321,6 +328,7 @@ class TestOrderView(WebTestCase):
|
|||
self.session.flush()
|
||||
context = view.get_context_customer(batch)
|
||||
self.assertEqual(context, {
|
||||
'store_id': None,
|
||||
'customer_is_known': True,
|
||||
'customer_id': local.uuid.hex,
|
||||
'customer_name': 'Betty Boop',
|
||||
|
@ -339,6 +347,7 @@ class TestOrderView(WebTestCase):
|
|||
self.session.flush()
|
||||
context = view.get_context_customer(batch)
|
||||
self.assertEqual(context, {
|
||||
'store_id': None,
|
||||
'customer_is_known': False,
|
||||
'customer_id': None,
|
||||
'customer_name': 'Fred Flintstone',
|
||||
|
@ -357,6 +366,7 @@ class TestOrderView(WebTestCase):
|
|||
self.session.flush()
|
||||
context = view.get_context_customer(batch)
|
||||
self.assertEqual(context, {
|
||||
'store_id': None,
|
||||
'customer_is_known': True, # nb. this is for UI default
|
||||
'customer_id': None,
|
||||
'customer_name': None,
|
||||
|
@ -408,6 +418,34 @@ class TestOrderView(WebTestCase):
|
|||
self.session.flush()
|
||||
self.assertEqual(self.session.query(model.NewOrderBatch).count(), 0)
|
||||
|
||||
def test_set_store(self):
|
||||
model = self.app.model
|
||||
view = self.make_view()
|
||||
handler = NewOrderBatchHandler(self.config)
|
||||
|
||||
user = model.User(username='barney')
|
||||
self.session.add(user)
|
||||
self.session.flush()
|
||||
|
||||
with patch.object(view, 'batch_handler', create=True, new=handler):
|
||||
with patch.object(view, 'Session', return_value=self.session):
|
||||
with patch.object(self.request, 'user', new=user):
|
||||
|
||||
batch = view.get_current_batch()
|
||||
self.assertIsNone(batch.store_id)
|
||||
|
||||
# store_id is required
|
||||
result = view.set_store(batch, {})
|
||||
self.assertEqual(result, {'error': "Must provide store_id"})
|
||||
result = view.set_store(batch, {'store_id': ''})
|
||||
self.assertEqual(result, {'error': "Must provide store_id"})
|
||||
|
||||
# store_id is set on batch
|
||||
result = view.set_store(batch, {'store_id': '042'})
|
||||
self.assertEqual(batch.store_id, '042')
|
||||
self.assertIn('store_id', result)
|
||||
self.assertEqual(result['store_id'], '042')
|
||||
|
||||
def test_assign_customer(self):
|
||||
self.pyramid_config.add_route('orders.create', '/orders/new')
|
||||
model = self.app.model
|
||||
|
@ -432,6 +470,7 @@ class TestOrderView(WebTestCase):
|
|||
self.assertIsNone(batch.pending_customer)
|
||||
self.assertIs(batch.local_customer, weirdal)
|
||||
self.assertEqual(context, {
|
||||
'store_id': None,
|
||||
'customer_is_known': True,
|
||||
'customer_id': weirdal.uuid.hex,
|
||||
'customer_name': 'Weird Al',
|
||||
|
@ -470,6 +509,7 @@ class TestOrderView(WebTestCase):
|
|||
self.assertIsNone(batch.customer_name)
|
||||
self.assertIsNone(batch.local_customer)
|
||||
self.assertEqual(context, {
|
||||
'store_id': None,
|
||||
'customer_is_known': True,
|
||||
'customer_id': None,
|
||||
'customer_name': None,
|
||||
|
@ -510,6 +550,7 @@ class TestOrderView(WebTestCase):
|
|||
context = view.set_pending_customer(batch, data)
|
||||
self.assertIsInstance(batch.pending_customer, model.PendingCustomer)
|
||||
self.assertEqual(context, {
|
||||
'store_id': None,
|
||||
'customer_is_known': False,
|
||||
'customer_id': None,
|
||||
'customer_name': 'Fred Flintstone',
|
||||
|
@ -1078,7 +1119,11 @@ class TestOrderView(WebTestCase):
|
|||
form = view.make_form(model_instance=order)
|
||||
# nb. this is to avoid include/exclude ambiguity
|
||||
form.remove('items')
|
||||
# nb. store_id gets hidden by default
|
||||
form.append('store_id')
|
||||
self.assertIn('store_id', form)
|
||||
view.configure_form(form)
|
||||
self.assertNotIn('store_id', form)
|
||||
schema = form.get_schema()
|
||||
self.assertIn('pending_customer', form)
|
||||
self.assertIsInstance(schema['total_price'].typ, WuttaMoney)
|
||||
|
@ -1089,13 +1134,20 @@ class TestOrderView(WebTestCase):
|
|||
self.session.add(local)
|
||||
self.session.flush()
|
||||
|
||||
# nb. from now on we include store_id
|
||||
self.config.setdefault('sideshow.orders.expose_store_id', 'true')
|
||||
|
||||
# viewing (local customer)
|
||||
with patch.object(view, 'viewing', new=True):
|
||||
with patch.object(order, 'local_customer', new=local):
|
||||
form = view.make_form(model_instance=order)
|
||||
# nb. this is to avoid include/exclude ambiguity
|
||||
form.remove('items')
|
||||
# nb. store_id will now remain
|
||||
form.append('store_id')
|
||||
self.assertIn('store_id', form)
|
||||
view.configure_form(form)
|
||||
self.assertIn('store_id', form)
|
||||
self.assertNotIn('pending_customer', form)
|
||||
schema = form.get_schema()
|
||||
self.assertIsInstance(schema['total_price'].typ, WuttaMoney)
|
||||
|
@ -1272,13 +1324,6 @@ class TestOrderView(WebTestCase):
|
|||
|
||||
class OrderItemViewTestMixin:
|
||||
|
||||
def test_common_order_handler(self):
|
||||
view = self.make_view()
|
||||
handler = view.order_handler
|
||||
self.assertIsInstance(handler, OrderHandler)
|
||||
handler2 = view.get_order_handler()
|
||||
self.assertIs(handler2, handler)
|
||||
|
||||
def test_common_get_fallback_templates(self):
|
||||
view = self.make_view()
|
||||
|
||||
|
@ -1294,18 +1339,29 @@ class OrderItemViewTestMixin:
|
|||
def test_common_configure_grid(self):
|
||||
model = self.app.model
|
||||
view = self.make_view()
|
||||
grid = view.make_grid(model_class=model.OrderItem)
|
||||
self.assertNotIn('order_id', grid.linked_columns)
|
||||
view.configure_grid(grid)
|
||||
self.assertIn('order_id', grid.linked_columns)
|
||||
|
||||
def test_common_render_order_id(self):
|
||||
# store_id is removed by default
|
||||
grid = view.make_grid(model_class=model.OrderItem)
|
||||
grid.append('store_id')
|
||||
self.assertIn('store_id', grid.columns)
|
||||
view.configure_grid(grid)
|
||||
self.assertNotIn('store_id', grid.columns)
|
||||
|
||||
# store_id is shown if configured
|
||||
self.config.setdefault('sideshow.orders.expose_store_id', 'true')
|
||||
grid = view.make_grid(model_class=model.OrderItem)
|
||||
grid.append('store_id')
|
||||
self.assertIn('store_id', grid.columns)
|
||||
view.configure_grid(grid)
|
||||
self.assertIn('store_id', grid.columns)
|
||||
|
||||
def test_common_render_order_attr(self):
|
||||
model = self.app.model
|
||||
view = self.make_view()
|
||||
order = model.Order(order_id=42)
|
||||
item = model.OrderItem()
|
||||
order.items.append(item)
|
||||
self.assertEqual(view.render_order_id(item, None, None), 42)
|
||||
self.assertEqual(view.render_order_attr(item, 'order_id', None), 42)
|
||||
|
||||
def test_common_render_status_code(self):
|
||||
enum = self.app.enum
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue