feat: add per-department default item discount
This commit is contained in:
parent
7e1d68e2cf
commit
aa31d23fc8
6 changed files with 363 additions and 25 deletions
|
@ -2,6 +2,7 @@
|
|||
|
||||
import datetime
|
||||
import decimal
|
||||
import json
|
||||
from unittest.mock import patch
|
||||
|
||||
from sqlalchemy import orm
|
||||
|
@ -291,6 +292,50 @@ class TestOrderView(WebTestCase):
|
|||
fields = view.get_pending_product_required_fields()
|
||||
self.assertEqual(fields, ['brand_name', 'size', 'unit_price_reg'])
|
||||
|
||||
def test_get_dept_item_discounts(self):
|
||||
model = self.app.model
|
||||
view = self.make_view()
|
||||
|
||||
with patch.object(view, 'Session', return_value=self.session):
|
||||
|
||||
# empty list by default
|
||||
discounts = view.get_dept_item_discounts()
|
||||
self.assertEqual(discounts, [])
|
||||
|
||||
# mock settings
|
||||
self.app.save_setting(self.session, 'sideshow.orders.departments.5.name', 'Bulk')
|
||||
self.app.save_setting(self.session, 'sideshow.orders.departments.5.default_item_discount', '15')
|
||||
self.app.save_setting(self.session, 'sideshow.orders.departments.6.name', 'Produce')
|
||||
self.app.save_setting(self.session, 'sideshow.orders.departments.6.default_item_discount', '5')
|
||||
discounts = view.get_dept_item_discounts()
|
||||
self.assertEqual(len(discounts), 2)
|
||||
self.assertEqual(discounts[0], {
|
||||
'department_id': '5',
|
||||
'department_name': 'Bulk',
|
||||
'default_item_discount': '15',
|
||||
})
|
||||
self.assertEqual(discounts[1], {
|
||||
'department_id': '6',
|
||||
'department_name': 'Produce',
|
||||
'default_item_discount': '5',
|
||||
})
|
||||
|
||||
# invalid setting
|
||||
self.app.save_setting(self.session, 'sideshow.orders.departments.I.N.V.A.L.I.D.name', 'Bad News')
|
||||
self.app.save_setting(self.session, 'sideshow.orders.departments.I.N.V.A.L.I.D.default_item_discount', '42')
|
||||
discounts = view.get_dept_item_discounts()
|
||||
self.assertEqual(len(discounts), 2)
|
||||
self.assertEqual(discounts[0], {
|
||||
'department_id': '5',
|
||||
'department_name': 'Bulk',
|
||||
'default_item_discount': '15',
|
||||
})
|
||||
self.assertEqual(discounts[1], {
|
||||
'department_id': '6',
|
||||
'department_name': 'Produce',
|
||||
'default_item_discount': '5',
|
||||
})
|
||||
|
||||
def test_get_context_customer(self):
|
||||
self.pyramid_config.add_route('orders', '/orders/')
|
||||
model = self.app.model
|
||||
|
@ -1288,6 +1333,12 @@ class TestOrderView(WebTestCase):
|
|||
model = self.app.model
|
||||
view = self.make_view()
|
||||
|
||||
self.app.save_setting(self.session, 'sideshow.orders.departments.5.name', 'Bulk')
|
||||
self.app.save_setting(self.session, 'sideshow.orders.departments.5.default_item_discount', '15')
|
||||
self.app.save_setting(self.session, 'sideshow.orders.departments.6.name', 'Produce')
|
||||
self.app.save_setting(self.session, 'sideshow.orders.departments.6.default_item_discount', '5')
|
||||
self.session.commit()
|
||||
|
||||
with patch.object(view, 'Session', return_value=self.session):
|
||||
with patch.multiple(self.config, usedb=True, preferdb=True):
|
||||
|
||||
|
@ -1295,7 +1346,19 @@ class TestOrderView(WebTestCase):
|
|||
allowed = self.config.get_bool('sideshow.orders.allow_unknown_products',
|
||||
session=self.session)
|
||||
self.assertIsNone(allowed)
|
||||
self.assertEqual(self.session.query(model.Setting).count(), 0)
|
||||
self.assertEqual(self.session.query(model.Setting).count(), 4)
|
||||
discounts = view.get_dept_item_discounts()
|
||||
self.assertEqual(len(discounts), 2)
|
||||
self.assertEqual(discounts[0], {
|
||||
'department_id': '5',
|
||||
'department_name': 'Bulk',
|
||||
'default_item_discount': '15',
|
||||
})
|
||||
self.assertEqual(discounts[1], {
|
||||
'department_id': '6',
|
||||
'department_name': 'Produce',
|
||||
'default_item_discount': '5',
|
||||
})
|
||||
|
||||
# fetch initial page
|
||||
response = view.configure()
|
||||
|
@ -1305,13 +1368,18 @@ class TestOrderView(WebTestCase):
|
|||
allowed = self.config.get_bool('sideshow.orders.allow_unknown_products',
|
||||
session=self.session)
|
||||
self.assertIsNone(allowed)
|
||||
self.assertEqual(self.session.query(model.Setting).count(), 0)
|
||||
self.assertEqual(self.session.query(model.Setting).count(), 4)
|
||||
|
||||
# post new settings
|
||||
with patch.multiple(self.request, create=True,
|
||||
method='POST',
|
||||
POST={
|
||||
'sideshow.orders.allow_unknown_products': 'true',
|
||||
'dept_item_discounts': json.dumps([{
|
||||
'department_id': '5',
|
||||
'department_name': 'Grocery',
|
||||
'default_item_discount': 10,
|
||||
}])
|
||||
}):
|
||||
response = view.configure()
|
||||
self.assertIsInstance(response, HTTPFound)
|
||||
|
@ -1320,6 +1388,13 @@ class TestOrderView(WebTestCase):
|
|||
session=self.session)
|
||||
self.assertTrue(allowed)
|
||||
self.assertTrue(self.session.query(model.Setting).count() > 1)
|
||||
discounts = view.get_dept_item_discounts()
|
||||
self.assertEqual(len(discounts), 1)
|
||||
self.assertEqual(discounts[0], {
|
||||
'department_id': '5',
|
||||
'department_name': 'Grocery',
|
||||
'default_item_discount': '10',
|
||||
})
|
||||
|
||||
|
||||
class OrderItemViewTestMixin:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue