Added checks for data versioning within the existing tests

This commit is contained in:
Raphael Michel
2015-06-21 22:26:50 +02:00
parent a0aa65e392
commit 2a8b3cbfa9
5 changed files with 69 additions and 4 deletions

View File

@@ -3,7 +3,7 @@ from decimal import Decimal
from django.test import TestCase
from django.utils.timezone import now
from pretix.base.models import Event, Organizer, User
from pretix.base.models import Event, Organizer, User, OrganizerSetting
from pretix.base import settings
from pretix.base.settings import SettingsSandbox
@@ -45,10 +45,18 @@ class SettingsTestCase(TestCase):
# Reload object
self.organizer = Organizer.objects.get(identity=self.organizer.identity)
self.event = Event.objects.get(identity=self.event.identity)
def test_versioning(self):
self.organizer.settings.test = 'foo'
t1 = now()
self.assertEqual(self.organizer.settings.test, 'foo')
self.assertEqual(self.event.settings.test, 'foo')
self.organizer.settings.test = 'bar'
assert OrganizerSetting.objects.as_of(t1).get(object=self.organizer, key='test').value == 'foo'
assert OrganizerSetting.objects.current.get(object=self.organizer, key='test').value == 'bar'
def test_override_organizer(self):
self.organizer.settings.test = 'foo'
self.event.settings.test = 'bar'

View File

@@ -22,9 +22,16 @@ class EventsTest(BrowserTest):
organizer=self.orga2, name='MRMCD14', slug='mrmcd14',
date_from=datetime.datetime(2014, 9, 5, tzinfo=datetime.timezone.utc),
)
self.event4 = Event.objects.create(
organizer=self.orga2, name='MRMCD00', slug='mrmcd00',
date_from=datetime.datetime(2000, 9, 5, tzinfo=datetime.timezone.utc),
)
self.event4.delete()
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)
EventPermission.objects.create(event=self.event4, 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")
@@ -40,6 +47,7 @@ class EventsTest(BrowserTest):
self.assertIn("30C3", tabletext)
self.assertNotIn("31C3", tabletext)
self.assertNotIn("MRMCD14", tabletext)
self.assertNotIn("MRMCD00", tabletext)
def test_settings(self):
self.driver.get('%s/control/event/%s/%s/settings/' % (self.live_server_url, self.orga1.slug,

View File

@@ -2,6 +2,7 @@ import os
import time
import datetime
import unittest
from django.utils.timezone import now
from selenium.webdriver.support.select import Select
from pretix.base.models import User, Organizer, Event, OrganizerPermission, EventPermission, ItemCategory, Property, \
PropertyValue, Question, Quota, Item
@@ -44,6 +45,7 @@ class CategoriesTest(ItemFormTest):
def test_update(self):
c = ItemCategory.objects.create(event=self.event1, name="Entry tickets")
t1 = now()
self.driver.get('%s/control/event/%s/%s/categories/%s/' % (
self.live_server_url, self.orga1.slug, self.event1.slug, c.identity
))
@@ -53,6 +55,8 @@ class CategoriesTest(ItemFormTest):
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)
assert str(ItemCategory.objects.as_of(t1).get(identity=c.identity).name) == 'Entry tickets'
assert str(ItemCategory.objects.current.get(identity=c.identity).name) == 'T-Shirts'
@unittest.skipIf('TRAVIS' in os.environ, 'See docstring for details.')
def test_sort(self):
@@ -90,12 +94,15 @@ class CategoriesTest(ItemFormTest):
def test_delete(self):
c = ItemCategory.objects.create(event=self.event1, name="Entry tickets")
t1 = now()
self.driver.get('%s/control/event/%s/%s/categories/%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("Entry tickets", self.driver.find_element_by_css_selector("#page-wrapper table").text)
assert ItemCategory.objects.as_of(t1).filter(identity=c.identity).exists()
assert not ItemCategory.objects.current.filter(identity=c.identity).exists()
class PropertiesTest(ItemFormTest):
@@ -117,8 +124,9 @@ class PropertiesTest(ItemFormTest):
@unittest.skipIf('TRAVIS' in os.environ, 'See CategoriesTest.test_sort for details.')
def test_update(self):
c = Property.objects.create(event=self.event1, name="Size")
PropertyValue.objects.create(prop=c, position=0, value="S")
PropertyValue.objects.create(prop=c, position=1, value="M")
p1 = PropertyValue.objects.create(prop=c, position=0, value="S")
p2 = PropertyValue.objects.create(prop=c, position=1, value="M")
t1 = now()
self.driver.get('%s/control/event/%s/%s/properties/%s/' % (
self.live_server_url, self.orga1.slug, self.event1.slug, c.identity
))
@@ -134,15 +142,24 @@ class PropertiesTest(ItemFormTest):
self.driver.find_element_by_class_name("alert-success")
self.assertEqual("red", self.driver.find_element_by_name("values-0-value_0").get_attribute("value"))
self.assertEqual("blue", self.driver.find_element_by_name("values-1-value_0").get_attribute("value"))
assert str(Property.objects.current.get(identity=c.identity).name) == 'Color'
assert str(PropertyValue.objects.as_of(t1).get(identity=p2.identity).value) == 'M'
assert str(PropertyValue.objects.current.get(identity=p2.identity).value) == 'red'
assert str(PropertyValue.objects.as_of(t1).get(identity=p1.identity).value) == 'S'
assert not PropertyValue.objects.current.filter(identity=p1.identity).exists()
assert Property.objects.as_of(t1).get(identity=c.identity).name == 'Size'
def test_delete(self):
c = Property.objects.create(event=self.event1, name="Size")
t1 = now()
self.driver.get('%s/control/event/%s/%s/properties/%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("Size", self.driver.find_element_by_css_selector("#page-wrapper table").text)
assert Property.objects.as_of(t1).filter(identity=c.identity).exists()
assert not Property.objects.current.filter(identity=c.identity).exists()
class QuestionsTest(ItemFormTest):
@@ -159,6 +176,7 @@ class QuestionsTest(ItemFormTest):
def test_update(self):
c = Question.objects.create(event=self.event1, question="What is your shoe size?", type="N", required=True)
t1 = now()
self.driver.get('%s/control/event/%s/%s/questions/%s/' % (
self.live_server_url, self.orga1.slug, self.event1.slug, c.identity
))
@@ -170,15 +188,20 @@ class QuestionsTest(ItemFormTest):
self.assertNotIn("shoe size", self.driver.find_element_by_css_selector("#page-wrapper table").text)
c = Question.objects.current.get(identity=c.identity)
self.assertTrue(c.required)
assert str(Question.objects.current.get(identity=c.identity).question) == 'How old are you?'
assert str(Question.objects.as_of(t1).get(identity=c.identity).question) == 'What is your shoe size?'
def test_delete(self):
c = Question.objects.create(event=self.event1, question="What is your shoe size?", type="N", required=True)
t1 = now()
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("#page-wrapper table").text)
assert Question.objects.as_of(t1).filter(identity=c.identity).exists()
assert not Question.objects.current.filter(identity=c.identity).exists()
class QuotaTest(ItemFormTest):
@@ -201,6 +224,7 @@ class QuotaTest(ItemFormTest):
item2.properties.add(prop1)
PropertyValue.objects.create(prop=prop1, value="Silver")
PropertyValue.objects.create(prop=prop1, value="Gold")
t1 = now()
self.driver.get('%s/control/event/%s/%s/quotas/%s/' % (
self.live_server_url, self.orga1.slug, self.event1.slug, c.identity
))
@@ -217,12 +241,19 @@ class QuotaTest(ItemFormTest):
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)
assert Quota.objects.current.get(identity=c.identity).size == 350
assert Quota.objects.as_of(t1).get(identity=c.identity).size == 500
assert item1 in Quota.objects.current.get(identity=c.identity).items.all()
assert item1 not in Quota.objects.as_of(t1).get(identity=c.identity).items.all()
def test_delete(self):
c = Quota.objects.create(event=self.event1, name="Full house", size=500)
t1 = now()
self.driver.get('%s/control/event/%s/%s/quotas/%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("Full house", self.driver.find_element_by_css_selector("#page-wrapper table").text)
assert Quota.objects.as_of(t1).filter(identity=c.identity).exists()
assert not Quota.objects.current.filter(identity=c.identity).exists()

View File

@@ -138,6 +138,23 @@ def test_wrong_event_permission(client, env, perm, url, code):
assert response.status_code == 403
@pytest.mark.django_db
def test_current_permission(client, env):
ep = EventPermission(
event=env[0], user=env[1],
)
setattr(ep, 'can_change_settings', True)
ep.save()
client.login(identifier='dummy@dummy.dummy', password='dummy')
response = client.get('/control/event/dummy/dummy/settings/')
assert response.status_code == 200
ep = ep.clone()
setattr(ep, 'can_change_settings', False)
ep.save()
response = client.get('/control/event/dummy/dummy/settings/')
assert response.status_code == 403
@pytest.mark.django_db
@pytest.mark.parametrize("perm,url,code", event_permission_urls)
def test_correct_event_permission(client, env, perm, url, code):

View File

@@ -1,3 +1,4 @@
from django.utils.timezone import now
from pretix.base.models import User
from tests.base import BrowserTest