From 2977002cbd2baad6f71d1a65ce8d46960ab74274 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Thu, 15 Jan 2015 16:46:51 +0100 Subject: [PATCH] Add unit tests for category ordering and for questions --- src/tixlbase/tests/__init__.py | 2 +- src/tixlcontrol/tests/test_items.py | 97 +++++++++++++++++++++-------- src/tixlcontrol/views/item.py | 3 +- 3 files changed, 73 insertions(+), 29 deletions(-) diff --git a/src/tixlbase/tests/__init__.py b/src/tixlbase/tests/__init__.py index f0cab76942..d563d39224 100644 --- a/src/tixlbase/tests/__init__.py +++ b/src/tixlbase/tests/__init__.py @@ -17,7 +17,7 @@ useful some day. if RUN_LOCAL: # could add Chrome, Firefox, etc... here - BROWSERS = ['PhantomJS'] + BROWSERS = [os.environ.get('TEST_BROWSER', 'PhantomJS')] else: from sauceclient import SauceClient USERNAME = os.environ.get('SAUCE_USERNAME') diff --git a/src/tixlcontrol/tests/test_items.py b/src/tixlcontrol/tests/test_items.py index 87a7dd6e28..8daf4350a1 100644 --- a/src/tixlcontrol/tests/test_items.py +++ b/src/tixlcontrol/tests/test_items.py @@ -1,12 +1,12 @@ +import time import datetime +from selenium.webdriver.support.select import Select from tixlbase.models import User, Organizer, Event, OrganizerPermission, EventPermission, ItemCategory, Property, \ - PropertyValue + PropertyValue, Question from tixlbase.tests import BrowserTest, on_platforms -@on_platforms() -class CategoriesTest(BrowserTest): - +class ItemFormTest(BrowserTest): def setUp(self): super().setUp() 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( 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) @@ -28,6 +28,10 @@ class CategoriesTest(BrowserTest): self.driver.find_element_by_css_selector('button[type="submit"]').click() self.driver.find_element_by_class_name("navbar-right") + +@on_platforms() +class CategoriesTest(ItemFormTest): + def test_create(self): self.driver.get('%s/control/event/%s/%s/categories/add' % ( 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.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): c = ItemCategory.objects.create(event=self.event1, name="Entry tickets") self.driver.get('%s/control/event/%s/%s/categories/%s/delete' % ( @@ -60,28 +87,7 @@ class CategoriesTest(BrowserTest): @on_platforms() -class PropertiesTest(BrowserTest): - - 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") +class PropertiesTest(ItemFormTest): def test_create(self): 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("alert-success") 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) diff --git a/src/tixlcontrol/views/item.py b/src/tixlcontrol/views/item.py index 611196cc8d..f512abd43c 100644 --- a/src/tixlcontrol/views/item.py +++ b/src/tixlcontrol/views/item.py @@ -59,6 +59,7 @@ class CategoryDelete(EventPermissionRequiredMixin, DeleteView): def delete(self, request, *args, **kwargs): self.object = self.get_object() for item in self.object.items.current.all(): + # TODO: Clone!? item.category = None item.save() success_url = self.get_success_url() @@ -139,7 +140,7 @@ def category_move(request, category, up=True): for i, cat in enumerate(categories): if cat.position != i: cat.position = i - cat.save() + cat.save() # TODO: Clone or document sloppiness? @event_permission_required("can_change_items")