def __call__(self):
        self.errors = {}

        if self.request.get('form.actions.add', False):
            self.authorize()
            am = ActionManager()
            rule = am.get_rule(self.selected_transition)
            if rule is None:
                rule_id = generateRuleName(self.selected_transition)
                r = Rule()
                r.title = u"%s transition content rule" % (
                    self.selected_transition.id)
                r.description = """This content rule was automatically created
by the workflow manager to support actions on workflow transitions. If you want
the behavior to work as expected, do not modify this outside of the workflow
manager."""
                am.storage[rule_id] = r
                rule = RuleAdapter(r, self.selected_transition)
                rule.activate()

            editurl = '%s/%s/+action' % (self.portal.absolute_url(), rule.id)
            data = urlencode({
                ':action': self.request.get('action-type',
                                            'plone.actions.Mail'),
                'form.button.AddAction': 'Add'})

            return self.handle_response(load=editurl + '?' + data)
        else:
            return self.handle_response(tmpl=self.template)
    def setUp(self):
        portal = self.layer['portal']

        req = self.getRequest(
            {
                'workflow-name': 'workflow-1',
                'form.actions.add': 'create',
                'clone-from-workflow': 'simple_publication_workflow'
            }, True)
        alsoProvides(req, IAttributeAnnotatable)
        AddWorkflow(portal, req)()

        # add some rules/actions
        req = self.getRequest(
            {
                'form.actions.add': 'Add',
                'selected-transition': 'publish',
                'selected-state': 'published',
                'selected-workflow': 'workflow-1'
            }, True)
        view = AddActionView(portal, req)
        view()
        self.selected_workflow = view.selected_workflow
        self.selected_transition = view.selected_transition
        self.selected_state = view.selected_state

        am = ActionManager()
        rule = am.get_rule(self.selected_transition)
        action = NotifyAction()
        action.message = 'foobar'
        action.message_type = 'info'
        rule.actions.append(action)
예제 #3
0
    def __call__(self):
        self.errors = {}

        if self.request.get('form.actions.add', False) == 'Add':
            self.authorize()
            am = ActionManager()
            rule = am.get_rule(self.selected_transition)
            if rule is None:
                id = generateRuleName(self.selected_transition)
                r = Rule()
                r.title = u"%s transition content rule" % (
                    self.selected_transition.id)
                r.description = """This content rule was automatically created
by the workflow manager to support actions on workflow transitions. If you want
the behavior to work as expected, do not modify this outside of the workflow
manager."""
                am.storage[id] = r
                rule = RuleAdapter(r, self.selected_transition)
                rule.activate()

            editurl = '%s/%s/+action' % (self.portal.absolute_url(), rule.id)
            data = urlencode({
                ':action':
                self.request.get('action-type', 'plone.actions.Mail'),
                'form.button.AddAction':
                'Add'
            })

            return self.handle_response(load=editurl + '?' + data)
        else:
            return self.handle_response(tmpl=self.template)
    def setUp(self):
        portal = self.layer['portal']

        req = self.getRequest({'workflow-name': 'workflow-1',
            'form.actions.add': 'create',
            'clone-from-workflow': 'simple_publication_workflow'}, True)
        alsoProvides(req, IAttributeAnnotatable)
        AddWorkflow(portal, req)()

        # add some rules/actions
        req = self.getRequest({
            'form.actions.add': 'Add',
            'selected-transition': 'publish',
            'selected-state': 'published',
            'selected-workflow': 'workflow-1'}, True)
        view = AddActionView(portal, req)
        view()
        self.selected_workflow = view.selected_workflow
        self.selected_transition = view.selected_transition
        self.selected_state = view.selected_state

        am = ActionManager()
        rule = am.get_rule(self.selected_transition)
        action = NotifyAction()
        action.message = 'foobar'
        action.message_type = 'info'
        rule.actions.append(action)
 def test_adding_action(self):
     portal = self.layer["portal"]
     login(portal, TEST_USER_NAME)
     req = self.getRequest(
         {"form.actions.add": "Add", "selected-transition": "retract", "selected-workflow": "workflow-1"}, True
     )
     view = AddActionView(portal, req)
     view()
     am = ActionManager()
     rule = am.get_rule(view.selected_transition)
     self.assertTrue(rule is not None)
예제 #6
0
 def test_adding_action(self):
     portal = self.layer['portal']
     login(portal, TEST_USER_NAME)
     req = self.getRequest({
         'form.actions.add': 'Add',
         'selected-transition': 'retract',
         'selected-workflow': 'workflow-1'}, True)
     view = AddActionView(portal, req)
     view()
     am = ActionManager()
     rule = am.get_rule(view.selected_transition)
     self.assertTrue(rule is not None)
 def test_adding_action(self):
     portal = self.layer['portal']
     login(portal, TEST_USER_NAME)
     req = self.getRequest({
         'form.actions.add': 'Add',
         'selected-transition': 'retract',
         'selected-workflow': 'workflow-1'}, True)
     view = AddActionView(portal, req)
     view()
     am = ActionManager()
     rule = am.get_rule(view.selected_transition)
     self.assertTrue(rule is not None)
    def test_cancel_removing_action(self):
        portal = self.layer["portal"]
        login(portal, TEST_USER_NAME)

        req = self.getRequest(
            {"form.actions.cancel": "Cancel", "selected-transition": "publish", "selected-workflow": "workflow-1"}, True
        )
        view = DeleteActionView(portal, req)
        view()
        am = ActionManager()
        rule = am.get_rule(view.selected_transition)
        self.assertEquals(len(rule.actions), 1)
    def test_cancel_removing_action(self):
        portal = self.layer['portal']
        login(portal, TEST_USER_NAME)

        req = self.getRequest({
            'form.actions.cancel': 'Cancel',
            'selected-transition': 'publish',
            'selected-workflow': 'workflow-1'}, True)
        view = DeleteActionView(portal, req)
        view()
        am = ActionManager()
        rule = am.get_rule(view.selected_transition)
        self.assertEquals(len(rule.actions), 1)
예제 #10
0
    def test_cancel_removing_action(self):
        portal = self.layer['portal']
        login(portal, TEST_USER_NAME)

        req = self.getRequest({
            'form.actions.cancel': 'Cancel',
            'selected-transition': 'publish',
            'selected-workflow': 'workflow-1'}, True)
        view = DeleteActionView(portal, req)
        view()
        am = ActionManager()
        rule = am.get_rule(view.selected_transition)
        self.assertEquals(len(rule.actions), 1)
예제 #11
0
class TestActions(BaseTest):

    layer = INTEGRATION_MANAGER_TESTING

    def test_adding_action(self):
        portal = self.layer['portal']
        login(portal, TEST_USER_NAME)
        req = self.getRequest({
            'form.actions.add': 'Add',
            'selected-transition': 'retract',
            'selected-workflow': 'workflow-1'}, True)
        view = AddActionView(portal, req)
        view()
        am = ActionManager()
        rule = am.get_rule(view.selected_transition)
        self.assertTrue(rule is not None)

    @unittest.skip("'rule' is None before and after calling view.")
    def test_adding_action_fails(self):
        portal = self.layer['portal']
        login(portal, TEST_USER_NAME)
        req = self.getRequest({
            'selected-transition': 'retract',
            'selected-workflow': 'workflow-1'}, True)
        view = AddActionView(portal, req)
        try:
            view()
        except AttributeError, ex:
            self.assertTrue("'TestRequest' object has no attribute 'RESPONSE'"
                            in str(ex))
        am = ActionManager()
        rule = am.get_rule(view.selected_transition)
        self.assertTrue(rule is None)
예제 #12
0
 def test_action_manager_available_actions(self):
     am = ActionManager()
     action_names = [a.title for a in am.available_actions]
     self.assertTrue(action_names == [
         u'Logger', u'Notify user', u'Copy to folder', u'Move to folder',
         u'Delete object', u'Transition workflow state', u'Send email'
     ])
    def test_action_manager_to_create_action(self):
        portal = self.layer["portal"]
        am = ActionManager()
        pw = getToolByName(portal, "portal_workflow")
        workflow = pw["simple_publication_workflow"]
        transition = workflow.transitions["publish"]
        am.delete_rule_for(transition)
        rule = am.create(transition)

        element = getUtility(IRuleAction, name="plone.actions.Copy")
        adding = getMultiAdapter((rule.rule, self.layer["request"]), name="+action")
        addview = getMultiAdapter((adding, self.layer["request"]), name=element.addview)

        addview.createAndAdd(data={"target_folder": "/target"})

        self.assertEquals(len(rule.actions), 1)
    def test_action_manager_action_url(self):
        portal = self.layer["portal"]
        am = ActionManager()
        pw = getToolByName(portal, "portal_workflow")
        workflow = pw["simple_publication_workflow"]
        transition = workflow.transitions["publish"]
        rule = am.create(transition)

        element = getUtility(IRuleAction, name="plone.actions.Copy")
        adding = getMultiAdapter((rule.rule, self.layer["request"]), name="+action")
        addview = getMultiAdapter((adding, self.layer["request"]), name=element.addview)

        addview.createAndAdd(data={"target_folder": "/target"})

        ra = RuleAdapter(rule, transition)
        action = ra.get_action(0)
        self.assertTrue(rule.rule.id in ra.action_url(action) and "++0" in ra.action_url(action))
    def test_action_manager_to_create_action(self):
        portal = self.layer['portal']
        am = ActionManager()
        pw = getToolByName(portal, 'portal_workflow')
        workflow = pw['simple_publication_workflow']
        transition = workflow.transitions['publish']
        am.delete_rule_for(transition)
        rule = am.create(transition)

        element = getUtility(IRuleAction, name='plone.actions.Copy')
        adding = getMultiAdapter((rule.rule, self.layer['request']),
                                 name='+action')
        addview = getMultiAdapter((adding, self.layer['request']),
                                  name=element.addview)

        addview.createAndAdd(data={'target_folder': '/target'})

        self.assertEquals(len(rule.actions), 1)
예제 #16
0
    def test_action_manager_to_create_action(self):
        portal = self.layer['portal']
        am = ActionManager()
        pw = getToolByName(portal, 'portal_workflow')
        workflow = pw['simple_publication_workflow']
        transition = workflow.transitions['publish']
        am.delete_rule_for(transition)
        rule = am.create(transition)

        element = getUtility(IRuleAction, name='plone.actions.Copy')
        adding = getMultiAdapter((rule.rule, self.layer['request']),
                                 name='+action')
        addview = getMultiAdapter((adding, self.layer['request']),
                                  name=element.addview)

        addview.createAndAdd(data={'target_folder': '/target'})

        self.assertEquals(len(rule.actions), 1)
예제 #17
0
    def test_action_manager_action_url(self):
        portal = self.layer['portal']
        am = ActionManager()
        pw = getToolByName(portal, 'portal_workflow')
        workflow = pw['simple_publication_workflow']
        transition = workflow.transitions['publish']
        rule = am.create(transition)

        element = getUtility(IRuleAction, name='plone.actions.Copy')
        adding = getMultiAdapter((rule.rule, self.layer['request']),
                                 name='+action')
        addview = getMultiAdapter((adding, self.layer['request']),
                                  name=element.addview)

        addview.createAndAdd(data={'target_folder': '/target'})

        ra = RuleAdapter(rule, transition)
        action = ra.get_action(0)
        self.assertTrue(rule.rule.id in ra.action_url(action) and \
                        '++0' in ra.action_url(action))
    def test_action_manager_action_url(self):
        portal = self.layer['portal']
        am = ActionManager()
        pw = getToolByName(portal, 'portal_workflow')
        workflow = pw['simple_publication_workflow']
        transition = workflow.transitions['publish']
        rule = am.create(transition)

        element = getUtility(IRuleAction, name='plone.actions.Copy')
        adding = getMultiAdapter((rule.rule, self.layer['request']),
                                 name='+action')
        addview = getMultiAdapter((adding, self.layer['request']),
                                  name=element.addview)

        addview.createAndAdd(data={'target_folder': '/target'})

        ra = RuleAdapter(rule, transition)
        action = ra.get_action(0)
        self.assertTrue(rule.rule.id in ra.action_url(action) and \
                        '++0' in ra.action_url(action))
예제 #19
0
    def test_action_manager_delete_rule(self):
        portal = self.layer['portal']
        am = ActionManager()
        pw = getToolByName(portal, 'portal_workflow')
        workflow = pw['simple_publication_workflow']
        transition = workflow.transitions['publish']
        am.create(transition)

        am.delete_rule_for(transition)
        self.assertEquals(am.get_rule(transition), None)
예제 #20
0
    def test_action_manager_action_index(self):
        portal = self.layer['portal']
        am = ActionManager()
        pw = getToolByName(portal, 'portal_workflow')
        workflow = pw['simple_publication_workflow']
        transition = workflow.transitions['publish']
        rule = am.create(transition)

        element = getUtility(IRuleAction, name='plone.actions.Copy')
        adding = getMultiAdapter((rule.rule, self.layer['request']),
                                 name='+action')
        addview = getMultiAdapter((adding, self.layer['request']),
                                  name=element.addview)

        try:
            createAndAdd = addview.form_instance.createAndAdd
        except AttributeError:
            createAndAdd = addview.createAndAdd
        createAndAdd(data={'target_folder': '/target'})

        ra = RuleAdapter(rule, transition)
        action = ra.get_action(0)
        self.assertEquals(ra.action_index(action), 0)
    def test_action_manager_delete_rule(self):
        portal = self.layer["portal"]
        am = ActionManager()
        pw = getToolByName(portal, "portal_workflow")
        workflow = pw["simple_publication_workflow"]
        transition = workflow.transitions["publish"]
        am.create(transition)

        am.delete_rule_for(transition)
        self.assertEquals(am.get_rule(transition), None)
예제 #22
0
 def actions(self):
     return ActionManager()
            self.assertTrue(str(ex) == "'TestRequest' object has no attribute 'RESPONSE'")
        am = ActionManager()
        rule = am.get_rule(view.selected_transition)
        self.assertTrue(rule is None)

    def test_accessing_adding_action(self):
        portal = self.layer["portal"]
        login(portal, TEST_USER_NAME)

        req = self.getRequest({"selected-transition": "publish", "selected-workflow": "workflow-1"}, True)
        view = DeleteActionView(portal, req)
        try:
            view()
        except AttributeError, ex:
            self.assertTrue(str(ex) == "'TestRequest' object has no attribute 'RESPONSE'")
        am = ActionManager()
        rule = am.get_rule(view.selected_transition)
        self.assertTrue(len(rule.actions) == 1)

    def test_removing_action(self):
        portal = self.layer["portal"]
        login(portal, TEST_USER_NAME)

        req = self.getRequest(
            {
                "form.actions.delete": "Delete",
                "selected-transition": "publish",
                "selected-workflow": "workflow-1",
                "action_index": "0",
            },
            True,
예제 #24
0
    @unittest.skip("'rule' is None before and after calling view.")
    def test_accessing_adding_action(self):
        portal = self.layer['portal']
        login(portal, TEST_USER_NAME)

        req = self.getRequest({
            'selected-transition': 'publish',
            'selected-workflow': 'workflow-1'}, True)
        view = DeleteActionView(portal, req)
        try:
            view()
        except AttributeError, ex:
            self.assertTrue("'TestRequest' object has no attribute 'RESPONSE'"
                            in str(ex))
        am = ActionManager()
        rule = am.get_rule(view.selected_transition)
        self.assertTrue(len(rule.actions) == 1)

    def test_removing_action(self):
        portal = self.layer['portal']
        login(portal, TEST_USER_NAME)

        req = self.getRequest({
            'form.actions.delete': 'Delete',
            'selected-transition': 'publish',
            'selected-workflow': 'workflow-1',
            'action_index': '0'}, True)
        view = DeleteActionView(portal, req)
        view()
        am = ActionManager()