mirror of
https://github.com/pretix/pretix.git
synced 2026-05-09 15:54:03 +00:00
Add unit tests for category ordering and for questions
This commit is contained in:
@@ -17,7 +17,7 @@ useful some day.
|
|||||||
|
|
||||||
if RUN_LOCAL:
|
if RUN_LOCAL:
|
||||||
# could add Chrome, Firefox, etc... here
|
# could add Chrome, Firefox, etc... here
|
||||||
BROWSERS = ['PhantomJS']
|
BROWSERS = [os.environ.get('TEST_BROWSER', 'PhantomJS')]
|
||||||
else:
|
else:
|
||||||
from sauceclient import SauceClient
|
from sauceclient import SauceClient
|
||||||
USERNAME = os.environ.get('SAUCE_USERNAME')
|
USERNAME = os.environ.get('SAUCE_USERNAME')
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
|
import time
|
||||||
import datetime
|
import datetime
|
||||||
|
from selenium.webdriver.support.select import Select
|
||||||
from tixlbase.models import User, Organizer, Event, OrganizerPermission, EventPermission, ItemCategory, Property, \
|
from tixlbase.models import User, Organizer, Event, OrganizerPermission, EventPermission, ItemCategory, Property, \
|
||||||
PropertyValue
|
PropertyValue, Question
|
||||||
from tixlbase.tests import BrowserTest, on_platforms
|
from tixlbase.tests import BrowserTest, on_platforms
|
||||||
|
|
||||||
|
|
||||||
@on_platforms()
|
class ItemFormTest(BrowserTest):
|
||||||
class CategoriesTest(BrowserTest):
|
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super().setUp()
|
super().setUp()
|
||||||
self.user = User.objects.create_user('dummy@dummy.dummy', 'dummy@dummy.dummy', 'dummy')
|
self.user = User.objects.create_user('dummy@dummy.dummy', 'dummy@dummy.dummy', 'dummy')
|
||||||
@@ -15,7 +15,7 @@ class CategoriesTest(BrowserTest):
|
|||||||
self.event1 = Event.objects.create(
|
self.event1 = Event.objects.create(
|
||||||
organizer=self.orga1, name='30C3', slug='30c3',
|
organizer=self.orga1, name='30C3', slug='30c3',
|
||||||
date_from=datetime.datetime(2013, 12, 26, tzinfo=datetime.timezone.utc),
|
date_from=datetime.datetime(2013, 12, 26, tzinfo=datetime.timezone.utc),
|
||||||
)
|
)
|
||||||
OrganizerPermission.objects.create(organizer=self.orga1, user=self.user)
|
OrganizerPermission.objects.create(organizer=self.orga1, user=self.user)
|
||||||
EventPermission.objects.create(event=self.event1, user=self.user, can_change_items=True,
|
EventPermission.objects.create(event=self.event1, user=self.user, can_change_items=True,
|
||||||
can_change_settings=True)
|
can_change_settings=True)
|
||||||
@@ -28,6 +28,10 @@ class CategoriesTest(BrowserTest):
|
|||||||
self.driver.find_element_by_css_selector('button[type="submit"]').click()
|
self.driver.find_element_by_css_selector('button[type="submit"]').click()
|
||||||
self.driver.find_element_by_class_name("navbar-right")
|
self.driver.find_element_by_class_name("navbar-right")
|
||||||
|
|
||||||
|
|
||||||
|
@on_platforms()
|
||||||
|
class CategoriesTest(ItemFormTest):
|
||||||
|
|
||||||
def test_create(self):
|
def test_create(self):
|
||||||
self.driver.get('%s/control/event/%s/%s/categories/add' % (
|
self.driver.get('%s/control/event/%s/%s/categories/add' % (
|
||||||
self.live_server_url, self.orga1.slug, self.event1.slug
|
self.live_server_url, self.orga1.slug, self.event1.slug
|
||||||
@@ -49,6 +53,29 @@ class CategoriesTest(BrowserTest):
|
|||||||
self.assertIn("T-Shirts", self.driver.find_element_by_css_selector(".container table").text)
|
self.assertIn("T-Shirts", self.driver.find_element_by_css_selector(".container table").text)
|
||||||
self.assertNotIn("Entry tickets", self.driver.find_element_by_css_selector(".container table").text)
|
self.assertNotIn("Entry tickets", self.driver.find_element_by_css_selector(".container table").text)
|
||||||
|
|
||||||
|
def test_sort(self):
|
||||||
|
ItemCategory.objects.create(event=self.event1, name="Entry tickets", position=0)
|
||||||
|
ItemCategory.objects.create(event=self.event1, name="T-Shirts", position=1)
|
||||||
|
self.driver.get('%s/control/event/%s/%s/categories/' % (
|
||||||
|
self.live_server_url, self.orga1.slug, self.event1.slug
|
||||||
|
))
|
||||||
|
self.assertIn("Entry tickets",
|
||||||
|
self.driver.find_element_by_css_selector("table > tbody > tr:nth-child(1)").text)
|
||||||
|
self.assertIn("T-Shirts",
|
||||||
|
self.driver.find_element_by_css_selector("table > tbody > tr:nth-child(2)").text)
|
||||||
|
self.driver.find_element_by_css_selector("table > tbody > tr:nth-child(1) a[href*='down']").click()
|
||||||
|
time.sleep(1)
|
||||||
|
self.assertIn("Entry tickets",
|
||||||
|
self.driver.find_element_by_css_selector("table > tbody > tr:nth-child(2)").text)
|
||||||
|
self.assertIn("T-Shirts",
|
||||||
|
self.driver.find_element_by_css_selector("table > tbody > tr:nth-child(1)").text)
|
||||||
|
self.driver.find_element_by_css_selector("table > tbody > tr:nth-child(2) a[href*='up']").click()
|
||||||
|
time.sleep(1)
|
||||||
|
self.assertIn("Entry tickets",
|
||||||
|
self.driver.find_element_by_css_selector("table > tbody > tr:nth-child(1)").text)
|
||||||
|
self.assertIn("T-Shirts",
|
||||||
|
self.driver.find_element_by_css_selector("table > tbody > tr:nth-child(2)").text)
|
||||||
|
|
||||||
def test_delete(self):
|
def test_delete(self):
|
||||||
c = ItemCategory.objects.create(event=self.event1, name="Entry tickets")
|
c = ItemCategory.objects.create(event=self.event1, name="Entry tickets")
|
||||||
self.driver.get('%s/control/event/%s/%s/categories/%s/delete' % (
|
self.driver.get('%s/control/event/%s/%s/categories/%s/delete' % (
|
||||||
@@ -60,28 +87,7 @@ class CategoriesTest(BrowserTest):
|
|||||||
|
|
||||||
|
|
||||||
@on_platforms()
|
@on_platforms()
|
||||||
class PropertiesTest(BrowserTest):
|
class PropertiesTest(ItemFormTest):
|
||||||
|
|
||||||
def setUp(self):
|
|
||||||
super().setUp()
|
|
||||||
self.user = User.objects.create_user('dummy@dummy.dummy', 'dummy@dummy.dummy', 'dummy')
|
|
||||||
self.orga1 = Organizer.objects.create(name='CCC', slug='ccc')
|
|
||||||
self.orga2 = Organizer.objects.create(name='MRM', slug='mrm')
|
|
||||||
self.event1 = Event.objects.create(
|
|
||||||
organizer=self.orga1, name='30C3', slug='30c3',
|
|
||||||
date_from=datetime.datetime(2013, 12, 26, tzinfo=datetime.timezone.utc),
|
|
||||||
)
|
|
||||||
OrganizerPermission.objects.create(organizer=self.orga1, user=self.user)
|
|
||||||
EventPermission.objects.create(event=self.event1, user=self.user, can_change_items=True,
|
|
||||||
can_change_settings=True)
|
|
||||||
self.driver.implicitly_wait(10)
|
|
||||||
self.driver.get('%s%s' % (self.live_server_url, '/control/login'))
|
|
||||||
username_input = self.driver.find_element_by_name("email")
|
|
||||||
username_input.send_keys('dummy@dummy.dummy')
|
|
||||||
password_input = self.driver.find_element_by_name("password")
|
|
||||||
password_input.send_keys('dummy')
|
|
||||||
self.driver.find_element_by_css_selector('button[type="submit"]').click()
|
|
||||||
self.driver.find_element_by_class_name("navbar-right")
|
|
||||||
|
|
||||||
def test_create(self):
|
def test_create(self):
|
||||||
self.driver.get('%s/control/event/%s/%s/properties/add' % (
|
self.driver.get('%s/control/event/%s/%s/properties/add' % (
|
||||||
@@ -124,3 +130,40 @@ class PropertiesTest(BrowserTest):
|
|||||||
self.driver.find_element_by_class_name("btn-danger").click()
|
self.driver.find_element_by_class_name("btn-danger").click()
|
||||||
self.driver.find_element_by_class_name("alert-success")
|
self.driver.find_element_by_class_name("alert-success")
|
||||||
self.assertNotIn("Size", self.driver.find_element_by_css_selector(".container table").text)
|
self.assertNotIn("Size", self.driver.find_element_by_css_selector(".container table").text)
|
||||||
|
|
||||||
|
|
||||||
|
@on_platforms()
|
||||||
|
class QuestionsTest(ItemFormTest):
|
||||||
|
|
||||||
|
def test_create(self):
|
||||||
|
self.driver.get('%s/control/event/%s/%s/questions/add' % (
|
||||||
|
self.live_server_url, self.orga1.slug, self.event1.slug
|
||||||
|
))
|
||||||
|
self.driver.find_element_by_name("question").send_keys('What is your shoe size?')
|
||||||
|
Select(self.driver.find_element_by_name("type")).select_by_value('N')
|
||||||
|
self.driver.find_element_by_class_name("btn-save").click()
|
||||||
|
self.driver.find_element_by_class_name("alert-success")
|
||||||
|
self.assertIn("shoe size", self.driver.find_element_by_css_selector(".container table").text)
|
||||||
|
|
||||||
|
def test_update(self):
|
||||||
|
c = Question.objects.create(event=self.event1, question="What is your shoe size?", type="N", required=True)
|
||||||
|
self.driver.get('%s/control/event/%s/%s/questions/%s/' % (
|
||||||
|
self.live_server_url, self.orga1.slug, self.event1.slug, c.identity
|
||||||
|
))
|
||||||
|
self.driver.find_element_by_name("question").clear()
|
||||||
|
self.driver.find_element_by_name("question").send_keys('How old are you?')
|
||||||
|
self.driver.find_element_by_class_name("btn-save").click()
|
||||||
|
self.driver.find_element_by_class_name("alert-success")
|
||||||
|
self.assertIn("How old", self.driver.find_element_by_css_selector(".container table").text)
|
||||||
|
self.assertNotIn("shoe size", self.driver.find_element_by_css_selector(".container table").text)
|
||||||
|
c = Question.objects.current.get(identity=c.identity)
|
||||||
|
self.assertTrue(c.required)
|
||||||
|
|
||||||
|
def test_delete(self):
|
||||||
|
c = Question.objects.create(event=self.event1, question="What is your shoe size?", type="N", required=True)
|
||||||
|
self.driver.get('%s/control/event/%s/%s/questions/%s/delete' % (
|
||||||
|
self.live_server_url, self.orga1.slug, self.event1.slug, c.identity
|
||||||
|
))
|
||||||
|
self.driver.find_element_by_class_name("btn-danger").click()
|
||||||
|
self.driver.find_element_by_class_name("alert-success")
|
||||||
|
self.assertNotIn("shoe size", self.driver.find_element_by_css_selector(".container table").text)
|
||||||
|
|||||||
@@ -59,6 +59,7 @@ class CategoryDelete(EventPermissionRequiredMixin, DeleteView):
|
|||||||
def delete(self, request, *args, **kwargs):
|
def delete(self, request, *args, **kwargs):
|
||||||
self.object = self.get_object()
|
self.object = self.get_object()
|
||||||
for item in self.object.items.current.all():
|
for item in self.object.items.current.all():
|
||||||
|
# TODO: Clone!?
|
||||||
item.category = None
|
item.category = None
|
||||||
item.save()
|
item.save()
|
||||||
success_url = self.get_success_url()
|
success_url = self.get_success_url()
|
||||||
@@ -139,7 +140,7 @@ def category_move(request, category, up=True):
|
|||||||
for i, cat in enumerate(categories):
|
for i, cat in enumerate(categories):
|
||||||
if cat.position != i:
|
if cat.position != i:
|
||||||
cat.position = i
|
cat.position = i
|
||||||
cat.save()
|
cat.save() # TODO: Clone or document sloppiness?
|
||||||
|
|
||||||
|
|
||||||
@event_permission_required("can_change_items")
|
@event_permission_required("can_change_items")
|
||||||
|
|||||||
Reference in New Issue
Block a user