Removed selenium as a test dependency

This commit is contained in:
Raphael Michel
2016-08-14 17:20:33 +02:00
parent e881abd631
commit 42b9559b6f
6 changed files with 165 additions and 273 deletions

View File

@@ -1,10 +1,6 @@
import datetime
import os
import time
import unittest
from selenium.webdriver.support.select import Select
from tests.base import BrowserTest
from tests.base import SoupTest, extract_form_fields
from pretix.base.models import (
Event, EventPermission, Item, ItemCategory, ItemVariation, Organizer,
@@ -12,7 +8,7 @@ from pretix.base.models import (
)
class ItemFormTest(BrowserTest):
class ItemFormTest(SoupTest):
def setUp(self):
super().setUp()
self.user = User.objects.create_user('dummy@dummy.dummy', 'dummy')
@@ -25,134 +21,103 @@ class ItemFormTest(BrowserTest):
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")
self.client.login(email='dummy@dummy.dummy', password='dummy')
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
))
self.driver.find_element_by_name("name_0").send_keys('Entry tickets')
self.driver.find_element_by_class_name("btn-save").click()
self.driver.find_element_by_class_name("alert-success")
self.assertIn("Entry tickets", self.driver.find_element_by_css_selector("#page-wrapper table").text)
doc = self.get_doc('/control/event/%s/%s/categories/add' % (self.orga1.slug, self.event1.slug))
form_data = extract_form_fields(doc.select('.container-fluid form')[0])
form_data['name_0'] = 'Entry tickets'
doc = self.post_doc('/control/event/%s/%s/categories/add' % (self.orga1.slug, self.event1.slug), form_data)
assert doc.select(".alert-success")
self.assertIn("Entry tickets", doc.select("#page-wrapper table")[0].text)
def test_update(self):
c = ItemCategory.objects.create(event=self.event1, name="Entry tickets")
self.driver.get('%s/control/event/%s/%s/categories/%s/' % (
self.live_server_url, self.orga1.slug, self.event1.slug, c.id
))
self.driver.find_element_by_name("name_0").clear()
self.driver.find_element_by_name("name_0").send_keys('T-Shirts')
self.scroll_and_click(self.driver.find_element_by_class_name("btn-save"))
self.driver.find_element_by_class_name("alert-success")
self.assertIn("T-Shirts", self.driver.find_element_by_css_selector("#page-wrapper table").text)
self.assertNotIn("Entry tickets", self.driver.find_element_by_css_selector("#page-wrapper table").text)
doc = self.get_doc('/control/event/%s/%s/categories/%s/' % (self.orga1.slug, self.event1.slug, c.id))
form_data = extract_form_fields(doc.select('.container-fluid form')[0])
form_data['name_0'] = 'T-Shirts'
doc = self.post_doc('/control/event/%s/%s/categories/%s/' % (self.orga1.slug, self.event1.slug, c.id),
form_data)
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'
@unittest.skipIf('TRAVIS' in os.environ, 'See docstring for details.')
def test_sort(self):
"""
For unknown reasons, the first scoll_and_click() call sometimes results in the following exception
selenium.common.exceptions.ElementNotVisibleException:
Message: {"errorMessage":"Element is not currently visible and may not be manipulated", …}
This exception does not occur on either of my machines, but only when being run in Travis CI.
Raphael Michel, 2015-02-08
"""
ItemCategory.objects.create(event=self.event1, name="Entry tickets", position=0)
c1 = 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.scroll_and_click(self.driver.find_element_by_css_selector("table > tbody > tr:nth-child(1) a[href*='down']"))
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.scroll_and_click(self.driver.find_element_by_css_selector("table > tbody > tr:nth-child(2) a[href*='up']"))
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)
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)
self.client.get('/control/event/%s/%s/categories/%s/down' % (self.orga1.slug, self.event1.slug, c1.id))
doc = self.get_doc('/control/event/%s/%s/categories/' % (self.orga1.slug, self.event1.slug))
self.assertIn("Entry tickets", doc.select("table > tbody > tr")[1].text)
self.assertIn("T-Shirts", doc.select("table > tbody > tr")[0].text)
self.client.get('/control/event/%s/%s/categories/%s/up' % (self.orga1.slug, self.event1.slug, c1.id))
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)
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' % (
self.live_server_url, self.orga1.slug, self.event1.slug, c.id
))
self.driver.find_element_by_class_name("btn-danger").click()
self.driver.find_element_by_class_name("alert-success")
self.assertNotIn("Entry tickets", self.driver.find_element_by_css_selector("#page-wrapper").text)
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()
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_0").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("#page-wrapper table").text)
doc = self.get_doc('/control/event/%s/%s/questions/add' % (self.orga1.slug, self.event1.slug))
form_data = extract_form_fields(doc.select('.container-fluid form')[0])
form_data['question_0'] = 'What is your shoe size?'
form_data['type'] = 'N'
doc = self.post_doc('/control/event/%s/%s/questions/add' % (self.orga1.slug, self.event1.slug), form_data)
assert doc.select(".alert-success")
self.assertIn("shoe size", doc.select("#page-wrapper table")[0].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.id
))
self.driver.find_element_by_name("question_0").clear()
self.driver.find_element_by_name("question_0").send_keys('How old are you?')
self.scroll_and_click(self.driver.find_element_by_class_name("btn-save"))
self.driver.find_element_by_class_name("alert-success")
self.assertIn("How old", self.driver.find_element_by_css_selector("#page-wrapper table").text)
self.assertNotIn("shoe size", self.driver.find_element_by_css_selector("#page-wrapper table").text)
doc = self.get_doc('/control/event/%s/%s/questions/%s/' % (self.orga1.slug, self.event1.slug, c.id))
form_data = extract_form_fields(doc.select('.container-fluid form')[0])
form_data['question_0'] = 'How old are you?'
doc = self.post_doc('/control/event/%s/%s/questions/%s/' % (self.orga1.slug, self.event1.slug, c.id), 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?'
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.id
))
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("#page-wrapper").text)
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()
class QuotaTest(ItemFormTest):
def test_create(self):
self.driver.get('%s/control/event/%s/%s/quotas/add' % (
self.live_server_url, self.orga1.slug, self.event1.slug
))
self.driver.find_element_by_name("name").send_keys('Full house')
self.driver.find_element_by_name("size").send_keys('500')
self.driver.find_element_by_class_name("btn-save").click()
self.driver.find_element_by_class_name("alert-success")
self.assertIn("Full house", self.driver.find_element_by_css_selector("#page-wrapper table").text)
doc = self.get_doc('/control/event/%s/%s/quotas/add' % (self.orga1.slug, self.event1.slug))
form_data = extract_form_fields(doc.select('.container-fluid form')[0])
form_data['name'] = 'Full house'
form_data['size'] = '500'
doc = self.post_doc('/control/event/%s/%s/quotas/add' % (self.orga1.slug, self.event1.slug), form_data)
assert doc.select(".alert-success")
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)
@@ -160,31 +125,22 @@ class QuotaTest(ItemFormTest):
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")
self.driver.get('%s/control/event/%s/%s/quotas/%s/' % (
self.live_server_url, self.orga1.slug, self.event1.slug, c.id
))
self.driver.find_element_by_name("size").clear()
self.driver.find_element_by_name("size").send_keys('350')
# self.scroll_and_click(self.driver.find_element_by_css_selector('.panel-group .panel:nth-child(1)
# .panel-title a'))
# time.sleep(1)
self.scroll_and_click(self.driver.find_element_by_name("item_%s" % item1.id))
# self.driver.find_element_by_css_selector('.panel-group .panel:nth-child(2) .panel-title a').click()
# time.sleep(1)
self.scroll_and_click(self.driver.find_elements_by_css_selector("input[name=item_%s]" % item2.id)[1])
self.scroll_and_click(self.driver.find_element_by_class_name("btn-save"))
self.driver.find_element_by_class_name("alert-success")
self.assertIn("350", self.driver.find_element_by_css_selector("#page-wrapper table").text)
self.assertNotIn("500", self.driver.find_element_by_css_selector("#page-wrapper table").text)
doc = self.get_doc('/control/event/%s/%s/quotas/%s/' % (self.orga1.slug, self.event1.slug, c.id))
doc.select('[name=item_%s]' % item1.id)[0]['checked'] = 'checked'
form_data = extract_form_fields(doc.select('.container-fluid form')[0])
form_data['size'] = '350'
doc = self.post_doc('/control/event/%s/%s/quotas/%s/' % (self.orga1.slug, self.event1.slug, c.id), form_data)
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()
def test_delete(self):
c = Quota.objects.create(event=self.event1, name="Full house", size=500)
self.driver.get('%s/control/event/%s/%s/quotas/%s/delete' % (
self.live_server_url, self.orga1.slug, self.event1.slug, c.id
))
self.driver.find_element_by_class_name("btn-danger").click()
self.driver.find_element_by_class_name("alert-success")
self.assertNotIn("Full house", self.driver.find_element_by_css_selector("#page-wrapper").text)
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()

View File

@@ -1,106 +1,108 @@
from tests.base import BrowserTest
from tests.base import SoupTest, extract_form_fields
from pretix.base.models import User
class UserSettingsTest(BrowserTest):
class UserSettingsTest(SoupTest):
def setUp(self):
super().setUp()
self.user = User.objects.create_user('dummy@dummy.dummy', 'dummy')
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")
self.driver.get('%s%s' % (self.live_server_url, '/control/settings'))
self.client.login(email='dummy@dummy.dummy', password='dummy')
doc = self.get_doc('/control/settings')
self.form_data = extract_form_fields(doc.select('.container-fluid form')[0])
def save(self, data):
form_data = self.form_data.copy()
form_data.update(data)
print(form_data)
return self.post_doc('/control/settings', form_data)
def test_set_name(self):
self.driver.find_element_by_name("givenname").clear()
self.driver.find_element_by_name("familyname").clear()
self.driver.find_element_by_name("givenname").send_keys("Peter")
self.driver.find_element_by_name("familyname").send_keys("Miller")
self.scroll_and_click(self.driver.find_element_by_class_name('btn-save'))
self.driver.find_element_by_class_name("alert-success")
doc = self.save({
'givenname': 'Peter',
'familyname': 'Miller'
})
assert doc.select(".alert-success")
self.user = User.objects.get(pk=self.user.pk)
assert self.user.givenname == 'Peter'
assert self.user.familyname == 'Miller'
def test_change_email_require_password(self):
self.driver.find_element_by_name("email").clear()
self.driver.find_element_by_name("email").send_keys("foo@example.com")
self.scroll_and_click(self.driver.find_element_by_class_name('btn-save'))
self.driver.find_element_by_class_name("alert-danger")
doc = self.save({
'email': 'foo@example.com',
})
assert doc.select(".alert-danger")
self.user = User.objects.get(pk=self.user.pk)
assert self.user.email == 'dummy@dummy.dummy'
def test_change_email_success(self):
self.driver.find_element_by_name("email").clear()
self.driver.find_element_by_name("email").send_keys("foo@example.com")
self.driver.find_element_by_name("old_pw").clear()
self.driver.find_element_by_name("old_pw").send_keys("dummy")
self.scroll_and_click(self.driver.find_element_by_class_name('btn-save'))
self.driver.find_element_by_class_name("alert-success")
doc = self.save({
'email': 'foo@example.com',
'old_pw': 'dummy'
})
assert doc.select(".alert-success")
self.user = User.objects.get(pk=self.user.pk)
assert self.user.email == 'foo@example.com'
def test_change_email_no_duplicates(self):
User.objects.create_user('foo@example.com', 'foo')
self.driver.find_element_by_name("email").clear()
self.driver.find_element_by_name("email").send_keys("foo@example.com")
self.driver.find_element_by_name("old_pw").clear()
self.driver.find_element_by_name("old_pw").send_keys("dummy")
self.scroll_and_click(self.driver.find_element_by_class_name('btn-save'))
self.driver.find_element_by_class_name("alert-danger")
doc = self.save({
'email': 'foo@example.com',
'old_pw': 'dummy'
})
assert doc.select(".alert-danger")
self.user = User.objects.get(pk=self.user.pk)
assert self.user.email == 'dummy@dummy.dummy'
def test_change_password_require_password(self):
self.driver.find_element_by_name("new_pw").send_keys("foo")
self.driver.find_element_by_name("new_pw_repeat").send_keys("foo")
self.scroll_and_click(self.driver.find_element_by_class_name('btn-save'))
self.driver.find_element_by_class_name("alert-danger")
doc = self.save({
'new_pw': 'foo',
'new_pw_repeat': 'foo',
})
assert doc.select(".alert-danger")
pw = self.user.password
self.user = User.objects.get(pk=self.user.pk)
assert self.user.password == pw
def test_change_password_success(self):
self.driver.find_element_by_name("new_pw").send_keys("foobarbar")
self.driver.find_element_by_name("new_pw_repeat").send_keys("foobarbar")
self.driver.find_element_by_name("old_pw").send_keys("dummy")
self.scroll_and_click(self.driver.find_element_by_class_name('btn-save'))
self.driver.find_element_by_class_name("alert-success")
doc = self.save({
'new_pw': 'foobarbar',
'new_pw_repeat': 'foobarbar',
'old_pw': 'dummy',
})
assert doc.select(".alert-success")
self.user = User.objects.get(pk=self.user.pk)
assert self.user.check_password("foobarbar")
def test_change_password_short(self):
self.driver.find_element_by_name("new_pw").send_keys("foobar")
self.driver.find_element_by_name("new_pw_repeat").send_keys("foobar")
self.driver.find_element_by_name("old_pw").send_keys("dummy")
self.scroll_and_click(self.driver.find_element_by_class_name('btn-save'))
self.driver.find_element_by_class_name("alert-danger")
doc = self.save({
'new_pw': 'foo',
'new_pw_repeat': 'foo',
'old_pw': 'dummy',
})
assert doc.select(".alert-danger")
pw = self.user.password
self.user = User.objects.get(pk=self.user.pk)
assert self.user.password == pw
def test_change_password_user_attribute_similarity(self):
self.driver.find_element_by_name("new_pw").send_keys("dummy123")
self.driver.find_element_by_name("new_pw_repeat").send_keys("dummy123")
self.driver.find_element_by_name("old_pw").send_keys("dummy")
self.scroll_and_click(self.driver.find_element_by_class_name('btn-save'))
self.driver.find_element_by_class_name("alert-danger")
doc = self.save({
'new_pw': 'dummy123',
'new_pw_repeat': 'dummy123',
'old_pw': 'dummy',
})
assert doc.select(".alert-danger")
pw = self.user.password
self.user = User.objects.get(pk=self.user.pk)
assert self.user.password == pw
def test_change_password_require_repeat(self):
self.driver.find_element_by_name("new_pw").send_keys("foo")
self.driver.find_element_by_name("new_pw_repeat").send_keys("bar")
self.driver.find_element_by_name("old_pw").send_keys("dummy")
self.scroll_and_click(self.driver.find_element_by_class_name('btn-save'))
self.driver.find_element_by_class_name("alert-danger")
doc = self.save({
'new_pw': 'foooooooooooooo',
'new_pw_repeat': 'baaaaaaaaaaaar',
'old_pw': 'dummy',
})
assert doc.select(".alert-danger")
pw = self.user.password
self.user = User.objects.get(pk=self.user.pk)
assert self.user.password == pw