forked from CGM_Public/pretix_original
206 lines
9.7 KiB
Python
206 lines
9.7 KiB
Python
import datetime
|
|
import time
|
|
|
|
from django.test import TestCase
|
|
from django.utils.timezone import now
|
|
from tests.base import BrowserTest
|
|
|
|
from pretix.base.models import (
|
|
Event, Item, ItemCategory, ItemVariation, Organizer, Property,
|
|
PropertyValue, Quota, User,
|
|
)
|
|
|
|
|
|
class EventTestMixin:
|
|
|
|
def setUp(self):
|
|
super().setUp()
|
|
self.orga = Organizer.objects.create(name='CCC', slug='ccc')
|
|
self.event = Event.objects.create(
|
|
organizer=self.orga, name='30C3', slug='30c3',
|
|
date_from=datetime.datetime(2013, 12, 26, tzinfo=datetime.timezone.utc),
|
|
)
|
|
|
|
|
|
class EventMiddlewareTest(EventTestMixin, BrowserTest):
|
|
|
|
def setUp(self):
|
|
super().setUp()
|
|
self.driver.implicitly_wait(10)
|
|
|
|
def test_event_header(self):
|
|
self.driver.get('%s/%s/%s/' % (self.live_server_url, self.orga.slug, self.event.slug))
|
|
self.assertIn(str(self.event.name), self.driver.find_element_by_css_selector("h1").text)
|
|
|
|
def test_not_found(self):
|
|
resp = self.client.get('%s/%s/%s/' % (self.live_server_url, 'foo', 'bar'))
|
|
self.assertEqual(resp.status_code, 404)
|
|
|
|
|
|
class ItemDisplayTest(EventTestMixin, BrowserTest):
|
|
|
|
def setUp(self):
|
|
super().setUp()
|
|
self.driver.implicitly_wait(10)
|
|
|
|
def test_not_active(self):
|
|
q = Quota.objects.create(event=self.event, name='Quota', size=2)
|
|
item = Item.objects.create(event=self.event, name='Early-bird ticket', default_price=0, active=False)
|
|
q.items.add(item)
|
|
self.driver.get('%s/%s/%s/' % (self.live_server_url, self.orga.slug, self.event.slug))
|
|
self.assertNotIn("Early-bird", self.driver.find_element_by_css_selector("body").text)
|
|
|
|
def test_without_category(self):
|
|
q = Quota.objects.create(event=self.event, name='Quota', size=2)
|
|
item = Item.objects.create(event=self.event, name='Early-bird ticket', default_price=0, active=True)
|
|
q.items.add(item)
|
|
self.driver.get('%s/%s/%s/' % (self.live_server_url, self.orga.slug, self.event.slug))
|
|
self.assertIn("Early-bird", self.driver.find_element_by_css_selector("section .product-row:first-child").text)
|
|
|
|
def test_simple_with_category(self):
|
|
c = ItemCategory.objects.create(event=self.event, name="Entry tickets", position=0)
|
|
q = Quota.objects.create(event=self.event, name='Quota', size=2)
|
|
item = Item.objects.create(event=self.event, name='Early-bird ticket', category=c, default_price=0)
|
|
q.items.add(item)
|
|
self.driver.get('%s/%s/%s/' % (self.live_server_url, self.orga.slug, self.event.slug))
|
|
self.assertIn("Entry tickets", self.driver.find_element_by_css_selector("section:nth-of-type(1) h3").text)
|
|
self.assertIn("Early-bird",
|
|
self.driver.find_element_by_css_selector("section:nth-of-type(1) div:nth-of-type(1)").text)
|
|
|
|
def test_simple_without_quota(self):
|
|
c = ItemCategory.objects.create(event=self.event, name="Entry tickets", position=0)
|
|
Item.objects.create(event=self.event, name='Early-bird ticket', category=c, default_price=0)
|
|
resp = self.client.get('%s/%s/%s/' % (self.live_server_url, self.orga.slug, self.event.slug))
|
|
self.assertNotIn("Early-bird", resp.rendered_content)
|
|
|
|
def test_no_variations_in_quota(self):
|
|
c = ItemCategory.objects.create(event=self.event, name="Entry tickets", position=0)
|
|
q = Quota.objects.create(event=self.event, name='Quota', size=2)
|
|
item = Item.objects.create(event=self.event, name='Early-bird ticket', category=c, default_price=0)
|
|
prop1 = Property.objects.create(event=self.event, name="Color")
|
|
item.properties.add(prop1)
|
|
PropertyValue.objects.create(prop=prop1, value="Red")
|
|
PropertyValue.objects.create(prop=prop1, value="Black")
|
|
q.items.add(item)
|
|
self.driver.get('%s/%s/%s/' % (self.live_server_url, self.orga.slug, self.event.slug))
|
|
resp = self.client.get('%s/%s/%s/' % (self.live_server_url, self.orga.slug, self.event.slug))
|
|
self.assertNotIn("Early-bird", resp.rendered_content)
|
|
|
|
def test_one_variation_in_quota(self):
|
|
c = ItemCategory.objects.create(event=self.event, name="Entry tickets", position=0)
|
|
q = Quota.objects.create(event=self.event, name='Quota', size=2)
|
|
item = Item.objects.create(event=self.event, name='Early-bird ticket', category=c, default_price=0)
|
|
prop1 = Property.objects.create(event=self.event, name="Color")
|
|
item.properties.add(prop1)
|
|
val1 = PropertyValue.objects.create(prop=prop1, value="Red")
|
|
PropertyValue.objects.create(prop=prop1, value="Black")
|
|
q.items.add(item)
|
|
var1 = ItemVariation.objects.create(item=item)
|
|
var1.values.add(val1)
|
|
q.variations.add(var1)
|
|
self.driver.get('%s/%s/%s/' % (self.live_server_url, self.orga.slug, self.event.slug))
|
|
self.assertIn("Early-bird",
|
|
self.driver.find_element_by_css_selector("section:nth-of-type(1) div:nth-of-type(1)").text)
|
|
for el in self.driver.find_elements_by_link_text('Show variants'):
|
|
self.scroll_and_click(el)
|
|
time.sleep(2)
|
|
self.assertIn("Red",
|
|
self.driver.find_element_by_css_selector("section:nth-of-type(1)").text)
|
|
self.assertNotIn("Black",
|
|
self.driver.find_element_by_css_selector("section:nth-of-type(1)").text)
|
|
|
|
def test_variation_prices_in_quota(self):
|
|
c = ItemCategory.objects.create(event=self.event, name="Entry tickets", position=0)
|
|
q = Quota.objects.create(event=self.event, name='Quota', size=2)
|
|
item = Item.objects.create(event=self.event, name='Early-bird ticket', category=c, default_price=12)
|
|
prop1 = Property.objects.create(event=self.event, name="Color")
|
|
item.properties.add(prop1)
|
|
val1 = PropertyValue.objects.create(prop=prop1, value="Red", position=0)
|
|
val2 = PropertyValue.objects.create(prop=prop1, value="Black", position=1)
|
|
q.items.add(item)
|
|
var1 = ItemVariation.objects.create(item=item, default_price=14)
|
|
var1.values.add(val1)
|
|
var2 = ItemVariation.objects.create(item=item)
|
|
var2.values.add(val2)
|
|
q.variations.add(var1)
|
|
q.variations.add(var2)
|
|
self.driver.get('%s/%s/%s/' % (self.live_server_url, self.orga.slug, self.event.slug))
|
|
self.assertIn("Early-bird",
|
|
self.driver.find_element_by_css_selector("section:nth-of-type(1) div:nth-of-type(1)").text)
|
|
for el in self.driver.find_elements_by_link_text('Show variants'):
|
|
self.scroll_and_click(el)
|
|
time.sleep(2)
|
|
self.assertIn("Red",
|
|
self.driver.find_elements_by_css_selector("section:nth-of-type(1) div.variation")[0].text)
|
|
self.assertIn("14.00",
|
|
self.driver.find_elements_by_css_selector("section:nth-of-type(1) div.variation")[0].text)
|
|
self.assertIn("Black",
|
|
self.driver.find_elements_by_css_selector("section:nth-of-type(1) div.variation")[1].text)
|
|
self.assertIn("12.00",
|
|
self.driver.find_elements_by_css_selector("section:nth-of-type(1) div.variation")[1].text)
|
|
|
|
|
|
class DeadlineTest(EventTestMixin, TestCase):
|
|
|
|
def test_not_yet_started(self):
|
|
self.event.presale_start = now() + datetime.timedelta(days=1)
|
|
self.event.save()
|
|
response = self.client.get(
|
|
'/%s/%s/' % (self.orga.slug, self.event.slug)
|
|
)
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertIn('alert-info', response.rendered_content)
|
|
self.assertNotIn('checkout-button-row', response.rendered_content)
|
|
response = self.client.post(
|
|
'/%s/%s/cart/add' % (self.orga.slug, self.event.slug),
|
|
follow=True
|
|
)
|
|
self.assertIn('alert-danger', response.rendered_content)
|
|
self.assertIn('not yet started', response.rendered_content)
|
|
|
|
def test_over(self):
|
|
self.event.presale_end = now() - datetime.timedelta(days=1)
|
|
self.event.save()
|
|
response = self.client.get(
|
|
'/%s/%s/' % (self.orga.slug, self.event.slug)
|
|
)
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertIn('alert-info', response.rendered_content)
|
|
self.assertNotIn('checkout-button-row', response.rendered_content)
|
|
response = self.client.post(
|
|
'/%s/%s/cart/add' % (self.orga.slug, self.event.slug),
|
|
follow=True
|
|
)
|
|
self.assertIn('alert-danger', response.rendered_content)
|
|
self.assertIn('is over', response.rendered_content)
|
|
|
|
def test_not_set(self):
|
|
self.event.presale_start = None
|
|
self.event.presale_end = None
|
|
self.event.save()
|
|
response = self.client.get(
|
|
'/%s/%s/' % (self.orga.slug, self.event.slug)
|
|
)
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertNotIn('alert-info', response.rendered_content)
|
|
self.assertIn('checkout-button-row', response.rendered_content)
|
|
response = self.client.post(
|
|
'/%s/%s/cart/add' % (self.orga.slug, self.event.slug)
|
|
)
|
|
self.assertNotEqual(response.status_code, 403)
|
|
|
|
def test_in_time(self):
|
|
self.event.presale_start = now() - datetime.timedelta(days=1)
|
|
self.event.presale_end = now() + datetime.timedelta(days=1)
|
|
self.event.save()
|
|
response = self.client.get(
|
|
'/%s/%s/' % (self.orga.slug, self.event.slug)
|
|
)
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertNotIn('alert-info', response.rendered_content)
|
|
self.assertIn('checkout-button-row', response.rendered_content)
|
|
response = self.client.post(
|
|
'/%s/%s/cart/add' % (self.orga.slug, self.event.slug)
|
|
)
|
|
self.assertNotEqual(response.status_code, 403)
|