def test__call__stale(self):
        """
        Tests the __call_method on a stale(decorated) object

        """
        dec = BaseDecorator('__mumbo_jumbo__')
        dec._set_decorated = mock.Mock()
        dec._decorate = mock.Mock()
        dec._has_decorated = mock.Mock(return_value=True)
        o = FakeObject()
        config = {}
        dec(o, config)
        dec._set_decorated.assert_not_called()
        dec._has_decorated.assert_called_with(o)
        dec._decorate.assert_not_called()
    def test_redecorate(self):
        """
        Should not be able to redecorate an object

        """

        def fake_decorate(obj, config):
            return obj
        dec = BaseDecorator('__mumbo_jumbo__')
        o = FakeObject()
        dec._decorate = mock.Mock(side_effect=fake_decorate)
        config = {}
        dec(o, config)
        dec(o, config)
        self.assertEquals(dec._decorate.call_count, 1)
    def test__call__fresh(self):
        """
        Tests the __call__ method on a fresh(undecorated) object.

        """
        dec = BaseDecorator('__mumbo_jumbo__')
        dec._set_decorated = mock.Mock()
        dec._has_decorated = mock.Mock(return_value=False)

        o = FakeObject()
        dec._decorate = mock.Mock(return_value=o)
        config = {}
        dec(o, config)
        dec._set_decorated.assert_called_with(o)
        dec._decorate.assert_called_once_with(o, config)
        dec._has_decorated.assert_called_with(o)