mirror of
https://github.com/pretix/pretix.git
synced 2026-05-04 15:04:03 +00:00
Discounts (#2510)
This commit is contained in:
@@ -40,8 +40,8 @@ from django_scopes import scopes_disabled
|
||||
from tests.base import SoupTest, extract_form_fields
|
||||
|
||||
from pretix.base.models import (
|
||||
Event, Item, ItemCategory, ItemVariation, Order, OrderPosition, Organizer,
|
||||
Question, Quota, Team, User,
|
||||
Discount, Event, Item, ItemCategory, ItemVariation, Order, OrderPosition,
|
||||
Organizer, Question, Quota, Team, User,
|
||||
)
|
||||
|
||||
|
||||
@@ -695,3 +695,64 @@ class ItemsTest(ItemFormTest):
|
||||
i = Item.objects.get(name__icontains='New Item')
|
||||
q = Quota.objects.get(name__icontains='New Quota')
|
||||
assert q.items.filter(pk=i.pk).exists()
|
||||
|
||||
|
||||
class DiscountTest(ItemFormTest):
|
||||
|
||||
def test_create(self):
|
||||
doc = self.get_doc('/control/event/%s/%s/discounts/add' % (self.orga1.slug, self.event1.slug))
|
||||
form_data = extract_form_fields(doc.select('.container-fluid form')[0])
|
||||
form_data['internal_name'] = 'Group discount'
|
||||
form_data['condition_min_count'] = '2'
|
||||
form_data['benefit_discount_matching_percent'] = '20'
|
||||
doc = self.post_doc('/control/event/%s/%s/discounts/add' % (self.orga1.slug, self.event1.slug), form_data)
|
||||
assert doc.select(".alert-success")
|
||||
self.assertIn("Group discount", doc.select("#page-wrapper table")[0].text)
|
||||
|
||||
def test_update(self):
|
||||
c = Discount.objects.create(event=self.event1, internal_name="2 for 1")
|
||||
doc = self.get_doc('/control/event/%s/%s/discounts/%s/' % (self.orga1.slug, self.event1.slug, c.id))
|
||||
form_data = extract_form_fields(doc.select('.container-fluid form')[0])
|
||||
form_data['internal_name'] = 'Group discount'
|
||||
form_data['condition_min_count'] = '2'
|
||||
form_data['benefit_discount_matching_percent'] = '20'
|
||||
doc = self.post_doc('/control/event/%s/%s/discounts/%s/' % (self.orga1.slug, self.event1.slug, c.id),
|
||||
form_data)
|
||||
assert doc.select(".alert-success")
|
||||
self.assertIn("Group discount", doc.select("#page-wrapper table")[0].text)
|
||||
self.assertNotIn("2 for 1", doc.select("#page-wrapper table")[0].text)
|
||||
with scopes_disabled():
|
||||
assert str(Discount.objects.get(id=c.id).benefit_discount_matching_percent) == '20.00'
|
||||
|
||||
def test_sort(self):
|
||||
with scopes_disabled():
|
||||
c1 = Discount.objects.create(event=self.event1, internal_name="Group discount", condition_min_value=2,
|
||||
benefit_discount_matching_percent=20)
|
||||
Discount.objects.create(event=self.event1, internal_name="Big group", condition_min_value=5,
|
||||
benefit_discount_matching_percent=40)
|
||||
doc = self.get_doc('/control/event/%s/%s/discounts/' % (self.orga1.slug, self.event1.slug))
|
||||
self.assertIn("Group discount", doc.select("table > tbody > tr")[0].text)
|
||||
self.assertIn("Big group", doc.select("table > tbody > tr")[1].text)
|
||||
|
||||
self.client.post('/control/event/%s/%s/discounts/%s/down' % (self.orga1.slug, self.event1.slug, c1.id))
|
||||
doc = self.get_doc('/control/event/%s/%s/discounts/' % (self.orga1.slug, self.event1.slug))
|
||||
self.assertIn("Group discount", doc.select("table > tbody > tr")[1].text)
|
||||
self.assertIn("Big group", doc.select("table > tbody > tr")[0].text)
|
||||
|
||||
self.client.post('/control/event/%s/%s/discounts/%s/up' % (self.orga1.slug, self.event1.slug, c1.id))
|
||||
doc = self.get_doc('/control/event/%s/%s/discounts/' % (self.orga1.slug, self.event1.slug))
|
||||
self.assertIn("Group discount", doc.select("table > tbody > tr")[0].text)
|
||||
self.assertIn("Big group", doc.select("table > tbody > tr")[1].text)
|
||||
|
||||
def test_delete(self):
|
||||
with scopes_disabled():
|
||||
c = Discount.objects.create(event=self.event1, internal_name="Group discount", condition_min_value=2,
|
||||
benefit_discount_matching_percent=20)
|
||||
doc = self.get_doc('/control/event/%s/%s/discounts/%s/delete' % (self.orga1.slug, self.event1.slug, c.id))
|
||||
form_data = extract_form_fields(doc.select('.container-fluid form')[0])
|
||||
doc = self.post_doc('/control/event/%s/%s/discounts/%s/delete' % (self.orga1.slug, self.event1.slug, c.id),
|
||||
form_data)
|
||||
assert doc.select(".alert-success")
|
||||
self.assertNotIn("Group discount", doc.select("#page-wrapper")[0].text)
|
||||
with scopes_disabled():
|
||||
assert not Discount.objects.filter(id=c.id).exists()
|
||||
|
||||
@@ -938,7 +938,7 @@ def test_order_extend_expired_voucher_budget_ok(client, env):
|
||||
)
|
||||
p = o.positions.first()
|
||||
p.voucher = v
|
||||
p.price_before_voucher = p.price
|
||||
p.voucher_budget_use = Decimal('1.50')
|
||||
p.price -= Decimal('1.50')
|
||||
p.save()
|
||||
|
||||
@@ -969,7 +969,7 @@ def test_order_extend_expired_voucher_budget_fail(client, env):
|
||||
)
|
||||
p = o.positions.first()
|
||||
p.voucher = v
|
||||
p.price_before_voucher = p.price
|
||||
p.voucher_budget_use = Decimal('1.50')
|
||||
p.price -= Decimal('1.50')
|
||||
p.save()
|
||||
|
||||
|
||||
@@ -113,6 +113,12 @@ event_urls = [
|
||||
"categories/2/up",
|
||||
"categories/2/down",
|
||||
"categories/2/delete",
|
||||
"discounts/",
|
||||
"discounts/add",
|
||||
"discounts/2/",
|
||||
"discounts/2/up",
|
||||
"discounts/2/down",
|
||||
"discounts/2/delete",
|
||||
"questions/",
|
||||
"questions/2/delete",
|
||||
"questions/2/",
|
||||
@@ -325,6 +331,16 @@ event_permission_urls = [
|
||||
("can_change_items", "quotas/2/change", 404, HTTP_GET),
|
||||
("can_change_items", "quotas/2/delete", 404, HTTP_GET),
|
||||
("can_change_items", "quotas/add", 200, HTTP_GET),
|
||||
# ("can_change_items", "discounts/", 200),
|
||||
# We don't have to create categories and similar objects
|
||||
# for testing this, it is enough to test that a 404 error
|
||||
# is returned instead of a 403 one.
|
||||
("can_change_items", "discounts/2/", 404, HTTP_GET),
|
||||
("can_change_items", "discounts/2/delete", 404, HTTP_GET),
|
||||
("can_change_items", "discounts/2/up", 404, HTTP_POST),
|
||||
("can_change_items", "discounts/2/down", 404, HTTP_POST),
|
||||
("can_change_items", "discounts/reorder", 400, HTTP_POST),
|
||||
("can_change_items", "discounts/add", 200, HTTP_GET),
|
||||
("can_change_event_settings", "subevents/", 200, HTTP_GET),
|
||||
("can_change_event_settings", "subevents/2/", 404, HTTP_GET),
|
||||
("can_change_event_settings", "subevents/2/delete", 404, HTTP_GET),
|
||||
|
||||
Reference in New Issue
Block a user