forked from CGM_Public/pretix_original
More tests for items and questions
This commit is contained in:
@@ -1,10 +1,13 @@
|
||||
import datetime
|
||||
from decimal import Decimal
|
||||
|
||||
from django.utils.timezone import now
|
||||
from tests.base import SoupTest, extract_form_fields
|
||||
|
||||
from pretix.base.models import (
|
||||
Event, EventPermission, Item, ItemCategory, ItemVariation, Organizer,
|
||||
OrganizerPermission, Question, Quota, User,
|
||||
Event, EventPermission, Item, ItemCategory, ItemVariation, Order,
|
||||
OrderPosition, Organizer, OrganizerPermission, Question, QuestionAnswer,
|
||||
Quota, User,
|
||||
)
|
||||
|
||||
|
||||
@@ -85,6 +88,57 @@ class QuestionsTest(ItemFormTest):
|
||||
assert doc.select(".alert-success")
|
||||
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')
|
||||
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'
|
||||
form_data['form-INITIAL_FORMS'] = '1'
|
||||
form_data['form-MIN_NUM_FORMS'] = '0'
|
||||
form_data['form-MAX_NUM_FORMS'] = '1'
|
||||
form_data['form-0-id'] = o1.pk
|
||||
form_data['form-0-answer_0'] = 'England'
|
||||
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'
|
||||
|
||||
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')
|
||||
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'
|
||||
form_data['form-INITIAL_FORMS'] = '1'
|
||||
form_data['form-MIN_NUM_FORMS'] = '0'
|
||||
form_data['form-MAX_NUM_FORMS'] = '1'
|
||||
form_data['form-0-id'] = o1.pk
|
||||
form_data['form-0-answer_0'] = 'England'
|
||||
form_data['form-0-DELETE'] = 'yes'
|
||||
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()
|
||||
|
||||
def test_add_choices(self):
|
||||
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'
|
||||
form_data['form-TOTAL_FORMS'] = '1'
|
||||
form_data['form-INITIAL_FORMS'] = '0'
|
||||
form_data['form-MIN_NUM_FORMS'] = '0'
|
||||
form_data['form-MAX_NUM_FORMS'] = '1'
|
||||
form_data['form-0-id'] = ''
|
||||
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'
|
||||
|
||||
def test_update(self):
|
||||
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))
|
||||
@@ -125,6 +179,40 @@ class QuestionsTest(ItemFormTest):
|
||||
self.assertNotIn("shoe size", doc.select("#page-wrapper")[0].text)
|
||||
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)
|
||||
|
||||
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, payment_provider='banktransfer', locale='en')
|
||||
op = OrderPosition.objects.create(order=o, item=item1, variation=None, price=Decimal("14"),
|
||||
attendee_name="Peter")
|
||||
op.answers.create(question=c, answer='42')
|
||||
op = OrderPosition.objects.create(order=o, item=item1, variation=None, price=Decimal("14"),
|
||||
attendee_name="Michael")
|
||||
op.answers.create(question=c, answer='42')
|
||||
op = OrderPosition.objects.create(order=o, item=item1, variation=None, price=Decimal("14"),
|
||||
attendee_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]
|
||||
assert tbl.select('tr')[0].select('td')[0].text.strip() == '42'
|
||||
assert tbl.select('tr')[0].select('td')[1].text.strip() == '2'
|
||||
assert tbl.select('tr')[1].select('td')[0].text.strip() == '39'
|
||||
assert tbl.select('tr')[1].select('td')[1].text.strip() == '1'
|
||||
|
||||
doc = self.get_doc('/control/event/%s/%s/questions/%s/?status=p' % (self.orga1.slug, self.event1.slug, c.id))
|
||||
assert not doc.select('.container-fluid table.table-bordered tbody')
|
||||
|
||||
o.status = Order.STATUS_PAID
|
||||
o.save()
|
||||
doc = self.get_doc('/control/event/%s/%s/questions/%s/?status=p' % (self.orga1.slug, self.event1.slug, c.id))
|
||||
tbl = doc.select('.container-fluid table.table-bordered tbody')[0]
|
||||
assert tbl.select('tr')[0].select('td')[0].text.strip() == '42'
|
||||
|
||||
|
||||
class QuotaTest(ItemFormTest):
|
||||
|
||||
@@ -162,3 +250,113 @@ class QuotaTest(ItemFormTest):
|
||||
assert doc.select(".alert-success")
|
||||
self.assertNotIn("Full house", doc.select("#page-wrapper")[0].text)
|
||||
assert not Quota.objects.filter(id=c.id).exists()
|
||||
|
||||
|
||||
class ItemsTest(ItemFormTest):
|
||||
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
self.item1 = Item.objects.create(event=self.event1, name="Standard", default_price=0, position=1)
|
||||
self.item2 = Item.objects.create(event=self.event1, name="Business", default_price=0, position=2)
|
||||
self.var1 = ItemVariation.objects.create(item=self.item2, value="Silver")
|
||||
self.var2 = ItemVariation.objects.create(item=self.item2, value="Gold")
|
||||
|
||||
def test_move(self):
|
||||
self.client.post('/control/event/%s/%s/items/%s/down' % (self.orga1.slug, self.event1.slug, self.item1.id),)
|
||||
self.item1.refresh_from_db()
|
||||
self.item2.refresh_from_db()
|
||||
assert self.item1.position > self.item2.position
|
||||
self.client.post('/control/event/%s/%s/items/%s/up' % (self.orga1.slug, self.event1.slug, self.item1.id),)
|
||||
self.item1.refresh_from_db()
|
||||
self.item2.refresh_from_db()
|
||||
assert self.item1.position < self.item2.position
|
||||
|
||||
def test_create(self):
|
||||
self.client.post('/control/event/%s/%s/items/add' % (self.orga1.slug, self.event1.slug), {
|
||||
'name_0': 'T-Shirt',
|
||||
'default_price': '23.00',
|
||||
'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
|
||||
|
||||
def test_update(self):
|
||||
self.client.post('/control/event/%s/%s/items/%d/' % (self.orga1.slug, self.event1.slug, self.item1.id), {
|
||||
'name_0': 'Standard',
|
||||
'default_price': '23.00',
|
||||
'tax_rate': '19.00',
|
||||
'active': 'yes',
|
||||
'allow_cancel': 'yes'
|
||||
})
|
||||
self.item1.refresh_from_db()
|
||||
assert self.item1.default_price == Decimal('23.00')
|
||||
|
||||
def test_update_variations(self):
|
||||
self.client.post('/control/event/%s/%s/items/%d/variations' % (self.orga1.slug, self.event1.slug, self.item2.id), {
|
||||
'form-TOTAL_FORMS': '2',
|
||||
'form-INITIAL_FORMS': '2',
|
||||
'form-MIN_NUM_FORMS': '0',
|
||||
'form-MAX_NUM_FORMS': '1000',
|
||||
'form-0-id': str(self.var1.pk),
|
||||
'form-0-value_0': 'Bronze',
|
||||
'form-0-active': 'yes',
|
||||
'form-1-id': str(self.var2.pk),
|
||||
'form-1-value_0': 'Gold',
|
||||
'form-1-active': 'yes',
|
||||
'name_0': 'form-TOTAL_FORMS',
|
||||
'default_price': '23.00',
|
||||
'tax_rate': '19.00',
|
||||
'active': 'yes',
|
||||
'allow_cancel': 'yes'
|
||||
})
|
||||
self.var1.refresh_from_db()
|
||||
assert str(self.var1.value) == 'Bronze'
|
||||
|
||||
def test_delete_variation(self):
|
||||
self.client.post('/control/event/%s/%s/items/%d/variations' % (self.orga1.slug, self.event1.slug, self.item2.id), {
|
||||
'form-TOTAL_FORMS': '2',
|
||||
'form-INITIAL_FORMS': '2',
|
||||
'form-MIN_NUM_FORMS': '0',
|
||||
'form-MAX_NUM_FORMS': '1000',
|
||||
'form-0-id': str(self.var1.pk),
|
||||
'form-0-value_0': 'Bronze',
|
||||
'form-0-active': 'yes',
|
||||
'form-1-id': str(self.var2.pk),
|
||||
'form-1-value_0': 'Gold',
|
||||
'form-1-active': 'yes',
|
||||
'form-1-DELETE': 'yes',
|
||||
'name_0': 'form-TOTAL_FORMS',
|
||||
'default_price': '23.00',
|
||||
'tax_rate': '19.00',
|
||||
'active': 'yes',
|
||||
'allow_cancel': 'yes'
|
||||
})
|
||||
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()
|
||||
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()
|
||||
|
||||
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, payment_provider='banktransfer', locale='en'
|
||||
)
|
||||
OrderPosition.objects.create(
|
||||
order=o,
|
||||
item=self.item1,
|
||||
variation=None,
|
||||
price=Decimal("14"),
|
||||
attendee_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()
|
||||
self.item1.refresh_from_db()
|
||||
assert not self.item1.active
|
||||
|
||||
Reference in New Issue
Block a user