diff --git a/src/pretix/base/migrations/0011_remove_event_max_items_per_order.py b/src/pretix/base/migrations/0011_remove_event_max_items_per_order.py new file mode 100644 index 000000000..898f55eb9 --- /dev/null +++ b/src/pretix/base/migrations/0011_remove_event_max_items_per_order.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('pretixbase', '0010_auto_20150218_2048'), + ] + + operations = [ + migrations.RemoveField( + model_name='event', + name='max_items_per_order', + ), + ] diff --git a/src/pretix/base/models.py b/src/pretix/base/models.py index 9abc8c200..79420f4a0 100644 --- a/src/pretix/base/models.py +++ b/src/pretix/base/models.py @@ -415,10 +415,6 @@ class Event(Versionable): null=True, blank=True, verbose_name=_("Plugins"), ) - max_items_per_order = models.IntegerField( - verbose_name=_("Maximum number of items per order"), - default=10 - ) class Meta: verbose_name = _("Event") @@ -1223,7 +1219,6 @@ class Quota(Versionable): # TODO: Test for interference with old versions of Item-Quota-relations, etc. # TODO: Prevent corner-cases like people having ordered an item before it got # its first variationsadded - cache = self.event.get_cache() quotalookup = ( ( # Orders for items which do not have any variations Q(variation__isnull=True) @@ -1233,13 +1228,10 @@ class Quota(Versionable): ) ) - paid_orders = cache.get('quota_paid_%s' % self.identity) - if paid_orders is None: - paid_orders = OrderPosition.objects.current.filter( - Q(order__status=Order.STATUS_PAID) - & quotalookup - ).count() - cache.set('quota_paid_%s' % self.identity, paid_orders) + paid_orders = OrderPosition.objects.current.filter( + Q(order__status=Order.STATUS_PAID) + & quotalookup + ).count() if paid_orders >= self.size: return Quota.AVAILABILITY_GONE, 0 @@ -1304,7 +1296,6 @@ class Quota(Versionable): ) self.locked_here = None self.locked = None - self.event.get_cache().delete('quota_paid_%s' % self.identity) return updated @@ -1488,7 +1479,8 @@ class OrganizerSetting(Versionable): organizer. It will be inherited by the events of this organizer """ DEFAULTS = { - 'user_mail_required': 'False' + 'user_mail_required': 'False', + 'max_items_per_order': '10' } organizer = VersionedForeignKey(Organizer, related_name='setting_objects') key = models.CharField(max_length=255) diff --git a/src/pretix/base/tests/__init__.py b/src/pretix/base/tests/__init__.py index c2a580227..dfc720572 100644 --- a/src/pretix/base/tests/__init__.py +++ b/src/pretix/base/tests/__init__.py @@ -1,60 +1,14 @@ import os import sys +import time from django.contrib.staticfiles.testing import StaticLiveServerTestCase from django.conf import settings from selenium import webdriver -RUN_LOCAL = ('SAUCE_USERNAME' not in os.environ) -""" -For a long time, we used SauceLabs for CI testing, because they provide free -browser VMs for Open Source projects. However, more tests failed because of -connection timeouts to SauceLabs than for real reasons, so we're using -PhantomJS now. However, we'll keep the SauceClient code here as it might prove -useful some day. -""" -if RUN_LOCAL: - # could add Chrome, Firefox, etc... here - BROWSERS = [os.environ.get('TEST_BROWSER', 'PhantomJS')] -else: - from sauceclient import SauceClient - USERNAME = os.environ.get('SAUCE_USERNAME') - ACCESS_KEY = os.environ.get('SAUCE_ACCESS_KEY') - sauce = SauceClient(USERNAME, ACCESS_KEY) - - BROWSERS = [ - {"platform": "Mac OS X 10.9", - "browserName": "chrome", - "version": "35"}, - {"platform": "Windows 8.1", - "browserName": "internet explorer", - "version": "11"}, - {"platform": "Linux", - "browserName": "firefox", - "version": "29"}] - - -def on_platforms(): - if RUN_LOCAL: - def decorator(base_class): - module = sys.modules[base_class.__module__].__dict__ - for i, platform in enumerate(BROWSERS): - d = dict(base_class.__dict__) - d['browser'] = platform - name = "%s_%s" % (base_class.__name__, i + 1) - module[name] = type(name, (base_class,), d) - pass - return decorator - - def decorator(base_class): - module = sys.modules[base_class.__module__].__dict__ - for i, platform in enumerate(BROWSERS): - d = dict(base_class.__dict__) - d['desired_capabilities'] = platform - name = "%s_%s" % (base_class.__name__, i + 1) - module[name] = type(name, (base_class,), d) - return decorator +# could use Chrome, Firefox, etc... here +BROWSER = os.environ.get('TEST_BROWSER', 'PhantomJS') class BrowserTest(StaticLiveServerTestCase): @@ -64,48 +18,19 @@ class BrowserTest(StaticLiveServerTestCase): settings.DEBUG = ('--debug' in sys.argv) def setUp(self): - if RUN_LOCAL: - self.setUpLocal() - else: - self.setUpSauce() + self.driver = getattr(webdriver, BROWSER)() + self.driver.set_window_size(1920, 1080) + self.driver.implicitly_wait(10) def tearDown(self): - if RUN_LOCAL: - self.tearDownLocal() - else: - self.tearDownSauce() - - def setUpSauce(self): - if 'TRAVIS_JOB_NUMBER' in os.environ: - self.desired_capabilities['tunnel-identifier'] = \ - os.environ['TRAVIS_JOB_NUMBER'] - self.desired_capabilities['build'] = os.environ['TRAVIS_BUILD_NUMBER'] - self.desired_capabilities['tags'] = \ - [os.environ['TRAVIS_PYTHON_VERSION'], 'CI'] - self.desired_capabilities['name'] = self.id() - - sauce_url = "http://%s:%s@ondemand.saucelabs.com:80/wd/hub" - self.driver = webdriver.Remote( - desired_capabilities=self.desired_capabilities, - command_executor=sauce_url % (USERNAME, ACCESS_KEY) - ) - self.driver.implicitly_wait(5) - - def setUpLocal(self): - self.driver = getattr(webdriver, self.browser)() - self.driver.set_window_size(1920, 1080) - self.driver.implicitly_wait(3) - - def tearDownLocal(self): self.driver.quit() - def tearDownSauce(self): - print("\nLink to your job: \n " - "https://saucelabs.com/jobs/%s \n" % self.driver.session_id) - try: - if sys.exc_info() == (None, None, None): - sauce.jobs.update_job(self.driver.session_id, passed=True) - else: - sauce.jobs.update_job(self.driver.session_id, passed=False) - finally: - self.driver.quit() + def scroll_into_view(self, element): + """Scroll element into view""" + y = element.location['y'] + self.driver.execute_script('window.scrollTo(0, {0})'.format(y)) + + def scroll_and_click(self, element): + self.scroll_into_view(element) + time.sleep(0.5) + element.click() diff --git a/src/pretix/control/templates/pretixcontrol/event/settings.html b/src/pretix/control/templates/pretixcontrol/event/settings.html index 2ad320aae..cce15645e 100644 --- a/src/pretix/control/templates/pretixcontrol/event/settings.html +++ b/src/pretix/control/templates/pretixcontrol/event/settings.html @@ -28,7 +28,6 @@ {% bootstrap_field form.presale_start layout="horizontal" %} {% bootstrap_field form.presale_end layout="horizontal" %} - {% bootstrap_field form.max_items_per_order layout="horizontal" %}