def test_issues1(self): """ https://github.com/jedie/django-dbpreferences/issues/1 """ user = self._get_user(usertype="staff") user_settings = SettingsDict(user) user_settings["Foo"] = "Bar" user_settings.save() models._USER_SETTINGS_CACHE = GetItemCountDict() user_settings_instance, user_settings = UserSettings.objects.get_settings(user) self.failUnless(isinstance(user_settings_instance, UserSettings)) self.failUnlessEqual(user_settings, {"Foo":"Bar"})
def test_anonymous(self): """ The settings would be not saved for anonymous users. We allways get the default value back. """ user = AnonymousUser() user_settings = SettingsDict(user) user_settings["Foo"] = "bar" # in a request, we get values set in the past self.failUnlessEqual(user_settings["Foo"], "bar") # For anonymous user, save() does nothing: user_settings.save() self.failUnlessEqual(self._saved, 0) # In "the next request" we can't get the old value "bar" user_settings = SettingsDict(user) self.failUnlessEqual(user_settings.get("Foo", "not the initial value"), "not the initial value")
def test_low_level(self): self.failUnlessEqual(len(models._USER_SETTINGS_CACHE), 0) user = self.get_user(usertype="staff") user_settings = SettingsDict(user) # .get set the value, if not exist self.failUnlessEqual(user_settings.get("Foo", "initial value"), "initial value") self.failUnlessEqual(user_settings["Foo"], "initial value") # change the existing value user_settings["Foo"] = "new value" # Now we should get the new value: self.failUnlessEqual(user_settings.get("Foo", "initial value"), "new value") # before we save, nothing should be created self.failUnless(UserSettings.objects.count() == 0) self.failUnlessEqual(self._init, 0) self.failUnlessEqual(self._saved, 0) self.failUnlessEqual(len(models._USER_SETTINGS_CACHE), 0) user_settings.save() # increment: pre_init + post_save self.failUnlessEqual(self._init, 1) self.failUnlessEqual(self._saved, 1) self.failUnlessEqual(len(models._USER_SETTINGS_CACHE), 1) self.failUnless(user.pk in models._USER_SETTINGS_CACHE) self.failUnless(UserSettings.objects.count() == 1) instance = UserSettings.objects.get(user=user) # increment: pre_init self.failUnlessEqual(self._init, 2) self.failUnlessEqual(instance.settings, {"Foo": "new value"}) # Now we should get a cached version, so pre_init should not be increment user_settings = SettingsDict(user) self.failUnlessEqual(user_settings["Foo"], "new value") self.failUnlessEqual(self._init, 2) self.failUnlessEqual(self._saved, 1) self.failUnlessEqual(models._USER_SETTINGS_CACHE.cache_hit, 2)