def test_IdmUtilsMethods_can_do_transition0(self): imail = sub_create(self.portal['incoming-mail'], 'dmsincomingmail', datetime.now(), 'my-id') self.assertEqual(api.content.get_state(imail), 'created') view = IdmUtilsMethods(imail, imail.REQUEST) # no treating_group nor title: NOK self.assertFalse(view.can_do_transition('propose_to_agent')) imail.title = u'test' # tg ok, state ok, assigner_user nok but auc ok: OK imail.treating_groups = get_registry_organizations()[0] self.assertTrue(view.can_do_transition('propose_to_agent')) # tg ok, state ok, assigner_user nok, auc nok: NOK setRoles(self.portal, TEST_USER_ID, ['Reviewer']) api.portal.set_registry_record(AUC_RECORD, 'mandatory') self.assertFalse(view.can_do_transition('propose_to_agent')) # tg ok, state ok, assigner_user nok, auc ok: OK api.portal.set_registry_record(AUC_RECORD, 'no_check') self.assertTrue(view.can_do_transition('propose_to_agent')) # tg ok, state ok, assigner_user ok, auc nok: OK imail.assigned_user = '******' api.portal.set_registry_record(AUC_RECORD, 'mandatory') self.assertTrue(view.can_do_transition('propose_to_agent')) # WE DO TRANSITION api.content.transition(imail, 'propose_to_agent') self.assertEqual(api.content.get_state(imail), 'proposed_to_agent') # tg ok, state ok, (assigner_user nok, auc nok): OK imail.assigned_user = None self.assertTrue(view.can_do_transition('back_to_creation')) self.assertTrue(view.can_do_transition('back_to_manager')) self.assertFalse(view.can_do_transition('unknown'))
def dmsincomingmail_transition(mail, event): """When closing an incoming mail, add the assigned_user if necessary.""" if event.transition and event.transition.id == 'close' and mail.assigned_user is None: username = event.status['actor'] view = IdmUtilsMethods(mail, mail.REQUEST) if view.is_in_user_groups(suffixes=IM_EDITOR_SERVICE_FUNCTIONS, org_uid=mail.treating_groups, user=api.user.get(username)): mail.assigned_user = username mail.reindexObject(['assigned_user'])
def test_IdmUtilsMethods_proposed_to_premanager_col_cond(self): imail = sub_create(self.portal['incoming-mail'], 'dmsincomingmail', datetime.now(), 'my-id') view = IdmUtilsMethods(imail, imail.REQUEST) self.assertFalse(view.proposed_to_pre_manager_col_cond()) login(self.portal, 'encodeur') self.assertTrue(view.proposed_to_pre_manager_col_cond()) login(self.portal, 'agent') self.assertFalse(view.proposed_to_pre_manager_col_cond()) api.group.add_user(groupname='abc_group_encoder', username='******') self.assertTrue(view.proposed_to_pre_manager_col_cond()) login(self.portal, 'dirg') self.assertTrue(view.proposed_to_pre_manager_col_cond()) login(self.portal, 'agent1') self.assertFalse(view.proposed_to_pre_manager_col_cond()) api.group.create('pre_manager', 'Pre manager') api.group.add_user(groupname='pre_manager', username='******') self.assertTrue(view.proposed_to_pre_manager_col_cond())
def test_IdmUtilsMethods_proposed_to_n_plus_col_cond1(self): folder = self.portal['incoming-mail']['mail-searches'] col = folder['searchfor_proposed_to_n_plus_1'] n_plus_1_view = IdmUtilsMethods(col, col.REQUEST) self.assertFalse(n_plus_1_view.proposed_to_n_plus_col_cond()) login(self.portal, 'encodeur') self.assertTrue(n_plus_1_view.proposed_to_n_plus_col_cond()) login(self.portal, 'agent') self.assertFalse(n_plus_1_view.proposed_to_n_plus_col_cond()) api.group.add_user(groupname='abc_group_encoder', username='******') self.assertTrue(n_plus_1_view.proposed_to_n_plus_col_cond()) api.group.remove_user(groupname='abc_group_encoder', username='******') login(self.portal, 'dirg') self.assertTrue(n_plus_1_view.proposed_to_n_plus_col_cond()) login(self.portal, 'chef') self.assertTrue(n_plus_1_view.proposed_to_n_plus_col_cond())
def test_IdmUtilsMethods_user_has_review_level(self): imail = sub_create(self.portal['incoming-mail'], 'dmsincomingmail', datetime.now(), 'my-id') view = IdmUtilsMethods(imail, imail.REQUEST) self.assertFalse(view.user_has_review_level()) self.assertFalse(view.user_has_review_level('dmsincomingmail')) api.group.create(groupname='111_n_plus_1') api.group.add_user(groupname='111_n_plus_1', username=TEST_USER_ID) set_dms_config(['review_levels', 'dmsincomingmail'], OrderedDict([('dir_general', { 'st': ['proposed_to_manager'] }), ('_n_plus_1', { 'st': ['proposed_to_n_plus_1'], 'org': 'treating_groups' })])) self.assertTrue(view.user_has_review_level('dmsincomingmail')) api.group.remove_user(groupname='111_n_plus_1', username=TEST_USER_ID) self.assertFalse(view.user_has_review_level('dmsincomingmail')) api.group.add_user(groupname='dir_general', username=TEST_USER_ID) self.assertTrue(view.user_has_review_level('dmsincomingmail'))
def test_IdmUtilsMethods_can_close(self): imail = sub_create(self.portal['incoming-mail'], 'dmsincomingmail', datetime.now(), 'my-id', **{'title': u'test'}) self.assertEqual(api.content.get_state(imail), 'created') view = IdmUtilsMethods(imail, imail.REQUEST) imail.treating_groups = get_registry_organizations()[ 0] # direction-generale self.assertTrue(view.can_do_transition('propose_to_agent')) api.content.transition(imail, 'propose_to_agent') login(self.portal, 'agent') self.assertIsNone(imail.sender) self.assertIsNone(imail.mail_type) self.assertFalse(view.can_close()) intids = getUtility(IIntIds) imail.sender = [ RelationValue(intids.getId(self.portal.contacts['electrabel'])) ] imail.mail_type = u'courrier' self.assertFalse( view.can_close()) # not part of treating group editors api.group.add_user(groupname='{}_editeur'.format( imail.treating_groups), username='******') self.assertTrue(view.can_close())
def test_IdmUtilsMethods_get_im_folder(self): imail = sub_create(self.portal['incoming-mail'], 'dmsincomingmail', datetime.now(), 'my-id') view = IdmUtilsMethods(imail, imail.REQUEST) self.assertEqual(view.get_im_folder(), self.portal['incoming-mail'])
def test_IdmUtilsMethods_proposed_to_n_plus_col_cond2(self): folder = self.portal['incoming-mail']['mail-searches'] col1 = folder['searchfor_proposed_to_n_plus_1'] n_plus_1_view = IdmUtilsMethods(col1, col1.REQUEST) col2 = folder['searchfor_proposed_to_n_plus_2'] n_plus_2_view = IdmUtilsMethods(col2, col2.REQUEST) self.assertFalse(n_plus_2_view.proposed_to_n_plus_col_cond()) login(self.portal, 'encodeur') self.assertTrue(n_plus_2_view.proposed_to_n_plus_col_cond()) login(self.portal, 'agent') self.assertFalse(n_plus_2_view.proposed_to_n_plus_col_cond()) api.group.add_user(groupname='abc_group_encoder', username='******') self.assertTrue(n_plus_2_view.proposed_to_n_plus_col_cond()) api.group.remove_user(groupname='abc_group_encoder', username='******') login(self.portal, 'dirg') self.assertTrue(n_plus_2_view.proposed_to_n_plus_col_cond()) login(self.portal, 'chef') self.assertTrue(n_plus_2_view.proposed_to_n_plus_col_cond()) # Set N+2 to user, have to get an organization UID first contacts = self.portal['contacts'] own_orga = contacts['plonegroup-organization'] departments = own_orga.listFolderContents( contentFilter={'portal_type': 'organization'}) self.portal.acl_users.source_groups.addPrincipalToGroup( 'agent1', "%s_n_plus_2" % departments[5].UID()) login(self.portal, 'agent1') self.assertTrue(n_plus_1_view.proposed_to_n_plus_col_cond() ) # can view lower level collection self.assertTrue(n_plus_2_view.proposed_to_n_plus_col_cond())
def test_IdmUtilsMethods_can_do_transition2(self): # imail = createContentInContainer(self.portal['incoming-mail'], 'dmsincomingmail') # creation is made earlier otherwise wf_from_to['to'] is again at default value ?????????????? self.assertEqual(api.content.get_state(self.imail), 'created') view = IdmUtilsMethods(self.imail, self.imail.REQUEST) setRoles(self.portal, TEST_USER_ID, ['Reviewer']) # no treating_group: NOK self.assertFalse(view.can_do_transition('propose_to_agent')) # tg ok, following states self.imail.treating_groups = get_registry_organizations()[0] api.portal.set_registry_record(AUC_RECORD, 'no_check') self.assertTrue(view.can_do_transition('propose_to_n_plus_2')) self.assertFalse(view.can_do_transition('propose_to_n_plus_1')) self.assertFalse(view.can_do_transition('propose_to_agent')) # tg ok, following states: no more n_plus_ user groupname2 = '{}_n_plus_2'.format(self.imail.treating_groups) api.group.remove_user(groupname=groupname2, username='******') self.assertFalse(group_has_user(groupname2)) self.assertFalse(view.can_do_transition('propose_to_n_plus_2')) self.assertTrue(view.can_do_transition('propose_to_n_plus_1')) self.assertFalse(view.can_do_transition('propose_to_agent')) groupname1 = '{}_n_plus_1'.format(self.imail.treating_groups) api.group.remove_user(groupname=groupname1, username='******') self.assertFalse(group_has_user(groupname1)) self.assertFalse(view.can_do_transition('propose_to_n_plus_2')) self.assertFalse(view.can_do_transition('propose_to_n_plus_1')) self.assertTrue(view.can_do_transition('propose_to_agent')) # tg ok, assigner_user nok, auc ok api.portal.set_registry_record(AUC_RECORD, 'n_plus_1') self.assertFalse( view.can_do_transition('propose_to_n_plus_1')) # no user self.assertTrue(view.can_do_transition( 'propose_to_agent')) # ok because no n+1 level # tg ok, assigner_user nok, auc nok api.portal.set_registry_record(AUC_RECORD, 'mandatory') self.assertFalse(view.can_do_transition('propose_to_agent')) # tg ok, state ok, assigner_user ok, auc nok self.imail.assigned_user = '******' self.assertTrue(view.can_do_transition('propose_to_agent')) # WE DO TRANSITION api.group.add_user(groupname=groupname2, username='******') api.content.transition(self.imail, 'propose_to_n_plus_2') self.assertEqual(api.content.get_state(self.imail), 'proposed_to_n_plus_2') # tg ok, state ok, assigner_user nok, auc nok self.imail.assigned_user = None self.assertFalse(view.can_do_transition('propose_to_n_plus_1')) self.assertFalse(view.can_do_transition('propose_to_agent')) self.assertTrue(view.can_do_transition('back_to_creation')) self.assertTrue(view.can_do_transition('back_to_manager')) # WE DO TRANSITION api.group.add_user(groupname=groupname1, username='******') api.content.transition(self.imail, 'propose_to_n_plus_1') self.assertEqual(api.content.get_state(self.imail), 'proposed_to_n_plus_1') self.assertFalse(view.can_do_transition('propose_to_agent')) self.assertTrue(view.can_do_transition('back_to_n_plus_2')) self.assertFalse(view.can_do_transition('back_to_creation')) self.assertFalse(view.can_do_transition('back_to_manager')) # we remove n+2 users api.group.remove_user(groupname=groupname2, username='******') self.assertFalse(view.can_do_transition('back_to_n_plus_2')) self.assertTrue(view.can_do_transition('back_to_creation')) self.assertTrue(view.can_do_transition('back_to_manager')) # WE DO TRANSITION self.imail.assigned_user = '******' api.content.transition(self.imail, 'propose_to_agent') self.assertEqual(api.content.get_state(self.imail), 'proposed_to_agent') self.assertTrue(view.can_do_transition('back_to_n_plus_1')) self.assertFalse(view.can_do_transition('back_to_n_plus_2')) self.assertFalse(view.can_do_transition('back_to_creation')) self.assertFalse(view.can_do_transition('back_to_manager')) # we remove n+1 users api.group.remove_user(groupname=groupname1, username='******') api.group.add_user(groupname=groupname2, username='******') self.assertTrue(view.can_do_transition('back_to_n_plus_2')) self.assertFalse(view.can_do_transition('back_to_n_plus_1')) self.assertFalse(view.can_do_transition('back_to_creation')) self.assertFalse(view.can_do_transition('back_to_manager'))