| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- from django.contrib.auth.models import User
- from django.test import TestCase
- from users.models import UserConfig
- class UserConfigTest(TestCase):
- def setUp(self):
- user = User.objects.create_user(username='testuser')
- user.config.data = {
- 'a': True,
- 'b': {
- 'foo': 101,
- 'bar': 102,
- },
- 'c': {
- 'foo': {
- 'x': 201,
- },
- 'bar': {
- 'y': 202,
- },
- 'baz': {
- 'z': 203,
- }
- }
- }
- user.config.save()
- self.userconfig = user.config
- def test_get(self):
- userconfig = self.userconfig
- # Retrieve root and nested values
- self.assertEqual(userconfig.get('a'), True)
- self.assertEqual(userconfig.get('b.foo'), 101)
- self.assertEqual(userconfig.get('c.baz.z'), 203)
- # Invalid values should return None
- self.assertIsNone(userconfig.get('invalid'))
- self.assertIsNone(userconfig.get('a.invalid'))
- self.assertIsNone(userconfig.get('b.foo.invalid'))
- self.assertIsNone(userconfig.get('b.foo.x.invalid'))
- # Invalid values with a provided default should return the default
- self.assertEqual(userconfig.get('invalid', 'DEFAULT'), 'DEFAULT')
- self.assertEqual(userconfig.get('a.invalid', 'DEFAULT'), 'DEFAULT')
- self.assertEqual(userconfig.get('b.foo.invalid', 'DEFAULT'), 'DEFAULT')
- self.assertEqual(userconfig.get('b.foo.x.invalid', 'DEFAULT'), 'DEFAULT')
- def test_all(self):
- userconfig = self.userconfig
- flattened_data = {
- 'a': True,
- 'b.foo': 101,
- 'b.bar': 102,
- 'c.foo.x': 201,
- 'c.bar.y': 202,
- 'c.baz.z': 203,
- }
- # Retrieve a flattened dictionary containing all config data
- self.assertEqual(userconfig.all(), flattened_data)
- def test_set(self):
- userconfig = self.userconfig
- # Overwrite existing values
- userconfig.set('a', 'abc')
- userconfig.set('c.foo.x', 'abc')
- self.assertEqual(userconfig.data['a'], 'abc')
- self.assertEqual(userconfig.data['c']['foo']['x'], 'abc')
- # Create new values
- userconfig.set('d', 'abc')
- userconfig.set('b.baz', 'abc')
- self.assertEqual(userconfig.data['d'], 'abc')
- self.assertEqual(userconfig.data['b']['baz'], 'abc')
- # Set a value and commit to the database
- userconfig.set('a', 'def', commit=True)
- userconfig.refresh_from_db()
- self.assertEqual(userconfig.data['a'], 'def')
- # Attempt to change a branch node to a leaf node
- with self.assertRaises(TypeError):
- userconfig.set('b', 1)
- # Attempt to change a leaf node to a branch node
- with self.assertRaises(TypeError):
- userconfig.set('a.x', 1)
- def test_clear(self):
- userconfig = self.userconfig
- # Clear existing values
- userconfig.clear('a')
- userconfig.clear('b.foo')
- self.assertTrue('a' not in userconfig.data)
- self.assertTrue('foo' not in userconfig.data['b'])
- self.assertEqual(userconfig.data['b']['bar'], 102)
- # Clear an invalid value
- with self.assertRaises(KeyError):
- userconfig.clear('invalid')
|