Browse Source

Added tests for conf app. #320

Rafał Pitoń 11 years ago
parent
commit
996f3eca41

+ 2 - 1
misago/conf/migrationutils.py

@@ -17,7 +17,8 @@ def get_custom_settings_values(orm, group):
     custom_settings_values = {}
 
     for setting in group.setting_set.iterator():
-        custom_settings_values[setting.setting] = setting.value
+        if setting.has_custom_value:
+            custom_settings_values[setting.setting] = setting.value
 
     return custom_settings_values
 

+ 16 - 6
misago/conf/models.py

@@ -29,16 +29,25 @@ class Setting(models.Model):
 
     @property
     def value(self):
-        return hydrators.hydrate_value(self.python_type, self.dry_value)
+        if not self.dry_value and self.default_value:
+            return hydrators.hydrate_value(self.python_type,
+                                           self.default_value)
+        else:
+            return hydrators.hydrate_value(self.python_type,
+                                           self.dry_value)
 
     @value.setter
     def value(self, new_value):
-        self.dry_value = hydrators.dehydrate_value(self.python_type, new_value)
-        return self.dry_value
+        if new_value != None:
+            self.dry_value = hydrators.dehydrate_value(self.python_type,
+                                                       new_value)
+        else:
+            self.dry_value = self.default_value
+        return self.value
 
     @property
     def has_custom_value(self):
-        return self.default_value and self.dry_value != self.default_value
+        return self.dry_value and self.dry_value != self.default_value
 
     @property
     def field_extra(self):
@@ -49,5 +58,6 @@ class Setting(models.Model):
 
     @field_extra.setter
     def field_extra(self, new_extra):
-        pickled_extra = pickle.dumps(choices_cache, pickle.HIGHEST_PROTOCOL)
-        self.pickled_field_extra = base64.encodestring(pickled_extra)
+        if new_extra:
+            pickled_extra = pickle.dumps(new_extra, pickle.HIGHEST_PROTOCOL)
+            self.pickled_field_extra = base64.encodestring(pickled_extra)

+ 122 - 0
misago/conf/tests/test_migrationutils.py

@@ -0,0 +1,122 @@
+from django.test import TestCase
+from misago.conf import migrationutils
+from misago.conf.models import SettingsGroup, Setting
+
+
+class MigrationUtilsTests(TestCase):
+    def test_with_conf_models(self):
+        """with_conf_models builds correct dict of models"""
+        models = {
+            u'core.cacheversion': {
+                'Meta': {'object_name': 'CacheVersion'},
+                'cache': ('django.db.models.fields.CharField',
+                          [], {'max_length': '128'}),
+                u'id': ('django.db.models.fields.AutoField',
+                        [], {'primary_key': 'True'}),
+                'version': ('django.db.models.fields.PositiveIntegerField',
+                            [], {'default': '0'})
+            }
+        }
+
+        final_models = migrationutils.with_conf_models('0001_initial')
+        self.assertTrue('conf.settingsgroup' in final_models),
+        self.assertTrue('conf.setting' in final_models),
+
+        final_models = migrationutils.with_conf_models('0001_initial', models)
+        self.assertTrue('conf.settingsgroup' in final_models),
+        self.assertTrue('conf.setting' in final_models),
+        self.assertTrue('core.cacheversion' in final_models),
+
+
+class DBConfMigrationUtilsTests(TestCase):
+    def setUp(self):
+        self.orm = {
+            'conf.SettingsGroup': SettingsGroup,
+            'conf.Setting': Setting,
+        }
+
+        self.test_group = {
+            'key': 'test_group',
+            'name': "Test settings",
+            'description': "Those are test settings.",
+            'settings': (
+                            {
+                            'setting': 'fish_name',
+                            'name': "Fish's name",
+                            'value': "Eric",
+                            'field_extra': {
+                                           'min_length': 2,
+                                           'max_length': 255
+                                           },
+                            },
+                            {
+                            'setting': 'fish_license_no',
+                            'name': "Fish's license number",
+                            'default_value': '123-456',
+                            'field_extra': {
+                                           'max_length': 255
+                                           },
+                            },
+                        )
+        }
+
+        migrationutils.migrate_settings_group(self.orm, self.test_group)
+        self.groups_count = SettingsGroup.objects.count()
+
+    def test_get_custom_group_and_settings(self):
+        """tests setup created settings group"""
+        custom_group = migrationutils.get_group(self.orm,
+                                                self.test_group['key'])
+
+        self.assertEqual(custom_group.key, self.test_group['key'])
+        self.assertEqual(custom_group.name, self.test_group['name'])
+        self.assertEqual(custom_group.description,
+                         self.test_group['description'])
+
+        custom_settings = migrationutils.get_custom_settings_values(
+            self.orm, custom_group)
+
+        self.assertEqual(custom_settings['fish_name'], 'Eric')
+        self.assertTrue('fish_license_no' not in custom_settings)
+
+    def test_change_group_key(self):
+        """migrate_settings_group changed group key"""
+
+        new_group = {
+            'key': 'new_test_group',
+            'name': "New test settings",
+            'description': "Those are updated test settings.",
+            'settings': (
+                            {
+                            'setting': 'fish_new_name',
+                            'name': "Fish's new name",
+                            'value': "Eric",
+                            'field_extra': {
+                                           'min_length': 2,
+                                           'max_length': 255
+                                           },
+                            },
+                            {
+                            'setting': 'fish_new_license_no',
+                            'name': "Fish's changed license number",
+                            'default_value': '123-456',
+                            'field_extra': {
+                                           'max_length': 255
+                                           },
+                            },
+                        )
+        }
+
+        migrationutils.migrate_settings_group(
+            self.orm, new_group, old_group_key=self.test_group['key'])
+        db_group = migrationutils.get_group(self.orm, new_group['key'])
+
+        self.assertEqual(SettingsGroup.objects.count(), self.groups_count)
+        self.assertEqual(db_group.key, new_group['key'])
+        self.assertEqual(db_group.name, new_group['name'])
+        self.assertEqual(db_group.description,
+                         new_group['description'])
+
+        for setting in new_group['settings']:
+            db_setting = db_group.setting_set.get(setting=setting['setting'])
+            self.assertEqual(db_setting.name, setting['name'])

+ 49 - 0
misago/conf/tests/test_models.py

@@ -0,0 +1,49 @@
+from django.test import TestCase
+from misago.conf.models import Setting
+
+
+class SettingModelTests(TestCase):
+    def test_real_value(self):
+        """setting returns real value correctyly"""
+        setting_model = Setting(python_type='list', dry_value='')
+        self.assertEqual(setting_model.value, [])
+
+        setting_model = Setting(python_type='list',
+                                dry_value='Arthur,Lancelot,Patsy')
+        self.assertEqual(setting_model.value,
+                         ['Arthur', 'Lancelot', 'Patsy'])
+
+
+        setting_model = Setting(python_type='list',
+                                default_value='Arthur,Patsy')
+        self.assertEqual(setting_model.value,
+                         ['Arthur', 'Patsy'])
+
+        setting_model = Setting(python_type='list',
+                                dry_value='Arthur,Robin,Patsy',
+                                default_value='Arthur,Patsy')
+        self.assertEqual(setting_model.value,
+                         ['Arthur', 'Robin', 'Patsy'])
+
+    def test_set_value(self):
+        """setting sets value correctyly"""
+        setting_model = Setting(python_type='int',
+                                dry_value='42',
+                                default_value='9001')
+
+        setting_model.value = 3000
+        self.assertEqual(setting_model.value, 3000)
+        setting_model.value = None
+        self.assertEqual(setting_model.value, 9001)
+
+    def test_field_extra(self):
+        """field extra is set correctly"""
+        setting_model = Setting()
+
+        test_extra = {}
+        setting_model.field_extra = test_extra
+        self.assertEqual(setting_model.field_extra, test_extra)
+
+        test_extra = {'min_lenght': 5, 'max_length': 12}
+        setting_model.field_extra = test_extra
+        self.assertEqual(setting_model.field_extra, test_extra)