From 2a8b3cbfa9d3e4079815bf7a5488a9cab9789507 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Sun, 21 Jun 2015 22:26:50 +0200 Subject: [PATCH] Added checks for data versioning within the existing tests --- src/tests/base/test_settings.py | 12 +++++++-- src/tests/control/test_events.py | 8 ++++++ src/tests/control/test_items.py | 35 +++++++++++++++++++++++++-- src/tests/control/test_permissions.py | 17 +++++++++++++ src/tests/control/test_user.py | 1 + 5 files changed, 69 insertions(+), 4 deletions(-) diff --git a/src/tests/base/test_settings.py b/src/tests/base/test_settings.py index bbbfa411b..1aaaf024c 100644 --- a/src/tests/base/test_settings.py +++ b/src/tests/base/test_settings.py @@ -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' diff --git a/src/tests/control/test_events.py b/src/tests/control/test_events.py index ca93c7520..64d26fa2f 100644 --- a/src/tests/control/test_events.py +++ b/src/tests/control/test_events.py @@ -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, diff --git a/src/tests/control/test_items.py b/src/tests/control/test_items.py index c7a17ed1a..be2da1642 100644 --- a/src/tests/control/test_items.py +++ b/src/tests/control/test_items.py @@ -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() diff --git a/src/tests/control/test_permissions.py b/src/tests/control/test_permissions.py index fb8e28abd..be6069ac7 100644 --- a/src/tests/control/test_permissions.py +++ b/src/tests/control/test_permissions.py @@ -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): diff --git a/src/tests/control/test_user.py b/src/tests/control/test_user.py index 9c46429bd..33ea31d7a 100644 --- a/src/tests/control/test_user.py +++ b/src/tests/control/test_user.py @@ -1,3 +1,4 @@ +from django.utils.timezone import now from pretix.base.models import User from tests.base import BrowserTest