This commit is contained in:
Raphael Michel
2022-04-27 14:43:16 +02:00
committed by GitHub
parent 7730cc6170
commit 6fee0ac0a9
56 changed files with 4159 additions and 480 deletions

View File

@@ -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()

View File

@@ -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()

View File

@@ -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),