From 96dd4e02f353acb9895d6505119a260cb3e6ce16 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Sat, 7 Oct 2017 17:19:12 +0200 Subject: [PATCH] Add tests for style generation and propagated settings --- src/tests/control/test_events.py | 31 ++++++ src/tests/control/test_organizer.py | 60 ++++++++++++ src/tests/control/test_permissions.py | 2 + src/tests/presale/test_style.py | 130 ++++++++++++++++++++++++++ 4 files changed, 223 insertions(+) create mode 100644 src/tests/control/test_organizer.py create mode 100644 src/tests/presale/test_style.py diff --git a/src/tests/control/test_events.py b/src/tests/control/test_events.py index 362a81172a..2cdcf82795 100644 --- a/src/tests/control/test_events.py +++ b/src/tests/control/test_events.py @@ -229,6 +229,37 @@ class EventsTest(SoupTest): assert self.event1.settings.get('primary_color') == '#FF0000' mocked.assert_any_call(args=(self.event1.pk,)) + def test_display_settings_do_not_override_parent(self): + self.orga1.settings.primary_color = '#ff00ff' + with mocker_context() as mocker: + mocked = mocker.patch('pretix.presale.style.regenerate_css.apply_async') + + doc = self.get_doc('/control/event/%s/%s/settings/display' % (self.orga1.slug, self.event1.slug)) + data = extract_form_fields(doc.select("form")[0]) + doc = self.post_doc('/control/event/%s/%s/settings/display' % (self.orga1.slug, self.event1.slug), + data, follow=True) + assert doc.select('.alert-success') + self.event1.settings.flush() + assert 'primary_color' not in self.event1.settings._cache() + assert self.event1.settings.primary_color == self.orga1.settings.primary_color + mocked.assert_any_call(args=(self.event1.pk,)) + + def test_display_settings_explicitly_override_parent(self): + self.orga1.settings.primary_color = '#ff00ff' + with mocker_context() as mocker: + mocked = mocker.patch('pretix.presale.style.regenerate_css.apply_async') + + doc = self.get_doc('/control/event/%s/%s/settings/display' % (self.orga1.slug, self.event1.slug)) + data = extract_form_fields(doc.select("form")[0]) + data['decouple'] = 'primary_color' + doc = self.post_doc('/control/event/%s/%s/settings/display' % (self.orga1.slug, self.event1.slug), + data, follow=True) + assert doc.select('.alert-success') + self.event1.settings.flush() + assert 'primary_color' in self.event1.settings._cache() + assert self.event1.settings.primary_color == self.orga1.settings.primary_color + mocked.assert_any_call(args=(self.event1.pk,)) + def test_email_settings(self): with mocker_context() as mocker: mocked = mocker.patch('pretix.base.email.CustomSMTPBackend.test') diff --git a/src/tests/control/test_organizer.py b/src/tests/control/test_organizer.py new file mode 100644 index 0000000000..11e9425458 --- /dev/null +++ b/src/tests/control/test_organizer.py @@ -0,0 +1,60 @@ +import datetime + +from tests.base import SoupTest, extract_form_fields + +from pretix.base.models import Event, Organizer, Team, User + + +class OrganizerTest(SoupTest): + def setUp(self): + super().setUp() + self.user = User.objects.create_user('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), + plugins='pretix.plugins.banktransfer,tests.testdummy' + ) + + t = Team.objects.create(organizer=self.orga1, can_create_events=True, can_change_event_settings=True, + can_change_items=True, can_change_organizer_settings=True) + t.members.add(self.user) + t.limit_events.add(self.event1) + + self.client.login(email='dummy@dummy.dummy', password='dummy') + + def test_organizer_list(self): + doc = self.get_doc('/control/organizers/') + tabletext = doc.select("#page-wrapper .table")[0].text + self.assertIn("CCC", tabletext) + self.assertNotIn("MRM", tabletext) + + def test_organizer_detail(self): + doc = self.get_doc('/control/organizer/ccc/') + tabletext = doc.select("#page-wrapper .table")[0].text + self.assertIn("30C3", tabletext) + + def test_organizer_settings(self): + doc = self.get_doc('/control/organizer/%s/edit' % (self.orga1.slug,)) + doc.select("[name=name]")[0]['value'] = "CCC e.V." + + doc = self.post_doc('/control/organizer/%s/edit' % (self.orga1.slug,), + extract_form_fields(doc.select('.container-fluid form')[0])) + assert len(doc.select(".alert-success")) > 0 + assert doc.select("[name=name]")[0]['value'] == "CCC e.V." + self.orga1.refresh_from_db() + assert self.orga1.name == "CCC e.V." + + def test_organizer_display_settings(self): + assert not self.orga1.settings.presale_css_checksum + doc = self.get_doc('/control/organizer/%s/settings/display' % (self.orga1.slug,)) + doc.select("[name=primary_color]")[0]['value'] = "#33c33c" + + doc = self.post_doc('/control/organizer/%s/settings/display' % (self.orga1.slug,), + extract_form_fields(doc.select('.container-fluid form')[0])) + assert len(doc.select(".alert-success")) > 0 + assert doc.select("[name=primary_color]")[0]['value'] == "#33c33c" + self.orga1.settings.flush() + assert self.orga1.settings.primary_color == "#33c33c" + assert self.orga1.settings.presale_css_checksum diff --git a/src/tests/control/test_permissions.py b/src/tests/control/test_permissions.py index 4af204d533..8f823257d4 100644 --- a/src/tests/control/test_permissions.py +++ b/src/tests/control/test_permissions.py @@ -96,6 +96,7 @@ event_urls = [ organizer_urls = [ 'organizer/abc/edit', 'organizer/abc/', + 'organizer/abc/settings/display', 'organizer/abc/teams', 'organizer/abc/team/1/', 'organizer/abc/team/1/edit', @@ -316,6 +317,7 @@ organizer_permission_urls = [ ("can_change_teams", "organizer/dummy/team/1/edit", 200), ("can_change_teams", "organizer/dummy/team/1/delete", 200), ("can_change_organizer_settings", "organizer/dummy/edit", 200), + ("can_change_organizer_settings", "organizer/dummy/settings/display", 200), ] diff --git a/src/tests/presale/test_style.py b/src/tests/presale/test_style.py new file mode 100644 index 0000000000..ff0fc712ed --- /dev/null +++ b/src/tests/presale/test_style.py @@ -0,0 +1,130 @@ +import datetime +import os.path + +from django.conf import settings +from django.test import TestCase, override_settings + +from pretix.base.models import Event, Organizer +from pretix.multidomain.models import KnownDomain +from pretix.presale.style import regenerate_css, regenerate_organizer_css + + +class StyleTest(TestCase): + def setUp(self): + super().setUp() + self.orga = Organizer.objects.create(name='CCC', slug='ccc') + self.event = Event.objects.create( + organizer=self.orga, name='30C3', slug='30c3', + date_from=datetime.datetime(2013, 12, 26, tzinfo=datetime.timezone.utc), + live=True + ) + + def test_organizer_generate_css_for_inherited_events(self): + self.orga.settings.primary_color = "#33c33c" + regenerate_organizer_css.apply(args=(self.orga.pk,)) + self.orga.settings.flush() + assert self.orga.settings.presale_css_file + with open(os.path.join(settings.MEDIA_ROOT, self.orga.settings.presale_css_file), 'r') as c: + assert '#33c33c' in c.read() + + self.event.settings.flush() + assert self.event.settings.presale_css_file + with open(os.path.join(settings.MEDIA_ROOT, self.event.settings.presale_css_file), 'r') as c: + assert '#33c33c' in c.read() + + def test_organizer_generate_css_only_for_inherited_events(self): + self.orga.settings.primary_color = "#33c33c" + self.event.settings.primary_color = "#34c34c" + regenerate_organizer_css.apply(args=(self.orga.pk,)) + self.orga.settings.flush() + assert self.orga.settings.presale_css_file + with open(os.path.join(settings.MEDIA_ROOT, self.orga.settings.presale_css_file), 'r') as c: + assert '#33c33c' in c.read() + + self.event.settings.flush() + assert self.event.settings.presale_css_file + with open(os.path.join(settings.MEDIA_ROOT, self.event.settings.presale_css_file), 'r') as c: + assert '#34c34c' not in c.read() + assert '#33c33c' not in c.read() + + def test_event_generate_css_individually(self): + self.orga.settings.primary_color = "#33c33c" + self.event.settings.primary_color = "#34c34c" + regenerate_css.apply(args=(self.event.pk,)) + + self.event.settings.flush() + assert self.event.settings.presale_css_file + with open(os.path.join(settings.MEDIA_ROOT, self.event.settings.presale_css_file), 'r') as c: + assert '#34c34c' in c.read() + assert '#33c33c' not in c.read() + + regenerate_organizer_css.apply(args=(self.orga.pk,)) + + self.event.settings.flush() + assert self.event.settings.presale_css_file + with open(os.path.join(settings.MEDIA_ROOT, self.event.settings.presale_css_file), 'r') as c: + assert '#34c34c' in c.read() + assert '#33c33c' not in c.read() + + def test_event_generate_css_new_file(self): + self.event.settings.primary_color = "#34c34c" + regenerate_css.apply(args=(self.event.pk,)) + + self.event.settings.flush() + fname = self.event.settings.presale_css_file + + self.event.settings.primary_color = "#ff00ff" + regenerate_css.apply(args=(self.event.pk,)) + self.event.settings.flush() + assert self.event.settings.presale_css_file != fname + + def test_event_generate_css_cache_file(self): + self.event.settings.primary_color = "#34c34c" + regenerate_css.apply(args=(self.event.pk,)) + + self.event.settings.flush() + fname = self.event.settings.presale_css_file + + self.event.settings.primary_color = "#34c34c" + regenerate_css.apply(args=(self.event.pk,)) + self.event.settings.flush() + assert self.event.settings.presale_css_file == fname + + @override_settings( + MEDIA_URL="https://usercontent.pretix.space/media/", + SITE_URL="https://pretix.eu" + ) + def test_seperate_media_domain(self): + self.event.settings.primary_color = "#34c34c" + regenerate_css.apply(args=(self.event.pk,)) + self.event.settings.flush() + with open(os.path.join(settings.MEDIA_ROOT, self.event.settings.presale_css_file), 'r') as c: + assert 'https://pretix.eu/static/' in c.read() + + @override_settings( + MEDIA_URL="https://usercontent.pretix.space/media/", + SITE_URL="https://pretix.eu" + ) + def test_seperate_media_domain_and_organizer_domain(self): + KnownDomain.objects.create(domainname="test.pretix.eu", organizer=self.orga) + + self.event.settings.primary_color = "#34c34c" + regenerate_css.apply(args=(self.event.pk,)) + self.event.settings.flush() + with open(os.path.join(settings.MEDIA_ROOT, self.event.settings.presale_css_file), 'r') as c: + assert 'https://test.pretix.eu/static/' in c.read() + + @override_settings( + STATIC_URL="https://static.pretix.files/static/", + MEDIA_URL="https://usercontent.pretix.space/media/", + SITE_URL="https://pretix.eu" + ) + def test_seperate_media_domain_and_static_domain(self): + KnownDomain.objects.create(domainname="test.pretix.eu", organizer=self.orga) + + self.event.settings.primary_color = "#34c34c" + regenerate_css.apply(args=(self.event.pk,)) + self.event.settings.flush() + with open(os.path.join(settings.MEDIA_ROOT, self.event.settings.presale_css_file), 'r') as c: + assert 'https://static.pretix.files/static/' in c.read() + assert 'https://test.pretix.eu/static/' not in c.read()