예제 #1
0
 def test_not_in_parent(self):
     obj = self.mock()
     parent = self.mock()
     self.set_parent(obj, parent)
     obj.getId.return_value = 'foo'
     parent.foo.side_effect = None
     self.assertTrue(is_temporary(obj))
예제 #2
0
    def test_isTemporary_raises(self):
        obj = self.mocker.mock()
        self.set_parent(obj, self.stub())
        self.expect(obj.getId).result(None)
        self.expect(obj.isTemporary()).throw(TypeError())

        self.replay()
        self.assertTrue(is_temporary(obj))
예제 #3
0
    def test_not_temporary(self):
        obj = self.mock()
        parent = self.mock()
        self.set_parent(obj, parent)

        obj.getId.return_value = 'foo'
        parent.foo.side_effect = obj
        obj.isTemporary.return_value = False
        self.assertFalse(is_temporary(obj))
예제 #4
0
    def test_not_temporary(self):
        obj = self.mocker.mock()
        parent = self.mocker.mock()
        self.set_parent(obj, parent)

        self.expect(obj.getId()).result('foo')
        self.expect(parent.foo).result(obj)
        self.expect(obj.isTemporary()).result(False)

        self.replay()
        self.assertFalse(is_temporary(obj))
예제 #5
0
    def test_not_in_parent(self):
        obj = self.mocker.mock()
        parent = self.mocker.mock()
        self.set_parent(obj, parent)

        self.expect(obj.getId()).result('foo')
        self.expect(parent.foo, None)

        self.replay()

        self.assertTrue(is_temporary(obj))
예제 #6
0
def publish_after_transition(context, event):
    """ This event handler is executed after each transition and
    publishes the object with ftw.publisher on certain transitions.

    Also when retracting an object, the object will be published,
    since we should not delete anything unless it's delete from the
    sender instance too. This is necessary for preventing
    inconsistency, which could occur when deleting a folder which
    contains published objects on the reciever site.
    """

    # the event handler will be run multiple times, so we need to
    # remember which event we've already handled.
    if getattr(event, _marker, False):
        return
    else:
        setattr(event, _marker, True)

    if not event.transition:
        return

    if is_temporary(context):
        return

    config = getUtility(IWorkflowConfigs).get_config_for(context)
    if config is None:
        return

    transition = event.transition.__name__
    action = config.transitions().get(transition, None)

    if action is None:
        return

    if action in PUSH_ACTIONS:
        context.restrictedTraverse('@@publisher.publish')()
    elif action in DELETE_ACTIONS:
        context.restrictedTraverse('@@publisher.delete')()
예제 #7
0
def publish_after_transition(context, event):
    """ This event handler is executed after each transition and
    publishes the object with ftw.publisher on certain transitions.

    Also when retracting an object, the object will be published,
    since we should not delete anything unless it's delete from the
    sender instance too. This is necessary for preventing
    inconsistency, which could occur when deleting a folder which
    contains published objects on the reciever site.
    """

    # the event handler will be run multiple times, so we need to
    # remember which event we've already handled.
    if getattr(event, _marker, False):
        return
    else:
        setattr(event, _marker, True)

    if not event.transition:
        return

    if is_temporary(context):
        return

    config = getUtility(IWorkflowConfigs).get_config_for(context)
    if config is None:
        return

    transition = event.transition.__name__
    action = config.transitions().get(transition, None)

    if action is None:
        return

    if action in PUSH_ACTIONS:
        context.restrictedTraverse('@@publisher.publish')()
    elif action in DELETE_ACTIONS:
        context.restrictedTraverse('@@publisher.delete')()
예제 #8
0
 def test_no_parent_is_temporary(self):
     obj = self.mock()
     self.set_parent(obj, None)
     self.assertTrue(is_temporary(obj))
예제 #9
0
 def test_isTemporary_raises(self):
     obj = self.mock()
     self.set_parent(obj, self.stub())
     obj.getId.return_value = 'foo'
     obj.isTemporary.side_effect = TypeError()
     self.assertTrue(is_temporary(obj))
예제 #10
0
 def test_isTemporary_True(self):
     obj = self.mock()
     self.set_parent(obj, self.stub())
     obj.getId.return_value = 'foo'
     obj.isTemporary.return_value = True
     self.assertTrue(is_temporary(obj))
예제 #11
0
    def test_no_parent_is_temporary(self):
        obj = self.mocker.mock()
        self.set_parent(obj, None)

        self.replay()
        self.assertTrue(is_temporary(obj))