test_models.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. from django.contrib.auth.models import User
  2. from django.test import TestCase
  3. from users.models import UserConfig
  4. class UserConfigTest(TestCase):
  5. def setUp(self):
  6. user = User.objects.create_user(username='testuser')
  7. user.config.data = {
  8. 'a': True,
  9. 'b': {
  10. 'foo': 101,
  11. 'bar': 102,
  12. },
  13. 'c': {
  14. 'foo': {
  15. 'x': 201,
  16. },
  17. 'bar': {
  18. 'y': 202,
  19. },
  20. 'baz': {
  21. 'z': 203,
  22. }
  23. }
  24. }
  25. user.config.save()
  26. self.userconfig = user.config
  27. def test_get(self):
  28. userconfig = self.userconfig
  29. # Retrieve root and nested values
  30. self.assertEqual(userconfig.get('a'), True)
  31. self.assertEqual(userconfig.get('b.foo'), 101)
  32. self.assertEqual(userconfig.get('c.baz.z'), 203)
  33. # Invalid values should return None
  34. self.assertIsNone(userconfig.get('invalid'))
  35. self.assertIsNone(userconfig.get('a.invalid'))
  36. self.assertIsNone(userconfig.get('b.foo.invalid'))
  37. self.assertIsNone(userconfig.get('b.foo.x.invalid'))
  38. # Invalid values with a provided default should return the default
  39. self.assertEqual(userconfig.get('invalid', 'DEFAULT'), 'DEFAULT')
  40. self.assertEqual(userconfig.get('a.invalid', 'DEFAULT'), 'DEFAULT')
  41. self.assertEqual(userconfig.get('b.foo.invalid', 'DEFAULT'), 'DEFAULT')
  42. self.assertEqual(userconfig.get('b.foo.x.invalid', 'DEFAULT'), 'DEFAULT')
  43. def test_all(self):
  44. userconfig = self.userconfig
  45. flattened_data = {
  46. 'a': True,
  47. 'b.foo': 101,
  48. 'b.bar': 102,
  49. 'c.foo.x': 201,
  50. 'c.bar.y': 202,
  51. 'c.baz.z': 203,
  52. }
  53. # Retrieve a flattened dictionary containing all config data
  54. self.assertEqual(userconfig.all(), flattened_data)
  55. def test_set(self):
  56. userconfig = self.userconfig
  57. # Overwrite existing values
  58. userconfig.set('a', 'abc')
  59. userconfig.set('c.foo.x', 'abc')
  60. self.assertEqual(userconfig.data['a'], 'abc')
  61. self.assertEqual(userconfig.data['c']['foo']['x'], 'abc')
  62. # Create new values
  63. userconfig.set('d', 'abc')
  64. userconfig.set('b.baz', 'abc')
  65. self.assertEqual(userconfig.data['d'], 'abc')
  66. self.assertEqual(userconfig.data['b']['baz'], 'abc')
  67. # Set a value and commit to the database
  68. userconfig.set('a', 'def', commit=True)
  69. userconfig.refresh_from_db()
  70. self.assertEqual(userconfig.data['a'], 'def')
  71. # Attempt to change a branch node to a leaf node
  72. with self.assertRaises(TypeError):
  73. userconfig.set('b', 1)
  74. # Attempt to change a leaf node to a branch node
  75. with self.assertRaises(TypeError):
  76. userconfig.set('a.x', 1)
  77. def test_clear(self):
  78. userconfig = self.userconfig
  79. # Clear existing values
  80. userconfig.clear('a')
  81. userconfig.clear('b.foo')
  82. self.assertTrue('a' not in userconfig.data)
  83. self.assertTrue('foo' not in userconfig.data['b'])
  84. self.assertEqual(userconfig.data['b']['bar'], 102)
  85. # Clear an invalid value
  86. with self.assertRaises(KeyError):
  87. userconfig.clear('invalid')