Browse Source

Test hydration/dehydration on Setting model too. #320

Rafał Pitoń 11 years ago
parent
commit
9b0bdc64c4
2 changed files with 78 additions and 4 deletions
  1. 2 1
      misago/conf/models.py
  2. 76 3
      misago/conf/tests/test_hydrators.py

+ 2 - 1
misago/conf/models.py

@@ -33,7 +33,8 @@ class Setting(models.Model):
 
     @value.setter
     def value(self, new_value):
-        return hydrators.dehydrate_value(self.python_type, self.new_value)
+        self.dry_value = hydrators.dehydrate_value(self.python_type, new_value)
+        return self.dry_value
 
     @property
     def has_custom_value(self):

+ 76 - 3
misago/conf/tests/test_hydrators.py

@@ -1,5 +1,6 @@
 from django.test import TestCase
 from misago.conf.hydrators import hydrate_value, dehydrate_value
+from misago.conf.models import Setting
 
 
 class HydratorsTests(TestCase):
@@ -10,7 +11,7 @@ class HydratorsTests(TestCase):
         self.assertEqual(hydrate_value('string', dry_value), wet_value)
 
     def test_hydrate_dehydrate_bool(self):
-        """bool values is correctly hydrated and dehydrated"""
+        """bool values are correctly hydrated and dehydrated"""
         wet_value = True
         dry_value = dehydrate_value('bool', wet_value)
         self.assertEqual(hydrate_value('bool', dry_value), wet_value)
@@ -26,13 +27,85 @@ class HydratorsTests(TestCase):
         self.assertEqual(hydrate_value('int', dry_value), wet_value)
 
     def test_hydrate_dehydrate_list(self):
-        """list value is correctly hydrated and dehydrated"""
+        """list is correctly hydrated and dehydrated"""
         wet_value = ['foxtrot', 'uniform', 'hotel']
         dry_value = dehydrate_value('list', wet_value)
         self.assertEqual(hydrate_value('list', dry_value), wet_value)
 
     def test_hydrate_dehydrate_empty_list(self):
-        """list value is correctly hydrated and dehydrated"""
+        """empty list is correctly hydrated and dehydrated"""
         wet_value = []
         dry_value = dehydrate_value('list', wet_value)
         self.assertEqual(hydrate_value('list', dry_value), wet_value)
+
+    def test_value_error(self):
+        """unsupported type raises ValueError"""
+        with self.assertRaises(ValueError):
+            hydrate_value('eric', None)
+
+        with self.assertRaises(ValueError):
+            dehydrate_value('eric', None)
+
+
+class HydratorsModelTests(TestCase):
+    def test_hydrate_dehydrate_string(self):
+        """string value is correctly hydrated and dehydrated in model"""
+        setting = Setting(python_type='string')
+
+        wet_value = 'Lorem Ipsum'
+        dry_value = dehydrate_value(setting.python_type, wet_value)
+
+        setting.value = wet_value
+        self.assertEqual(setting.value, wet_value)
+        self.assertEqual(setting.dry_value, dry_value)
+
+    def test_hydrate_dehydrate_bool(self):
+        """bool values are correctly hydrated and dehydrated in model"""
+        setting = Setting(python_type='bool')
+
+        wet_value = True
+        dry_value = dehydrate_value(setting.python_type, wet_value)
+
+        setting.value = wet_value
+        self.assertEqual(setting.value, wet_value)
+        self.assertEqual(setting.dry_value, dry_value)
+
+        wet_value = False
+        dry_value = dehydrate_value(setting.python_type, wet_value)
+
+        setting.value = wet_value
+        self.assertEqual(setting.value, wet_value)
+        self.assertEqual(setting.dry_value, dry_value)
+
+    def test_hydrate_dehydrate_int(self):
+        """int value is correctly hydrated and dehydrated in model"""
+        setting = Setting(python_type='int')
+
+        wet_value = 9001
+        dry_value = dehydrate_value(setting.python_type, wet_value)
+
+        setting.value = wet_value
+        self.assertEqual(setting.value, wet_value)
+        self.assertEqual(setting.dry_value, dry_value)
+
+    def test_hydrate_dehydrate_list(self):
+        """list is correctly hydrated and dehydrated in model"""
+        setting = Setting(python_type='list')
+
+        wet_value = ['Lorem', 'Ipsum', 'Dolor', 'Met']
+        dry_value = dehydrate_value(setting.python_type, wet_value)
+
+        setting.value = wet_value
+        self.assertEqual(setting.value, wet_value)
+        self.assertEqual(setting.dry_value, dry_value)
+
+    def test_hydrate_dehydrate_empty_list(self):
+        """empty list is correctly hydrated and dehydrated in model"""
+        setting = Setting(python_type='list')
+
+        wet_value = []
+        dry_value = dehydrate_value(setting.python_type, wet_value)
+
+        setting.value = wet_value
+        self.assertEqual(setting.value, wet_value)
+        self.assertEqual(setting.dry_value, dry_value)