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_load(self):
     """
     The load() method in middleware.SettingsDict would be called on every get, getitem, etc.
     But the real loading should only done one time.
     """
     user = self._get_user(usertype="staff")
     user_settings = SettingsDict(user)
     self.failUnlessEqual(models._USER_SETTINGS_CACHE.cache_hit, 0)
     user_settings.get("foo", "bar")
     user_settings.get("foo", "bar")
     user_settings["foo"]
     user_settings["foo"]
     self.failUnlessEqual(models._USER_SETTINGS_CACHE.cache_hit, 1)
    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")
Example #4
0
    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)