forked from CGM_Public/pretix_original
Merge branch 'master' of github.com:pretix/pretix
This commit is contained in:
@@ -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',
|
||||
),
|
||||
]
|
||||
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user