mirror of
https://github.com/pretix/pretix.git
synced 2026-05-04 15:04:03 +00:00
Integrate django-scopes (#1319)
* Install django-scopes * Fix tests.api * Update tasks and cronjobs * Fix remaining tests * Remove unused import * Fix tests after rebase * Disable scopes for get_Events_with_any_permission * Disable scopes for a management command
This commit is contained in:
@@ -2,6 +2,7 @@ import datetime
|
||||
from decimal import Decimal
|
||||
|
||||
from django.utils.timezone import now
|
||||
from django_scopes import scopes_disabled
|
||||
from tests.base import SoupTest, extract_form_fields
|
||||
|
||||
from pretix.base.models import (
|
||||
@@ -11,6 +12,7 @@ from pretix.base.models import (
|
||||
|
||||
|
||||
class ItemFormTest(SoupTest):
|
||||
@scopes_disabled()
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
self.user = User.objects.create_user('dummy@dummy.dummy', 'dummy')
|
||||
@@ -47,11 +49,13 @@ class CategoriesTest(ItemFormTest):
|
||||
assert doc.select(".alert-success")
|
||||
self.assertIn("T-Shirts", doc.select("#page-wrapper table")[0].text)
|
||||
self.assertNotIn("Entry tickets", doc.select("#page-wrapper table")[0].text)
|
||||
assert str(ItemCategory.objects.get(id=c.id).name) == 'T-Shirts'
|
||||
with scopes_disabled():
|
||||
assert str(ItemCategory.objects.get(id=c.id).name) == 'T-Shirts'
|
||||
|
||||
def test_sort(self):
|
||||
c1 = ItemCategory.objects.create(event=self.event1, name="Entry tickets", position=0)
|
||||
ItemCategory.objects.create(event=self.event1, name="T-Shirts", position=1)
|
||||
with scopes_disabled():
|
||||
c1 = ItemCategory.objects.create(event=self.event1, name="Entry tickets", position=0)
|
||||
ItemCategory.objects.create(event=self.event1, name="T-Shirts", position=1)
|
||||
doc = self.get_doc('/control/event/%s/%s/categories/' % (self.orga1.slug, self.event1.slug))
|
||||
self.assertIn("Entry tickets", doc.select("table > tbody > tr")[0].text)
|
||||
self.assertIn("T-Shirts", doc.select("table > tbody > tr")[1].text)
|
||||
@@ -67,14 +71,16 @@ class CategoriesTest(ItemFormTest):
|
||||
self.assertIn("T-Shirts", doc.select("table > tbody > tr")[1].text)
|
||||
|
||||
def test_delete(self):
|
||||
c = ItemCategory.objects.create(event=self.event1, name="Entry tickets")
|
||||
with scopes_disabled():
|
||||
c = ItemCategory.objects.create(event=self.event1, name="Entry tickets")
|
||||
doc = self.get_doc('/control/event/%s/%s/categories/%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/categories/%s/delete' % (self.orga1.slug, self.event1.slug, c.id),
|
||||
form_data)
|
||||
assert doc.select(".alert-success")
|
||||
self.assertNotIn("Entry tickets", doc.select("#page-wrapper")[0].text)
|
||||
assert not ItemCategory.objects.filter(id=c.id).exists()
|
||||
with scopes_disabled():
|
||||
assert not ItemCategory.objects.filter(id=c.id).exists()
|
||||
|
||||
|
||||
class QuestionsTest(ItemFormTest):
|
||||
@@ -90,8 +96,9 @@ class QuestionsTest(ItemFormTest):
|
||||
self.assertIn("shoe size", doc.select("#page-wrapper table")[0].text)
|
||||
|
||||
def test_update_choices(self):
|
||||
c = Question.objects.create(event=self.event1, question="What country are you from?", type="C", required=True)
|
||||
o1 = c.options.create(answer='Germany')
|
||||
with scopes_disabled():
|
||||
c = Question.objects.create(event=self.event1, question="What country are you from?", type="C", required=True)
|
||||
o1 = c.options.create(answer='Germany')
|
||||
doc = self.get_doc('/control/event/%s/%s/questions/%s/change' % (self.orga1.slug, self.event1.slug, c.id))
|
||||
form_data = extract_form_fields(doc.select('.container-fluid form')[0])
|
||||
form_data['form-TOTAL_FORMS'] = '1'
|
||||
@@ -104,12 +111,14 @@ class QuestionsTest(ItemFormTest):
|
||||
self.post_doc('/control/event/%s/%s/questions/%s/change' % (self.orga1.slug, self.event1.slug, c.id),
|
||||
form_data)
|
||||
c.refresh_from_db()
|
||||
assert c.options.exists()
|
||||
assert str(c.options.first().answer) == 'England'
|
||||
with scopes_disabled():
|
||||
assert c.options.exists()
|
||||
assert str(c.options.first().answer) == 'England'
|
||||
|
||||
def test_delete_choices(self):
|
||||
c = Question.objects.create(event=self.event1, question="What country are you from?", type="C", required=True)
|
||||
o1 = c.options.create(answer='Germany')
|
||||
with scopes_disabled():
|
||||
c = Question.objects.create(event=self.event1, question="What country are you from?", type="C", required=True)
|
||||
o1 = c.options.create(answer='Germany')
|
||||
doc = self.get_doc('/control/event/%s/%s/questions/%s/change' % (self.orga1.slug, self.event1.slug, c.id))
|
||||
form_data = extract_form_fields(doc.select('.container-fluid form')[0])
|
||||
form_data['form-TOTAL_FORMS'] = '1'
|
||||
@@ -123,10 +132,12 @@ class QuestionsTest(ItemFormTest):
|
||||
self.post_doc('/control/event/%s/%s/questions/%s/change' % (self.orga1.slug, self.event1.slug, c.id),
|
||||
form_data)
|
||||
c.refresh_from_db()
|
||||
assert not c.options.exists()
|
||||
with scopes_disabled():
|
||||
assert not c.options.exists()
|
||||
|
||||
def test_add_choices(self):
|
||||
c = Question.objects.create(event=self.event1, question="What country are you from?", type="N", required=True)
|
||||
with scopes_disabled():
|
||||
c = Question.objects.create(event=self.event1, question="What country are you from?", type="N", required=True)
|
||||
doc = self.get_doc('/control/event/%s/%s/questions/%s/change' % (self.orga1.slug, self.event1.slug, c.id))
|
||||
form_data = extract_form_fields(doc.select('.container-fluid form')[0])
|
||||
form_data['type'] = 'C'
|
||||
@@ -139,12 +150,14 @@ class QuestionsTest(ItemFormTest):
|
||||
form_data['form-0-answer_0'] = 'Germany'
|
||||
self.post_doc('/control/event/%s/%s/questions/%s/change' % (self.orga1.slug, self.event1.slug, c.id),
|
||||
form_data)
|
||||
c = Question.objects.get(id=c.id)
|
||||
assert c.options.exists()
|
||||
assert str(c.options.first().answer) == 'Germany'
|
||||
with scopes_disabled():
|
||||
c = Question.objects.get(id=c.id)
|
||||
assert c.options.exists()
|
||||
assert str(c.options.first().answer) == 'Germany'
|
||||
|
||||
def test_update(self):
|
||||
c = Question.objects.create(event=self.event1, question="What is your shoe size?", type="N", required=True)
|
||||
with scopes_disabled():
|
||||
c = Question.objects.create(event=self.event1, question="What is your shoe size?", type="N", required=True)
|
||||
doc = self.get_doc('/control/event/%s/%s/questions/%s/change' % (self.orga1.slug, self.event1.slug, c.id))
|
||||
form_data = extract_form_fields(doc.select('.container-fluid form')[0])
|
||||
form_data['items'] = self.item1.id
|
||||
@@ -153,13 +166,15 @@ class QuestionsTest(ItemFormTest):
|
||||
form_data)
|
||||
self.assertIn("How old", doc.select("#page-wrapper table")[0].text)
|
||||
self.assertNotIn("shoe size", doc.select("#page-wrapper table")[0].text)
|
||||
c = Question.objects.get(id=c.id)
|
||||
self.assertTrue(c.required)
|
||||
assert str(Question.objects.get(id=c.id).question) == 'How old are you?'
|
||||
with scopes_disabled():
|
||||
c = Question.objects.get(id=c.id)
|
||||
self.assertTrue(c.required)
|
||||
assert str(Question.objects.get(id=c.id).question) == 'How old are you?'
|
||||
|
||||
def test_sort(self):
|
||||
q1 = Question.objects.create(event=self.event1, question="Vegetarian?", type="N", required=True, position=0)
|
||||
Question.objects.create(event=self.event1, question="Food allergies?", position=1)
|
||||
with scopes_disabled():
|
||||
q1 = Question.objects.create(event=self.event1, question="Vegetarian?", type="N", required=True, position=0)
|
||||
Question.objects.create(event=self.event1, question="Food allergies?", position=1)
|
||||
doc = self.get_doc('/control/event/%s/%s/questions/' % (self.orga1.slug, self.event1.slug))
|
||||
self.assertIn("Vegetarian?", doc.select("table > tbody > tr")[0].text)
|
||||
self.assertIn("Food allergies?", doc.select("table > tbody > tr")[1].text)
|
||||
@@ -175,32 +190,35 @@ class QuestionsTest(ItemFormTest):
|
||||
self.assertIn("Food allergies?", doc.select("table > tbody > tr")[1].text)
|
||||
|
||||
def test_delete(self):
|
||||
c = Question.objects.create(event=self.event1, question="What is your shoe size?", type="N", required=True)
|
||||
with scopes_disabled():
|
||||
c = Question.objects.create(event=self.event1, question="What is your shoe size?", type="N", required=True)
|
||||
doc = self.get_doc('/control/event/%s/%s/questions/%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/questions/%s/delete' % (self.orga1.slug, self.event1.slug, c.id),
|
||||
form_data)
|
||||
assert doc.select(".alert-success")
|
||||
self.assertNotIn("shoe size", doc.select("#page-wrapper")[0].text)
|
||||
assert not Question.objects.filter(id=c.id).exists()
|
||||
with scopes_disabled():
|
||||
assert not Question.objects.filter(id=c.id).exists()
|
||||
|
||||
def test_question_view(self):
|
||||
c = Question.objects.create(event=self.event1, question="What is your shoe size?", type="N", required=True)
|
||||
with scopes_disabled():
|
||||
c = Question.objects.create(event=self.event1, question="What is your shoe size?", type="N", required=True)
|
||||
|
||||
item1 = Item.objects.create(event=self.event1, name="Standard", default_price=0, position=1)
|
||||
o = Order.objects.create(code='FOO', event=self.event1, email='dummy@dummy.test',
|
||||
status=Order.STATUS_PENDING, datetime=now(),
|
||||
expires=now() + datetime.timedelta(days=10),
|
||||
total=14, locale='en')
|
||||
op = OrderPosition.objects.create(order=o, item=item1, variation=None, price=Decimal("14"),
|
||||
attendee_name_parts={'full_name': "Peter"})
|
||||
op.answers.create(question=c, answer='42')
|
||||
op = OrderPosition.objects.create(order=o, item=item1, variation=None, price=Decimal("14"),
|
||||
attendee_name_parts={'full_name': "Michael"})
|
||||
op.answers.create(question=c, answer='42')
|
||||
op = OrderPosition.objects.create(order=o, item=item1, variation=None, price=Decimal("14"),
|
||||
attendee_name_parts={'full_name': "Petra"})
|
||||
op.answers.create(question=c, answer='39')
|
||||
item1 = Item.objects.create(event=self.event1, name="Standard", default_price=0, position=1)
|
||||
o = Order.objects.create(code='FOO', event=self.event1, email='dummy@dummy.test',
|
||||
status=Order.STATUS_PENDING, datetime=now(),
|
||||
expires=now() + datetime.timedelta(days=10),
|
||||
total=14, locale='en')
|
||||
op = OrderPosition.objects.create(order=o, item=item1, variation=None, price=Decimal("14"),
|
||||
attendee_name_parts={'full_name': "Peter"})
|
||||
op.answers.create(question=c, answer='42')
|
||||
op = OrderPosition.objects.create(order=o, item=item1, variation=None, price=Decimal("14"),
|
||||
attendee_name_parts={'full_name': "Michael"})
|
||||
op.answers.create(question=c, answer='42')
|
||||
op = OrderPosition.objects.create(order=o, item=item1, variation=None, price=Decimal("14"),
|
||||
attendee_name_parts={'full_name': "Petra"})
|
||||
op.answers.create(question=c, answer='39')
|
||||
|
||||
doc = self.get_doc('/control/event/%s/%s/questions/%s/' % (self.orga1.slug, self.event1.slug, c.id))
|
||||
tbl = doc.select('.container-fluid table.table-bordered tbody')[0]
|
||||
@@ -219,9 +237,10 @@ class QuestionsTest(ItemFormTest):
|
||||
assert tbl.select('tr')[0].select('td')[0].text.strip() == '42'
|
||||
|
||||
def test_set_dependency(self):
|
||||
q1 = Question.objects.create(event=self.event1, question="What country are you from?", type="C", required=True)
|
||||
q2 = Question.objects.create(event=self.event1, question="What city are you from?", type="T", required=True)
|
||||
o1 = q1.options.create(answer='Germany')
|
||||
with scopes_disabled():
|
||||
q1 = Question.objects.create(event=self.event1, question="What country are you from?", type="C", required=True)
|
||||
q2 = Question.objects.create(event=self.event1, question="What city are you from?", type="T", required=True)
|
||||
o1 = q1.options.create(answer='Germany')
|
||||
doc = self.get_doc('/control/event/%s/%s/questions/%s/change' % (self.orga1.slug, self.event1.slug, q2.id))
|
||||
form_data = extract_form_fields(doc.select('.container-fluid form')[0])
|
||||
form_data['items'] = self.item1.id
|
||||
@@ -235,10 +254,11 @@ class QuestionsTest(ItemFormTest):
|
||||
assert q2.dependency_value == o1.identifier
|
||||
|
||||
def test_set_dependency_circular(self):
|
||||
q1 = Question.objects.create(event=self.event1, question="What country are you from?", type="C", required=True)
|
||||
o1 = q1.options.create(answer='Germany')
|
||||
q2 = Question.objects.create(event=self.event1, question="What city are you from?", type="C", required=True,
|
||||
dependency_question=q1, dependency_value=o1.identifier)
|
||||
with scopes_disabled():
|
||||
q1 = Question.objects.create(event=self.event1, question="What country are you from?", type="C", required=True)
|
||||
o1 = q1.options.create(answer='Germany')
|
||||
q2 = Question.objects.create(event=self.event1, question="What city are you from?", type="C", required=True,
|
||||
dependency_question=q1, dependency_value=o1.identifier)
|
||||
doc = self.get_doc('/control/event/%s/%s/questions/%s/change' % (self.orga1.slug, self.event1.slug, q1.id))
|
||||
form_data = extract_form_fields(doc.select('.container-fluid form')[0])
|
||||
form_data['dependency_question'] = q2.pk
|
||||
@@ -248,8 +268,9 @@ class QuestionsTest(ItemFormTest):
|
||||
assert not doc.select(".alert-success")
|
||||
|
||||
def test_set_dependency_to_non_choice(self):
|
||||
q1 = Question.objects.create(event=self.event1, question="What country are you from?", type="N", required=True)
|
||||
q2 = Question.objects.create(event=self.event1, question="What city are you from?", type="T", required=True)
|
||||
with scopes_disabled():
|
||||
q1 = Question.objects.create(event=self.event1, question="What country are you from?", type="N", required=True)
|
||||
q2 = Question.objects.create(event=self.event1, question="What city are you from?", type="T", required=True)
|
||||
doc = self.get_doc('/control/event/%s/%s/questions/%s/change' % (self.orga1.slug, self.event1.slug, q2.id))
|
||||
form_data = extract_form_fields(doc.select('.container-fluid form')[0])
|
||||
form_data['dependency_question'] = q1.pk
|
||||
@@ -271,11 +292,12 @@ class QuotaTest(ItemFormTest):
|
||||
self.assertIn("Full house", doc.select("#page-wrapper table")[0].text)
|
||||
|
||||
def test_update(self):
|
||||
c = Quota.objects.create(event=self.event1, name="Full house", size=500)
|
||||
item1 = Item.objects.create(event=self.event1, name="Standard", default_price=0)
|
||||
item2 = Item.objects.create(event=self.event1, name="Business", default_price=0)
|
||||
ItemVariation.objects.create(item=item2, value="Silver")
|
||||
ItemVariation.objects.create(item=item2, value="Gold")
|
||||
with scopes_disabled():
|
||||
c = Quota.objects.create(event=self.event1, name="Full house", size=500)
|
||||
item1 = Item.objects.create(event=self.event1, name="Standard", default_price=0)
|
||||
item2 = Item.objects.create(event=self.event1, name="Business", default_price=0)
|
||||
ItemVariation.objects.create(item=item2, value="Silver")
|
||||
ItemVariation.objects.create(item=item2, value="Gold")
|
||||
doc = self.get_doc('/control/event/%s/%s/quotas/%s/change' % (self.orga1.slug, self.event1.slug, c.id))
|
||||
[i for i in doc.select('[name=itemvars]') if i.get('value') == str(item1.id)][0]['checked'] = 'checked'
|
||||
form_data = extract_form_fields(doc.select('.container-fluid form')[0])
|
||||
@@ -285,35 +307,41 @@ class QuotaTest(ItemFormTest):
|
||||
doc = self.get_doc('/control/event/%s/%s/quotas/' % (self.orga1.slug, self.event1.slug))
|
||||
self.assertIn("350", doc.select("#page-wrapper table")[0].text)
|
||||
self.assertNotIn("500", doc.select("#page-wrapper table")[0].text)
|
||||
assert Quota.objects.get(id=c.id).size == 350
|
||||
assert item1 in Quota.objects.get(id=c.id).items.all()
|
||||
with scopes_disabled():
|
||||
assert Quota.objects.get(id=c.id).size == 350
|
||||
assert item1 in Quota.objects.get(id=c.id).items.all()
|
||||
|
||||
def test_update_subevent(self):
|
||||
self.event1.has_subevents = True
|
||||
self.event1.save()
|
||||
se1 = self.event1.subevents.create(name="Foo", date_from=now())
|
||||
se2 = self.event1.subevents.create(name="Bar", date_from=now())
|
||||
c = Quota.objects.create(event=self.event1, name="Full house", size=500, subevent=se1)
|
||||
with scopes_disabled():
|
||||
se1 = self.event1.subevents.create(name="Foo", date_from=now())
|
||||
se2 = self.event1.subevents.create(name="Bar", date_from=now())
|
||||
c = Quota.objects.create(event=self.event1, name="Full house", size=500, subevent=se1)
|
||||
doc = self.get_doc('/control/event/%s/%s/quotas/%s/change' % (self.orga1.slug, self.event1.slug, c.id))
|
||||
form_data = extract_form_fields(doc.select('.container-fluid form')[0])
|
||||
form_data['subevent'] = se2.pk
|
||||
self.post_doc('/control/event/%s/%s/quotas/%s/change' % (self.orga1.slug, self.event1.slug, c.id),
|
||||
form_data)
|
||||
assert Quota.objects.get(id=c.id).subevent == se2
|
||||
with scopes_disabled():
|
||||
assert Quota.objects.get(id=c.id).subevent == se2
|
||||
|
||||
def test_delete(self):
|
||||
c = Quota.objects.create(event=self.event1, name="Full house", size=500)
|
||||
with scopes_disabled():
|
||||
c = Quota.objects.create(event=self.event1, name="Full house", size=500)
|
||||
doc = self.get_doc('/control/event/%s/%s/quotas/%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/quotas/%s/delete' % (self.orga1.slug, self.event1.slug, c.id),
|
||||
form_data)
|
||||
assert doc.select(".alert-success")
|
||||
self.assertNotIn("Full house", doc.select("#page-wrapper")[0].text)
|
||||
assert not Quota.objects.filter(id=c.id).exists()
|
||||
with scopes_disabled():
|
||||
assert not Quota.objects.filter(id=c.id).exists()
|
||||
|
||||
|
||||
class ItemsTest(ItemFormTest):
|
||||
|
||||
@scopes_disabled()
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
self.item2 = Item.objects.create(event=self.event1, name="Business", default_price=0, position=2,
|
||||
@@ -341,7 +369,7 @@ class ItemsTest(ItemFormTest):
|
||||
'tax_rate': '19.00'
|
||||
})
|
||||
resp = self.client.get('/control/event/%s/%s/items/' % (self.orga1.slug, self.event1.slug))
|
||||
assert 'T-Shirt' in resp.rendered_content
|
||||
assert 'T-Shirt' in resp.content.decode()
|
||||
|
||||
def test_update(self):
|
||||
self.client.post('/control/event/%s/%s/items/%d/' % (self.orga1.slug, self.event1.slug, self.item1.id), {
|
||||
@@ -366,20 +394,23 @@ class ItemsTest(ItemFormTest):
|
||||
'form-0-min_count': '1',
|
||||
'form-0-max_count': '2',
|
||||
})
|
||||
assert self.item2.addons.exists()
|
||||
assert self.item2.addons.first().addon_category == self.addoncat
|
||||
with scopes_disabled():
|
||||
assert self.item2.addons.exists()
|
||||
assert self.item2.addons.first().addon_category == self.addoncat
|
||||
a = self.item2.addons.first()
|
||||
self.client.post('/control/event/%s/%s/items/%d/addons' % (self.orga1.slug, self.event1.slug, self.item2.id), {
|
||||
'form-TOTAL_FORMS': '1',
|
||||
'form-INITIAL_FORMS': '1',
|
||||
'form-MIN_NUM_FORMS': '0',
|
||||
'form-MAX_NUM_FORMS': '1000',
|
||||
'form-0-id': str(self.item2.addons.first().pk),
|
||||
'form-0-id': str(a.pk),
|
||||
'form-0-addon_category': str(self.addoncat.pk),
|
||||
'form-0-min_count': '1',
|
||||
'form-0-max_count': '2',
|
||||
'form-0-DELETE': 'on',
|
||||
})
|
||||
assert not self.item2.addons.exists()
|
||||
with scopes_disabled():
|
||||
assert not self.item2.addons.exists()
|
||||
|
||||
# Do not allow duplicates
|
||||
self.client.post('/control/event/%s/%s/items/%d/addons' % (self.orga1.slug, self.event1.slug, self.item2.id), {
|
||||
@@ -396,7 +427,8 @@ class ItemsTest(ItemFormTest):
|
||||
'form-1-min_count': '1',
|
||||
'form-1-max_count': '2',
|
||||
})
|
||||
assert not self.item2.addons.exists()
|
||||
with scopes_disabled():
|
||||
assert not self.item2.addons.exists()
|
||||
|
||||
def test_manipulate_bundles(self):
|
||||
self.client.post('/control/event/%s/%s/items/%d/bundles' % (self.orga1.slug, self.event1.slug, self.item2.id), {
|
||||
@@ -409,8 +441,9 @@ class ItemsTest(ItemFormTest):
|
||||
'form-0-count': '2',
|
||||
'form-0-designated_price': '2.00',
|
||||
})
|
||||
assert self.item2.bundles.exists()
|
||||
assert self.item2.bundles.first().bundled_item == self.item1
|
||||
with scopes_disabled():
|
||||
assert self.item2.bundles.exists()
|
||||
assert self.item2.bundles.first().bundled_item == self.item1
|
||||
self.client.post('/control/event/%s/%s/items/%d/bundles' % (self.orga1.slug, self.event1.slug, self.item2.id), {
|
||||
'form-TOTAL_FORMS': '1',
|
||||
'form-INITIAL_FORMS': '1',
|
||||
@@ -422,7 +455,8 @@ class ItemsTest(ItemFormTest):
|
||||
'form-0-designated_price': '2.00',
|
||||
'form-0-DELETE': 'on',
|
||||
})
|
||||
assert not self.item2.bundles.exists()
|
||||
with scopes_disabled():
|
||||
assert not self.item2.bundles.exists()
|
||||
|
||||
# Do not allow self-reference
|
||||
self.client.post('/control/event/%s/%s/items/%d/addons' % (self.orga1.slug, self.event1.slug, self.item2.id), {
|
||||
@@ -435,10 +469,12 @@ class ItemsTest(ItemFormTest):
|
||||
'form-0-count': '2',
|
||||
'form-0-designated_price': '2.00',
|
||||
})
|
||||
assert not self.item2.bundles.exists()
|
||||
with scopes_disabled():
|
||||
assert not self.item2.bundles.exists()
|
||||
|
||||
# Do not allow multi-level bundles
|
||||
self.item1.bundles.create(bundled_item=self.item1, count=1, designated_price=0)
|
||||
with scopes_disabled():
|
||||
self.item1.bundles.create(bundled_item=self.item1, count=1, designated_price=0)
|
||||
self.client.post('/control/event/%s/%s/items/%d/bundles' % (self.orga1.slug, self.event1.slug, self.item2.id), {
|
||||
'form-TOTAL_FORMS': '1',
|
||||
'form-INITIAL_FORMS': '0',
|
||||
@@ -449,7 +485,8 @@ class ItemsTest(ItemFormTest):
|
||||
'form-0-count': '2',
|
||||
'form-0-designated_price': '2.00',
|
||||
})
|
||||
assert not self.item2.bundles.exists()
|
||||
with scopes_disabled():
|
||||
assert not self.item2.bundles.exists()
|
||||
|
||||
def test_update_variations(self):
|
||||
self.client.post('/control/event/%s/%s/items/%d/variations' % (self.orga1.slug, self.event1.slug, self.item2.id), {
|
||||
@@ -491,39 +528,45 @@ class ItemsTest(ItemFormTest):
|
||||
'active': 'yes',
|
||||
'allow_cancel': 'yes'
|
||||
})
|
||||
assert not self.item2.variations.filter(pk=self.var2.pk).exists()
|
||||
with scopes_disabled():
|
||||
assert not self.item2.variations.filter(pk=self.var2.pk).exists()
|
||||
|
||||
def test_delete(self):
|
||||
self.client.post('/control/event/%s/%s/items/%d/delete' % (self.orga1.slug, self.event1.slug, self.item1.id),
|
||||
{})
|
||||
assert not self.event1.items.filter(pk=self.item1.pk).exists()
|
||||
with scopes_disabled():
|
||||
assert not self.event1.items.filter(pk=self.item1.pk).exists()
|
||||
self.client.post('/control/event/%s/%s/items/%d/delete' % (self.orga1.slug, self.event1.slug, self.item2.id),
|
||||
{})
|
||||
assert not self.event1.items.filter(pk=self.item2.pk).exists()
|
||||
with scopes_disabled():
|
||||
assert not self.event1.items.filter(pk=self.item2.pk).exists()
|
||||
|
||||
def test_delete_ordered(self):
|
||||
o = Order.objects.create(
|
||||
code='FOO', event=self.event1, email='dummy@dummy.test',
|
||||
status=Order.STATUS_PENDING,
|
||||
datetime=now(), expires=now() + datetime.timedelta(days=10),
|
||||
total=14, locale='en'
|
||||
)
|
||||
OrderPosition.objects.create(
|
||||
order=o,
|
||||
item=self.item1,
|
||||
variation=None,
|
||||
price=Decimal("14"),
|
||||
attendee_name_parts={'full_name': "Peter"}
|
||||
)
|
||||
with scopes_disabled():
|
||||
o = Order.objects.create(
|
||||
code='FOO', event=self.event1, email='dummy@dummy.test',
|
||||
status=Order.STATUS_PENDING,
|
||||
datetime=now(), expires=now() + datetime.timedelta(days=10),
|
||||
total=14, locale='en'
|
||||
)
|
||||
OrderPosition.objects.create(
|
||||
order=o,
|
||||
item=self.item1,
|
||||
variation=None,
|
||||
price=Decimal("14"),
|
||||
attendee_name_parts={'full_name': "Peter"}
|
||||
)
|
||||
self.client.post('/control/event/%s/%s/items/%d/delete' % (self.orga1.slug, self.event1.slug, self.item1.id),
|
||||
{})
|
||||
assert self.event1.items.filter(pk=self.item1.pk).exists()
|
||||
with scopes_disabled():
|
||||
assert self.event1.items.filter(pk=self.item1.pk).exists()
|
||||
self.item1.refresh_from_db()
|
||||
assert not self.item1.active
|
||||
|
||||
def test_create_copy(self):
|
||||
q = Question.objects.create(event=self.event1, question="Size", type="N")
|
||||
q.items.add(self.item2)
|
||||
with scopes_disabled():
|
||||
q = Question.objects.create(event=self.event1, question="Size", type="N")
|
||||
q.items.add(self.item2)
|
||||
self.item2.sales_channels = ["web", "bar"]
|
||||
|
||||
self.client.post('/control/event/%s/%s/items/add' % (self.orga1.slug, self.event1.slug), {
|
||||
@@ -533,22 +576,24 @@ class ItemsTest(ItemFormTest):
|
||||
'copy_from': str(self.item2.pk),
|
||||
'has_variations': '1'
|
||||
})
|
||||
i_old = Item.objects.get(name__icontains='Business')
|
||||
i_new = Item.objects.get(name__icontains='Intermediate')
|
||||
assert i_new.category == i_old.category
|
||||
assert i_new.description == i_old.description
|
||||
assert i_new.active == i_old.active
|
||||
assert i_new.available_from == i_old.available_from
|
||||
assert i_new.available_until == i_old.available_until
|
||||
assert i_new.require_voucher == i_old.require_voucher
|
||||
assert i_new.hide_without_voucher == i_old.hide_without_voucher
|
||||
assert i_new.allow_cancel == i_old.allow_cancel
|
||||
assert i_new.sales_channels == i_old.sales_channels
|
||||
assert set(i_new.questions.all()) == set(i_old.questions.all())
|
||||
assert set([str(v.value) for v in i_new.variations.all()]) == set([str(v.value) for v in i_old.variations.all()])
|
||||
with scopes_disabled():
|
||||
i_old = Item.objects.get(name__icontains='Business')
|
||||
i_new = Item.objects.get(name__icontains='Intermediate')
|
||||
assert i_new.category == i_old.category
|
||||
assert i_new.description == i_old.description
|
||||
assert i_new.active == i_old.active
|
||||
assert i_new.available_from == i_old.available_from
|
||||
assert i_new.available_until == i_old.available_until
|
||||
assert i_new.require_voucher == i_old.require_voucher
|
||||
assert i_new.hide_without_voucher == i_old.hide_without_voucher
|
||||
assert i_new.allow_cancel == i_old.allow_cancel
|
||||
assert i_new.sales_channels == i_old.sales_channels
|
||||
assert set(i_new.questions.all()) == set(i_old.questions.all())
|
||||
assert set([str(v.value) for v in i_new.variations.all()]) == set([str(v.value) for v in i_old.variations.all()])
|
||||
|
||||
def test_add_to_existing_quota(self):
|
||||
q = Quota.objects.create(event=self.event1, name="New Test Quota", size=50)
|
||||
with scopes_disabled():
|
||||
q = Quota.objects.create(event=self.event1, name="New Test Quota", size=50)
|
||||
|
||||
doc = self.get_doc('/control/event/%s/%s/items/add' % (self.orga1.slug, self.event1.slug))
|
||||
form_data = extract_form_fields(doc.select('.container-fluid form')[0])
|
||||
@@ -558,10 +603,11 @@ class ItemsTest(ItemFormTest):
|
||||
form_data['quota_add_existing'] = str(q.pk)
|
||||
doc = self.post_doc('/control/event/%s/%s/items/add' % (self.orga1.slug, self.event1.slug), form_data)
|
||||
|
||||
i = Item.objects.get(name__icontains='Existing')
|
||||
with scopes_disabled():
|
||||
i = Item.objects.get(name__icontains='Existing')
|
||||
|
||||
assert doc.select(".alert-success")
|
||||
assert q.items.filter(pk=i.pk).exists()
|
||||
assert doc.select(".alert-success")
|
||||
assert q.items.filter(pk=i.pk).exists()
|
||||
|
||||
def test_add_to_new_quota(self):
|
||||
doc = self.get_doc('/control/event/%s/%s/items/add' % (self.orga1.slug, self.event1.slug))
|
||||
@@ -574,8 +620,9 @@ class ItemsTest(ItemFormTest):
|
||||
doc = self.post_doc('/control/event/%s/%s/items/add' % (self.orga1.slug, self.event1.slug), form_data)
|
||||
|
||||
assert doc.select(".alert-success")
|
||||
assert Quota.objects.filter(name__icontains='New Quota').exists()
|
||||
assert Item.objects.filter(name__icontains='New Item').exists()
|
||||
i = Item.objects.get(name__icontains='New Item')
|
||||
q = Quota.objects.get(name__icontains='New Quota')
|
||||
assert q.items.filter(pk=i.pk).exists()
|
||||
with scopes_disabled():
|
||||
assert Quota.objects.filter(name__icontains='New Quota').exists()
|
||||
assert Item.objects.filter(name__icontains='New Item').exists()
|
||||
i = Item.objects.get(name__icontains='New Item')
|
||||
q = Quota.objects.get(name__icontains='New Quota')
|
||||
assert q.items.filter(pk=i.pk).exists()
|
||||
|
||||
Reference in New Issue
Block a user