2024-07-03 14:21:33 +00:00
|
|
|
from datetime import date
|
|
|
|
|
from datetime import datetime
|
|
|
|
|
from datetime import time
|
|
|
|
|
from datetime import timedelta
|
2010-09-03 12:38:43 +00:00
|
|
|
from decimal import Decimal
|
2016-09-14 17:21:16 +00:00
|
|
|
|
2020-06-10 17:49:42 +00:00
|
|
|
from constance import settings
|
2016-09-14 17:21:16 +00:00
|
|
|
from constance.base import Config
|
|
|
|
|
|
2010-08-25 12:55:01 +00:00
|
|
|
|
2019-12-23 21:20:41 +00:00
|
|
|
class StorageTestsMixin:
|
2014-11-21 15:37:12 +00:00
|
|
|
def setUp(self):
|
|
|
|
|
self.config = Config()
|
2019-12-23 21:20:41 +00:00
|
|
|
super().setUp()
|
2014-11-21 15:37:12 +00:00
|
|
|
|
2010-08-25 12:55:01 +00:00
|
|
|
def test_store(self):
|
2014-11-21 15:37:12 +00:00
|
|
|
self.assertEqual(self.config.INT_VALUE, 1)
|
|
|
|
|
self.assertEqual(self.config.BOOL_VALUE, True)
|
2025-10-07 09:25:07 +00:00
|
|
|
self.assertEqual(self.config.STRING_VALUE, "Hello world")
|
|
|
|
|
self.assertEqual(self.config.DECIMAL_VALUE, Decimal("0.1"))
|
2014-11-21 15:37:12 +00:00
|
|
|
self.assertEqual(self.config.DATETIME_VALUE, datetime(2010, 8, 23, 11, 29, 24))
|
|
|
|
|
self.assertEqual(self.config.FLOAT_VALUE, 3.1415926536)
|
|
|
|
|
self.assertEqual(self.config.DATE_VALUE, date(2010, 12, 24))
|
|
|
|
|
self.assertEqual(self.config.TIME_VALUE, time(23, 59, 59))
|
2017-05-25 11:49:47 +00:00
|
|
|
self.assertEqual(self.config.TIMEDELTA_VALUE, timedelta(days=1, hours=2, minutes=3))
|
2025-10-07 09:25:07 +00:00
|
|
|
self.assertEqual(self.config.CHOICE_VALUE, "yes")
|
|
|
|
|
self.assertEqual(self.config.EMAIL_VALUE, "test@example.com")
|
|
|
|
|
self.assertEqual(self.config.LIST_VALUE, [1, "1", date(2019, 1, 1)])
|
2024-09-04 09:41:53 +00:00
|
|
|
self.assertEqual(
|
|
|
|
|
self.config.JSON_VALUE,
|
|
|
|
|
{
|
2025-10-07 09:25:07 +00:00
|
|
|
"key": "value",
|
|
|
|
|
"key2": 2,
|
|
|
|
|
"key3": [1, 2, 3],
|
|
|
|
|
"key4": {"key": "value"},
|
|
|
|
|
"key5": date(2019, 1, 1),
|
|
|
|
|
"key6": None,
|
2024-09-04 09:41:53 +00:00
|
|
|
},
|
|
|
|
|
)
|
2016-03-12 11:05:16 +00:00
|
|
|
|
2010-08-25 12:55:01 +00:00
|
|
|
# set values
|
2014-11-21 15:37:12 +00:00
|
|
|
self.config.INT_VALUE = 100
|
|
|
|
|
self.config.BOOL_VALUE = False
|
2025-10-07 09:25:07 +00:00
|
|
|
self.config.STRING_VALUE = "Beware the weeping angel"
|
|
|
|
|
self.config.DECIMAL_VALUE = Decimal("1.2")
|
2014-11-21 15:37:12 +00:00
|
|
|
self.config.DATETIME_VALUE = datetime(1977, 10, 2)
|
|
|
|
|
self.config.FLOAT_VALUE = 2.718281845905
|
|
|
|
|
self.config.DATE_VALUE = date(2001, 12, 20)
|
|
|
|
|
self.config.TIME_VALUE = time(1, 59, 0)
|
2017-05-25 11:49:47 +00:00
|
|
|
self.config.TIMEDELTA_VALUE = timedelta(days=2, hours=3, minutes=4)
|
2025-10-07 09:25:07 +00:00
|
|
|
self.config.CHOICE_VALUE = "no"
|
|
|
|
|
self.config.EMAIL_VALUE = "foo@bar.com"
|
2024-09-04 09:41:53 +00:00
|
|
|
self.config.LIST_VALUE = [1, date(2020, 2, 2)]
|
2025-10-07 09:25:07 +00:00
|
|
|
self.config.JSON_VALUE = {"key": "OK"}
|
2010-08-25 12:55:01 +00:00
|
|
|
|
|
|
|
|
# read again
|
2014-11-21 15:37:12 +00:00
|
|
|
self.assertEqual(self.config.INT_VALUE, 100)
|
|
|
|
|
self.assertEqual(self.config.BOOL_VALUE, False)
|
2025-10-07 09:25:07 +00:00
|
|
|
self.assertEqual(self.config.STRING_VALUE, "Beware the weeping angel")
|
|
|
|
|
self.assertEqual(self.config.DECIMAL_VALUE, Decimal("1.2"))
|
2014-11-21 15:37:12 +00:00
|
|
|
self.assertEqual(self.config.DATETIME_VALUE, datetime(1977, 10, 2))
|
|
|
|
|
self.assertEqual(self.config.FLOAT_VALUE, 2.718281845905)
|
|
|
|
|
self.assertEqual(self.config.DATE_VALUE, date(2001, 12, 20))
|
|
|
|
|
self.assertEqual(self.config.TIME_VALUE, time(1, 59, 0))
|
2017-05-25 11:49:47 +00:00
|
|
|
self.assertEqual(self.config.TIMEDELTA_VALUE, timedelta(days=2, hours=3, minutes=4))
|
2025-10-07 09:25:07 +00:00
|
|
|
self.assertEqual(self.config.CHOICE_VALUE, "no")
|
|
|
|
|
self.assertEqual(self.config.EMAIL_VALUE, "foo@bar.com")
|
2024-09-04 09:41:53 +00:00
|
|
|
self.assertEqual(self.config.LIST_VALUE, [1, date(2020, 2, 2)])
|
2025-10-07 09:25:07 +00:00
|
|
|
self.assertEqual(self.config.JSON_VALUE, {"key": "OK"})
|
2016-03-12 11:05:16 +00:00
|
|
|
|
2010-08-25 12:55:01 +00:00
|
|
|
def test_nonexistent(self):
|
2025-10-07 09:25:07 +00:00
|
|
|
self.assertRaises(AttributeError, getattr, self.config, "NON_EXISTENT")
|
2010-08-25 12:55:01 +00:00
|
|
|
|
2024-07-05 14:38:26 +00:00
|
|
|
with self.assertRaises(AttributeError):
|
2014-11-21 15:37:12 +00:00
|
|
|
self.config.NON_EXISTENT = 1
|
2010-11-12 13:38:18 +00:00
|
|
|
|
2013-02-22 13:58:41 +00:00
|
|
|
def test_missing_values(self):
|
2011-07-14 15:42:51 +00:00
|
|
|
# set some values and leave out others
|
2014-11-21 15:37:12 +00:00
|
|
|
self.config.BOOL_VALUE = False
|
2025-10-07 09:25:07 +00:00
|
|
|
self.config.DECIMAL_VALUE = Decimal("1.2")
|
2014-11-21 15:37:12 +00:00
|
|
|
self.config.DATETIME_VALUE = datetime(1977, 10, 2)
|
|
|
|
|
self.config.DATE_VALUE = date(2001, 12, 20)
|
|
|
|
|
self.config.TIME_VALUE = time(1, 59, 0)
|
2011-07-14 15:42:51 +00:00
|
|
|
|
2014-11-21 15:37:12 +00:00
|
|
|
self.assertEqual(self.config.INT_VALUE, 1) # this should be the default value
|
|
|
|
|
self.assertEqual(self.config.BOOL_VALUE, False)
|
2025-10-07 09:25:07 +00:00
|
|
|
self.assertEqual(self.config.STRING_VALUE, "Hello world") # this should be the default value
|
|
|
|
|
self.assertEqual(self.config.DECIMAL_VALUE, Decimal("1.2"))
|
2014-11-21 15:37:12 +00:00
|
|
|
self.assertEqual(self.config.DATETIME_VALUE, datetime(1977, 10, 2))
|
|
|
|
|
self.assertEqual(self.config.FLOAT_VALUE, 3.1415926536) # this should be the default value
|
|
|
|
|
self.assertEqual(self.config.DATE_VALUE, date(2001, 12, 20))
|
|
|
|
|
self.assertEqual(self.config.TIME_VALUE, time(1, 59, 0))
|
2017-05-25 11:49:47 +00:00
|
|
|
self.assertEqual(self.config.TIMEDELTA_VALUE, timedelta(days=1, hours=2, minutes=3))
|
2020-06-10 17:49:42 +00:00
|
|
|
|
|
|
|
|
def test_backend_retrieves_multiple_values(self):
|
|
|
|
|
# Check corner cases such as falsy values
|
|
|
|
|
self.config.INT_VALUE = 0
|
|
|
|
|
self.config.BOOL_VALUE = False
|
2025-10-07 09:25:07 +00:00
|
|
|
self.config.STRING_VALUE = ""
|
2020-06-10 17:49:42 +00:00
|
|
|
|
2026-03-11 14:58:20 +00:00
|
|
|
values = self.config._backend.mget(settings.CONFIG)
|
2025-10-07 09:25:07 +00:00
|
|
|
self.assertEqual(values["INT_VALUE"], 0)
|
|
|
|
|
self.assertEqual(values["BOOL_VALUE"], False)
|
|
|
|
|
self.assertEqual(values["STRING_VALUE"], "")
|
2020-06-10 17:49:42 +00:00
|
|
|
|
|
|
|
|
def test_backend_does_not_return_none_values(self):
|
2026-03-11 14:58:20 +00:00
|
|
|
result = self.config._backend.mget(settings.CONFIG)
|
2020-06-10 17:49:42 +00:00
|
|
|
self.assertEqual(result, {})
|