def test_has_decorated(self):
        """
        A decorator should be able to determine if an object has
        already been decorated.

        """
        sig = '__mumbo_jumbo__'
        dec = BaseDecorator(sig)
        o = FakeObject()
        self.assertFalse(dec._has_decorated(o))
        setattr(o, sig, True)
        self.assertTrue(dec._has_decorated(o))
    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__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)