More tests for settings

This commit is contained in:
Raphael Michel
2015-03-14 00:06:05 +01:00
parent a78f447750
commit 38e0233f60
4 changed files with 161 additions and 72 deletions

View File

@@ -41,14 +41,14 @@ class BasePaymentProvider:
""" """
A human-readable name for this payment provider A human-readable name for this payment provider
""" """
raise NotImplementedError raise NotImplementedError() # NOQA
@property @property
def identifier(self) -> str: def identifier(self) -> str:
""" """
A unique identifier for this payment provider A unique identifier for this payment provider
""" """
raise NotImplementedError() raise NotImplementedError() # NOQA
@property @property
def settings_form_fields(self) -> dict: def settings_form_fields(self) -> dict:
@@ -58,7 +58,7 @@ class BasePaymentProvider:
We suggest returning a collections.OrderedDict object instead of a dict. We suggest returning a collections.OrderedDict object instead of a dict.
""" """
raise NotImplementedError() raise NotImplementedError() # NOQA
@property @property
def checkout_form_fields(self) -> dict: def checkout_form_fields(self) -> dict:
@@ -103,7 +103,7 @@ class BasePaymentProvider:
Returns the HTML that should be displayed when the user selected this provider Returns the HTML that should be displayed when the user selected this provider
on the 'confirm order' page. on the 'confirm order' page.
""" """
raise NotImplementedError() raise NotImplementedError() # NOQA
def checkout_prepare(self, request, total) -> "bool|HttpResponse": def checkout_prepare(self, request, total) -> "bool|HttpResponse":
""" """
@@ -134,7 +134,7 @@ class BasePaymentProvider:
True, if the user's session is valid and all data your payment provider requires True, if the user's session is valid and all data your payment provider requires
in future steps is present. in future steps is present.
""" """
raise NotImplementedError() raise NotImplementedError() # NOQA
def checkout_perform(self, request, order) -> str: def checkout_perform(self, request, order) -> str:
""" """
@@ -162,7 +162,7 @@ class BasePaymentProvider:
:param order: The order object :param order: The order object
""" """
raise NotImplementedError() raise NotImplementedError() # NOQA
def order_paid_render(self, request, order) -> str: def order_paid_render(self, request, order) -> str:
""" """

View File

@@ -35,6 +35,9 @@ class SettingsProxy:
self._cached_obj[setting.key] = setting self._cached_obj[setting.key] = setting
return self._cached_obj return self._cached_obj
def _flush(self):
self._cached_obj = None
def _unserialize(self, value, as_type): def _unserialize(self, value, as_type):
if isinstance(value, as_type): if isinstance(value, as_type):
return value return value
@@ -62,7 +65,7 @@ class SettingsProxy:
elif isinstance(value, int) or isinstance(value, float) \ elif isinstance(value, int) or isinstance(value, float) \
or isinstance(value, bool) or isinstance(value, decimal.Decimal): or isinstance(value, bool) or isinstance(value, decimal.Decimal):
return str(value) return str(value)
elif isinstance(value, list) or isinstance(value, bool): elif isinstance(value, list) or isinstance(value, dict):
return json.dumps(value) return json.dumps(value)
elif isinstance(value, Versionable): elif isinstance(value, Versionable):
return value.identity return value.identity

View File

@@ -7,7 +7,6 @@ from pretix.base.models import (
Property, PropertyValue, User, Quota, Property, PropertyValue, User, Quota,
Order, OrderPosition, CartPosition) Order, OrderPosition, CartPosition)
from pretix.base.types import VariationDict from pretix.base.types import VariationDict
from pretix.base import settings
class ItemVariationsTest(TestCase): class ItemVariationsTest(TestCase):
@@ -294,67 +293,3 @@ class QuotaTestCase(TestCase):
quota2.size = 0 quota2.size = 0
quota2.save() quota2.save()
self.assertEqual(self.item1.check_quotas(), (Quota.AVAILABILITY_GONE, 0)) self.assertEqual(self.item1.check_quotas(), (Quota.AVAILABILITY_GONE, 0))
class SettingsTestCase(TestCase):
def setUp(self):
settings.DEFAULTS['test_default'] = 'def'
self.organizer = Organizer.objects.create(name='Dummy', slug='dummy')
self.event = Event.objects.create(
organizer=self.organizer, name='Dummy', slug='dummy',
date_from=now(),
)
def test_event_set_explicit(self):
self.event.settings.test = 'foo'
self.assertEqual(self.event.settings.test, 'foo')
# Reload object
self.event = Event.objects.get(identity=self.event.identity)
self.assertEqual(self.event.settings.test, 'foo')
def test_event_set_on_organizer(self):
self.organizer.settings.test = 'foo'
self.assertEqual(self.organizer.settings.test, 'foo')
self.assertEqual(self.event.settings.test, 'foo')
# Reload object
self.organizer = Organizer.objects.get(identity=self.organizer.identity)
self.event = Event.objects.get(identity=self.event.identity)
self.assertEqual(self.organizer.settings.test, 'foo')
self.assertEqual(self.event.settings.test, 'foo')
def test_override_organizer(self):
self.organizer.settings.test = 'foo'
self.event.settings.test = 'bar'
self.assertEqual(self.organizer.settings.test, 'foo')
self.assertEqual(self.event.settings.test, 'bar')
# Reload object
self.organizer = Organizer.objects.get(identity=self.organizer.identity)
self.event = Event.objects.get(identity=self.event.identity)
self.assertEqual(self.organizer.settings.test, 'foo')
self.assertEqual(self.event.settings.test, 'bar')
def test_default(self):
self.assertEqual(self.organizer.settings.test_default, 'def')
self.assertEqual(self.event.settings.test_default, 'def')
def test_delete(self):
self.organizer.settings.test = 'foo'
self.event.settings.test = 'bar'
self.assertEqual(self.organizer.settings.test, 'foo')
self.assertEqual(self.event.settings.test, 'bar')
del self.event.settings.test
self.assertEqual(self.event.settings.test, 'foo')
self.event = Event.objects.get(identity=self.event.identity)
self.assertEqual(self.event.settings.test, 'foo')
del self.organizer.settings.test
self.assertIsNone(self.organizer.settings.test)
self.organizer = Organizer.objects.get(identity=self.organizer.identity)
self.assertIsNone(self.organizer.settings.test)

View File

@@ -0,0 +1,151 @@
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 import settings
from pretix.base.settings import SettingsSandbox
class SettingsTestCase(TestCase):
def setUp(self):
settings.DEFAULTS['test_default'] = 'def'
self.organizer = Organizer.objects.create(name='Dummy', slug='dummy')
self.event = Event.objects.create(
organizer=self.organizer, name='Dummy', slug='dummy',
date_from=now(),
)
def test_event_set_explicit(self):
self.event.settings.test = 'foo'
self.assertEqual(self.event.settings.test, 'foo')
# Reload object
self.event = Event.objects.get(identity=self.event.identity)
self.assertEqual(self.event.settings.test, 'foo')
def test_event_set_twice(self):
self.event.settings.test = 'bar'
self.event.settings.test = 'foo'
self.assertEqual(self.event.settings.test, 'foo')
# Reload object
self.event = Event.objects.get(identity=self.event.identity)
self.assertEqual(self.event.settings.test, 'foo')
def test_event_set_on_organizer(self):
self.organizer.settings.test = 'foo'
self.assertEqual(self.organizer.settings.test, 'foo')
self.assertEqual(self.event.settings.test, 'foo')
# Reload object
self.organizer = Organizer.objects.get(identity=self.organizer.identity)
self.event = Event.objects.get(identity=self.event.identity)
self.assertEqual(self.organizer.settings.test, 'foo')
self.assertEqual(self.event.settings.test, 'foo')
def test_override_organizer(self):
self.organizer.settings.test = 'foo'
self.event.settings.test = 'bar'
self.assertEqual(self.organizer.settings.test, 'foo')
self.assertEqual(self.event.settings.test, 'bar')
# Reload object
self.organizer = Organizer.objects.get(identity=self.organizer.identity)
self.event = Event.objects.get(identity=self.event.identity)
self.assertEqual(self.organizer.settings.test, 'foo')
self.assertEqual(self.event.settings.test, 'bar')
def test_default(self):
self.assertEqual(self.organizer.settings.test_default, 'def')
self.assertEqual(self.event.settings.test_default, 'def')
self.assertEqual(self.event.settings.get('nonexistant', default='abc'), 'abc')
def test_item_access(self):
self.event.settings['foo'] = 'abc'
self.assertEqual(self.event.settings['foo'], 'abc')
del self.event.settings['foo']
self.assertIsNone(self.event.settings['foo'])
def test_delete(self):
self.organizer.settings.test = 'foo'
self.event.settings.test = 'bar'
self.assertEqual(self.organizer.settings.test, 'foo')
self.assertEqual(self.event.settings.test, 'bar')
del self.event.settings.test
self.assertEqual(self.event.settings.test, 'foo')
self.event = Event.objects.get(identity=self.event.identity)
self.assertEqual(self.event.settings.test, 'foo')
del self.organizer.settings.test
self.assertIsNone(self.organizer.settings.test)
self.organizer = Organizer.objects.get(identity=self.organizer.identity)
self.assertIsNone(self.organizer.settings.test)
def test_serialize_str(self):
self._test_serialization('ABC', as_type=str)
def test_serialize_float(self):
self._test_serialization(2.3, float)
def test_serialize_int(self):
self._test_serialization(2, int)
def test_serialize_decimal(self):
self._test_serialization(Decimal('2.3'), Decimal)
def test_serialize_dict(self):
self._test_serialization({'a': 'b', 'c': 'd'}, dict)
def test_serialize_list(self):
self._test_serialization([1, 2, 'a'], list)
def test_serialize_bool(self):
self._test_serialization(True, bool)
self._test_serialization(False, bool)
def test_serialize_versionable(self):
self._test_serialization(self.event, Event)
def test_serialize_model(self):
self._test_serialization(User.objects.create_local_user(self.event, 'dummy', 'dummy'), User)
def test_serialize_unknown(self):
class Type:
pass
try:
self._test_serialization(Type(), Type)
self.assertTrue(False, 'No exception thrown!')
except TypeError:
pass
def _test_serialization(self, val, as_type):
self.event.settings.set('test', val)
self.event.settings._flush()
self.assertEqual(self.event.settings.get('test', as_type=as_type), val)
self.assertIsInstance(self.event.settings.get('test', as_type=as_type), as_type)
def test_sandbox(self):
sandbox = SettingsSandbox('testing', 'foo', self.event)
sandbox.set('foo', 'bar')
self.assertEqual(sandbox.get('foo'), 'bar')
self.assertEqual(self.event.settings.get('testing_foo_foo'), 'bar')
self.assertIsNone(self.event.settings.get('foo'), 'bar')
sandbox['bar'] = 'baz'
sandbox.baz = 42
self.event = Event.objects.get(identity=self.event.identity)
sandbox = SettingsSandbox('testing', 'foo', self.event)
self.assertEqual(sandbox['bar'], 'baz')
self.assertEqual(sandbox.baz, '42')
del sandbox.baz
del sandbox['bar']
self.assertIsNone(sandbox.bar)
self.assertIsNone(sandbox['baz'])