예제 #1
0
 def setUp(self):
     # you'll want to use this to set up anything you need for your tests
     # below
     self.portal = self.layer['portal']
     setRoles(self.portal, TEST_USER_ID, ['Manager'])
     self.imail = sub_create(self.portal['incoming-mail'],
                             'dmsincomingmail', datetime.now(), 'my-id')
     self.omail = sub_create(self.portal['outgoing-mail'],
                             'dmsoutgoingmail', datetime.now(), 'my-id')
     self.maxDiff = None
예제 #2
0
 def test_UtilsMethods_highest_scan_id(self):
     imail = sub_create(self.portal['incoming-mail'], 'dmsincomingmail',
                        datetime.now(), 'my-id')
     view = UtilsMethods(imail, imail.REQUEST)
     self.assertEqual(
         view.highest_scan_id(),
         "dmsmainfiles: '9', highest scan_id: '050999900000009'")
예제 #3
0
 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'))
예제 #4
0
 def setUp(self):
     self.portal = self.layer['portal']
     setRoles(self.portal, TEST_USER_ID, ['Manager'])
     self.pw = self.portal.portal_workflow
     self.imw = self.pw['incomingmail_workflow']
     self.imail = sub_create(self.portal['incoming-mail'],
                             'dmsincomingmail', datetime.now(), 'test',
                             **{'title': u'test'})
     api.group.create('abc_group_encoder', 'ABC group encoder')
     self.portal.portal_setup.runImportStepFromProfile(
         'profile-imio.dms.mail:singles',
         'imiodmsmail-im_n_plus_1_wfadaptation',
         run_dependencies=False)
     sva = IMServiceValidation()
     n_plus_2_params = {
         'validation_level': 2,
         'state_title': u'Valider par le chef de département',
         'forward_transition_title': u'Proposer au chef de département',
         'backward_transition_title': u'Renvoyer au chef de département',
         'function_title': u'chef de département'
     }
     adapt_is_applied = sva.patch_workflow('incomingmail_workflow',
                                           **n_plus_2_params)
     if adapt_is_applied:
         add_applied_adaptation(
             'imio.dms.mail.wfadaptations.IMServiceValidation',
             'incomingmail_workflow', True, **n_plus_2_params)
     for uid in get_registry_organizations():
         self.portal.acl_users.source_groups.addPrincipalToGroup(
             'chef', "%s_n_plus_2" % uid)
예제 #5
0
 def test_OMMCTV(self):
     omail = sub_create(self.portal['outgoing-mail'],
                        'dmsoutgoingmail',
                        datetime.now(),
                        'my-id',
                        title='My title',
                        mail_type='type1')
     view = omail.restrictedTraverse('@@view')
     view.update()
     # the title from the vocabulary is well rendered
     self.assertIn('Type 1', view.widgets['mail_type'].render())
     # We deactivate the courrier mail type, the missing value is managed
     settings = getUtility(IRegistry).forInterface(IImioDmsMailConfig,
                                                   False)
     mail_types = settings.omail_types
     mail_types[0]['active'] = False
     settings.omail_types = mail_types
     voc_inst = getUtility(IVocabularyFactory,
                           'imio.dms.mail.OMActiveMailTypesVocabulary')
     self.assertNotIn('type1', [t.value for t in voc_inst(omail)])
     view.updateWidgets()
     self.assertIn('Type 1', view.widgets['mail_type'].render())
     # We remove the courrier mail type, the missing value cannot be managed anymore
     settings.omail_types = settings.omail_types[1:]
     view.updateWidgets()
     self.assertNotIn('Type 1', view.widgets['mail_type'].render())
     self.assertIn('Missing', view.widgets['mail_type'].render())
예제 #6
0
 def test_SenderColumn(self):
     column = SenderColumn(self.portal, self.portal.REQUEST, self.mail_table)
     brain = self.portal.portal_catalog(UID=self.im5.UID())[0]
     self.assertEqual(column.renderCell(brain),
                      u"<a href='http://nohost/plone/contacts/jeancourant/agent-electrabel' target='_blank' "
                      "class='pretty_link link-tooltip'><span class='pretty_link_icons'><img title='Held position' "
                      "src='http://nohost/plone/held_position_icon.png' /></span><span class='pretty_link_content'"
                      ">Monsieur Jean Courant, Agent (Electrabel)</span></a>")
     # multiple senders
     self.im5.sender.append(RelationValue(self.intids.getId(self.portal['contacts']['sergerobinet'])))
     self.im5.reindexObject(idxs=['sender_index'])
     brain = self.portal.portal_catalog(UID=self.im5.UID())[0]
     rendered = column.renderCell(brain)
     self.assertIn('<ul class="contacts_col"><li>', rendered)
     self.assertEqual(rendered.count('<a href'), 2)
     # no sender
     imail = sub_create(self.portal['incoming-mail'], 'dmsincomingmail', datetime.now(), 'my-id',
                        **{'title': u'My title', 'description': u'Description'})
     brain = self.portal.portal_catalog(UID=imail.UID())[0]
     self.assertEqual(column.renderCell(brain), '-')
     # sender not found: we delete it
     self.im5.sender = self.im5.sender[0:1]
     self.im5.reindexObject(idxs=['sender_index'])
     api.content.delete(obj=self.portal['contacts']['jeancourant']['agent-electrabel'], check_linkintegrity=False)
     brain = self.portal.portal_catalog(UID=self.im5.UID())[0]
     self.assertEqual(column.renderCell(brain), '-')
예제 #7
0
 def test_OdmUtilsMethods_can_be_sent(self):
     omail = sub_create(self.portal['outgoing-mail'],
                        'dmsoutgoingmail',
                        datetime.now(),
                        'test-id',
                        title=u'test')
     self.assertEqual(api.content.get_state(omail), 'created')
     view = OdmUtilsMethods(omail, omail.REQUEST)
     # no treating_groups
     self.assertFalse(view.can_be_sent())
     omail.treating_groups = get_registry_organizations()[
         0]  # direction-generale
     # admin
     self.assertTrue(view.can_be_sent())
     setRoles(self.portal, TEST_USER_ID, ['Member'])
     # define as email
     omail.send_modes = [u'email']
     self.assertTrue(omail.is_email())
     self.assertFalse(view.can_be_sent())
     omail.email_status = u'sent at ...'
     self.assertTrue(view.can_be_sent())
     # define as normal mail
     omail.send_modes = [u'post']
     self.assertFalse(omail.is_email())
     self.assertFalse(view.can_be_sent())
     createContentInContainer(omail, 'dmsommainfile')
     self.assertTrue(view.can_be_sent())
예제 #8
0
    def test_state_group_index(self):
        dguid = self.pgof['direction-generale'].UID()
        imail = sub_create(
            self.portal['incoming-mail'], 'dmsincomingmail', datetime.now(),
            'id1', **{
                'title': u'test',
                'treating_groups': dguid,
                'assigned_user': u'chef'
            })
        indexer = state_group_index(imail)
        self.assertEqual(indexer(), 'created')
        api.content.transition(obj=imail, to_state='proposed_to_manager')
        self.assertEqual(indexer(), 'proposed_to_manager')
        api.content.transition(obj=imail, to_state='proposed_to_agent')
        self.assertEqual(indexer(), 'proposed_to_agent')

        task = createContentInContainer(imail, 'task', assigned_group=dguid)
        indexer = state_group_index(task)
        self.assertEqual(indexer(), 'created')
        # simulate adaptation
        add_applied_adaptation(
            'imio.dms.mail.wfadaptations.TaskServiceValidation',
            'task_workflow', False)
        api.group.create(groupname='{}_n_plus_1'.format(dguid),
                         groups=['chef'])
        api.content.transition(obj=task, transition='do_to_assign')
        self.assertEqual(indexer(), 'to_assign')
        set_dms_config(['review_states', 'task'],
                       OrderedDict([('to_assign', {
                           'group': '_n_plus_1',
                           'org': 'assigned_group'
                       })]))
        self.assertEqual(indexer(), 'to_assign,%s' % dguid)
예제 #9
0
 def test_back_or_again_state(self):
     imail = sub_create(
         self.portal['incoming-mail'], 'dmsincomingmail', datetime.now(),
         'test', **{
             'assigned_user':
             u'agent',
             'title':
             u'test',
             'treating_groups':
             self.pgof['direction-generale']['secretariat'].UID()
         })
     self.assertEqual(back_or_again_state(imail),
                      '')  # initial state: no action
     api.content.transition(obj=imail, transition='propose_to_manager')
     self.assertEqual(back_or_again_state(imail), '')  # second state: empty
     api.content.transition(obj=imail, transition='propose_to_agent')
     self.assertEqual(back_or_again_state(imail), '')  # third state: empty
     api.content.transition(obj=imail, transition='back_to_manager')
     self.assertEqual(back_or_again_state(imail),
                      'back')  # we have a back action starting with back_
     api.content.transition(obj=imail, transition='back_to_creation')
     self.assertEqual(back_or_again_state(imail),
                      'back')  # we have a back action starting with back_
     self.assertEqual(
         back_or_again_state(imail, transitions=['back_to_creation']),
         'back')  # we have a back action found in transitions parameter
     api.content.transition(obj=imail, transition='propose_to_agent')
     self.assertEqual(back_or_again_state(imail),
                      'again')  # third state again
예제 #10
0
 def test_list_wf_states(self):
     imail = sub_create(self.portal['incoming-mail'], 'dmsincomingmail',
                        datetime.now(), 'my-id')
     self.assertEqual(list_wf_states(imail, 'unknown'), [])
     self.assertEqual(
         [s_id for s_id, s_tit in list_wf_states(imail, 'task')], [
             'created', 'to_assign', 'to_do', 'in_progress', 'realized',
             'closed'
         ])
     # We rename a state id
     states = imail.portal_workflow.task_workflow.states
     states.manage_renameObject('to_do', 'NEW')
     # use cache
     self.assertEqual(
         [s_id for s_id, s_tit in list_wf_states(imail, 'task')], [
             'created', 'to_assign', 'to_do', 'in_progress', 'realized',
             'closed'
         ])
     invalidate_cachekey_volatile_for(
         'imio.dms.mail.utils.list_wf_states.task')
     # 'imio.dms.mail.utils.list_wf_states
     self.assertEqual(
         [s_id for s_id, s_tit in list_wf_states(imail, 'task')], [
             'created', 'to_assign', 'in_progress', 'realized', 'closed',
             'NEW'
         ])
예제 #11
0
 def test_ScanSearchableExtender(self):
     imail = sub_create(self.portal['incoming-mail'], 'dmsincomingmail',
                        datetime.now(), 'id1')
     obj = createContentInContainer(imail,
                                    'dmsmainfile',
                                    id='testid1.pdf',
                                    title='title',
                                    description='description')
     ext = ScanSearchableExtender(obj)
     self.assertEqual(ext(), 'testid1 title description')
     obj = createContentInContainer(imail,
                                    'dmsmainfile',
                                    id='testid1',
                                    title='title.pdf',
                                    description='description')
     ext = ScanSearchableExtender(obj)
     self.assertEqual(ext(), 'testid1 title description')
     obj = createContentInContainer(imail,
                                    'dmsmainfile',
                                    id='testid2.pdf',
                                    title='testid2.PDF',
                                    description='description')
     ext = ScanSearchableExtender(obj)
     self.assertEqual(ext(), 'testid2 description')
     obj = createContentInContainer(imail,
                                    'dmsmainfile',
                                    id='010999900000690.pdf',
                                    title='010999900000690.pdf',
                                    description='description',
                                    scan_id='010999900000690')
     ext = ScanSearchableExtender(obj)
     self.assertEqual(ext(),
                      '010999900000690 IMIO010999900000690 description')
     obj = createContentInContainer(imail,
                                    'dmsmainfile',
                                    id='010999900001691.pdf',
                                    title='title',
                                    description='description',
                                    scan_id='010999900001691')
     ext = ScanSearchableExtender(obj)
     self.assertEqual(
         ext(),
         '010999900001691 title IMIO010999900001691 1691 description')
     fh = open('testfile.txt', 'w+')
     fh.write("One word\n")
     fh.seek(0)
     file_object = NamedBlobFile(fh.read(), filename=u'testfile.txt')
     obj = createContentInContainer(imail,
                                    'dmsmainfile',
                                    id='testid2',
                                    title='title',
                                    description='description',
                                    file=file_object,
                                    scan_id='010999900000690')
     ext = ScanSearchableExtender(obj)
     self.assertEqual(
         ext(),
         'testid2 title 010999900000690 IMIO010999900000690 description One word\n'
     )
예제 #12
0
 def test_UtilsMethods_current_user_groups_ids(self):
     imail = sub_create(self.portal['incoming-mail'], 'dmsincomingmail',
                        datetime.now(), 'my-id')
     view = UtilsMethods(imail, imail.REQUEST)
     login(self.portal, 'dirg')
     self.assertSetEqual(
         set(view.current_user_groups_ids(api.user.get_current())),
         {'AuthenticatedUsers', 'createurs_dossier', 'dir_general'})
예제 #13
0
 def test_get_scan_id(self):
     imail = sub_create(self.portal['incoming-mail'], 'dmsincomingmail',
                        datetime.now(), 'my-id')
     obj = createContentInContainer(imail,
                                    'dmsmainfile',
                                    id='testid1.pdf',
                                    scan_id=u'010999900000690')
     self.assertListEqual(
         get_scan_id(obj),
         [u'010999900000690', u'IMIO010999900000690', u'690'])
예제 #14
0
 def setUp(self):
     self.portal = self.layer['portal']
     setRoles(self.portal, TEST_USER_ID, ['Manager'])
     self.pw = self.portal.portal_workflow
     self.omw = self.pw['outgoingmail_workflow']
     api.group.create('abc_group_encoder', 'ABC group encoder')
     self.omail = sub_create(self.portal['outgoing-mail'],
                             'dmsoutgoingmail',
                             datetime.now(),
                             'test-id',
                             title=u'Test')
예제 #15
0
 def test_AssignedGroupColumn(self):
     group0 = get_registry_organizations()[0]
     imail = sub_create(self.portal['incoming-mail'], 'dmsincomingmail',
                        datetime.now(), 'my-id')
     task = createContentInContainer(imail,
                                     'task',
                                     id='testid1',
                                     assigned_group=group0)
     col = AssignedGroupColumn(self.portal, self.portal.REQUEST, None)
     self.assertEqual(
         col.renderCell(task).encode('utf8'), "Direction générale")
예제 #16
0
 def test_IdmUtilsMethods_created_col_cond(self):
     imail = sub_create(self.portal['incoming-mail'], 'dmsincomingmail',
                        datetime.now(), 'my-id')
     view = IdmUtilsMethods(imail, imail.REQUEST)
     self.assertFalse(view.created_col_cond())
     login(self.portal, 'encodeur')
     self.assertTrue(view.created_col_cond())
     login(self.portal, 'agent')
     self.assertFalse(view.created_col_cond())
     api.group.add_user(groupname='abc_group_encoder', username='******')
     self.assertTrue(view.created_col_cond())
예제 #17
0
 def test_im_sender_email_index(self):
     dguid = self.pgof['direction-generale'].UID()
     imail = sub_create(
         self.portal['incoming-mail'], 'dmsincomingmail', datetime.now(),
         'id1', **{
             'title': u'test',
             'treating_groups': dguid,
             'assigned_user': u'chef',
             'orig_sender_email': u'"Dexter Morgan" <*****@*****.**>'
         })
     indexer = im_sender_email_index(imail)
     self.assertEqual(indexer(), u'*****@*****.**')
예제 #18
0
 def test_OdmUtilsMethods_can_be_handsigned(self):
     omail = sub_create(self.portal['outgoing-mail'], 'dmsoutgoingmail',
                        datetime.now(), 'test-id')
     self.assertEqual(api.content.get_state(omail), 'created')
     view = OdmUtilsMethods(omail, omail.REQUEST)
     self.assertFalse(view.can_be_handsigned())
     createContentInContainer(omail, 'task')
     self.assertFalse(view.can_be_handsigned())
     createContentInContainer(omail, 'dmsappendixfile')
     self.assertFalse(view.can_be_handsigned())
     createContentInContainer(omail, 'dmsommainfile')
     self.assertTrue(view.can_be_handsigned())
예제 #19
0
 def test_dmsdocument_modified(self):
     # owner changing test
     orgs = get_registry_organizations()
     with api.env.adopt_user(username='******'):
         imail = sub_create(
             self.portal['incoming-mail'], 'dmsincomingmail',
             datetime.now(), 'my-id', **{
                 'title': u'IMail created by scanner',
                 'treating_groups': orgs[0]
             })
         dfile = createContentInContainer(
             imail, 'dmsmainfile', **{'title': 'File created by scanner'})
     self.assertEquals(imail.Creator(), 'scanner')
     self.assertEquals(imail.owner_info()['id'], 'scanner')
     self.assertEquals(imail.get_local_roles_for_userid('scanner'),
                       ('Owner', ))
     self.assertEquals(dfile.Creator(), 'scanner')
     self.assertEquals(dfile.owner_info()['id'], 'scanner')
     self.assertEquals(dfile.get_local_roles_for_userid('scanner'),
                       ('Owner', ))
     with api.env.adopt_user(username='******'):
         imail.setTitle('IMail modified by encodeur')
         zope.event.notify(ObjectModifiedEvent(imail))
     self.assertEquals(imail.Creator(), 'encodeur')
     self.assertEquals(imail.owner_info()['id'], 'encodeur')
     self.assertEquals(imail.get_local_roles_for_userid('encodeur'),
                       ('Owner', ))
     self.assertEquals(imail.get_local_roles_for_userid('scanner'), ())
     self.assertEquals(dfile.Creator(), 'encodeur')
     self.assertEquals(dfile.owner_info()['id'], 'encodeur')
     self.assertEquals(dfile.get_local_roles_for_userid('encodeur'),
                       ('Owner', ))
     self.assertEquals(dfile.get_local_roles_for_userid('scanner'), ())
     # tasks update test
     task1 = api.content.create(container=imail,
                                type='task',
                                title='task1',
                                id='t1',
                                assigned_group=orgs[1])
     self.assertListEqual(task1.parents_assigned_groups, [orgs[0]])
     task2 = api.content.create(container=task1,
                                type='task',
                                title='task2',
                                id='t2',
                                assigned_group=orgs[2])
     self.assertListEqual(task2.parents_assigned_groups, [orgs[0], orgs[1]])
     imail.treating_groups = orgs[4]
     zope.event.notify(
         ObjectModifiedEvent(imail, Attributes(Interface,
                                               'treating_groups')))
     self.assertListEqual(task1.parents_assigned_groups, [orgs[4]])
     self.assertListEqual(task2.parents_assigned_groups, [orgs[4], orgs[1]])
예제 #20
0
 def setUp(self):
     self.portal = self.layer['portal']
     setRoles(self.portal, TEST_USER_ID, ['Manager'])
     self.pw = self.portal.portal_workflow
     self.imw = self.pw['incomingmail_workflow']
     api.group.create('abc_group_encoder', 'ABC group encoder')
     self.imail = sub_create(self.portal['incoming-mail'],
                             'dmsincomingmail', datetime.now(), 'test',
                             **{'title': u'test'})
     self.portal.portal_setup.runImportStepFromProfile(
         'profile-imio.dms.mail:singles',
         'imiodmsmail-im_n_plus_1_wfadaptation',
         run_dependencies=False)
예제 #21
0
 def test_VersionsTitleColumn(self):
     imail = sub_create(self.portal['incoming-mail'], 'dmsincomingmail',
                        datetime.now(), 'my-id')
     createContentInContainer(imail,
                              'dmsmainfile',
                              id='testid1',
                              title='title',
                              scan_id='123456789')
     # Cannot use scan_date because toLocalizedTime causes error in test
     brains = self.portal.portal_catalog(portal_type='dmsmainfile',
                                         id='testid1')
     self.assertEqual(len(brains), 1)
     col = IMVersionsTitleColumn(self.portal, self.portal.REQUEST, None)
     self.assertEqual(
         col.getLinkTitle(brains[0]),
         u'title="scan_id: 123456789\nscan_date: \nVersion: "')
예제 #22
0
 def setUp(self):
     self.portal = self.layer['portal']
     setRoles(self.portal, TEST_USER_ID, ['Manager'])
     intids = getUtility(IIntIds)
     self.imail = sub_create(
         self.portal['incoming-mail'], 'dmsincomingmail', datetime.now(),
         'c1', **{
             'sender': [
                 RelationValue(
                     intids.getId(self.portal.contacts['electrabel']))
             ],
             'mail_type':
             u'courrier',
             'title':
             u'title'
         })
     self.omf = self.portal['outgoing-mail']
예제 #23
0
 def test_view(self):
     setRoles(self.portal, TEST_USER_ID, ['Contributor', 'Reviewer'])
     imail = sub_create(self.portal['incoming-mail'], 'dmsincomingmail', datetime.now(), 'my-id')
     self.assertEqual(api.content.get_state(imail), 'created')
     view = IMView(imail, imail.REQUEST)
     api.portal.set_registry_record(AUC_RECORD, 'mandatory')
     view.update()  # BEWARE can be called only once (plone.autoform.view.py) !
     # no treating_groups: cannot do anything
     self.assertEquals(view.widgets['ITask.assigned_user'].field.description, u'')
     # no assigned_user but mandatory
     imail.treating_groups = get_registry_organizations()[0]
     view.updateWidgets()  # because update() can be called only once
     self.assertEquals(view.widgets['ITask.assigned_user'].field.description,
                       u'You must select an assigned user before you can propose to an agent !')
     # no assigned user but mandatory only for n_plus_1 level
     api.portal.set_registry_record(AUC_RECORD, 'n_plus_1')
     view.updateWidgets()
     self.assertEquals(view.widgets['ITask.assigned_user'].field.description, u'')
예제 #24
0
 def test_ready_for_email_index(self):
     omail = sub_create(self.portal['outgoing-mail'],
                        'dmsoutgoingmail',
                        datetime.now(),
                        'my-id',
                        title='My title',
                        description='Description',
                        send_modes=['post'])
     indexer = ready_for_email_index(omail)
     # not an email
     self.assertFalse(indexer())
     # email without docs
     omail.send_modes = ['email']
     self.assertTrue(indexer())
     # email with a doc not signed
     createContentInContainer(omail, 'dmsommainfile')
     self.assertFalse(indexer())
     # email with another doc signed
     createContentInContainer(omail, 'dmsommainfile', signed=True)
     self.assertTrue(indexer())
예제 #25
0
 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'))
예제 #26
0
 def test_OdmSearchableExtender(self):
     omail = sub_create(self.portal['outgoing-mail'],
                        'dmsoutgoingmail',
                        datetime.now(),
                        'my-id',
                        title='My title',
                        description='Description')
     ext = OdmSearchableExtender(omail)
     self.assertEqual(ext(), None)
     createContentInContainer(omail,
                              'dmsommainfile',
                              id='testid1',
                              scan_id='011999900000690')
     self.assertEqual(ext(), u'011999900000690 IMIO011999900000690 690')
     pc = omail.portal_catalog
     rid = pc(id='my-id')[0].getRID()
     index_value = pc._catalog.getIndex("SearchableText").getEntryForObject(
         rid, default=[])
     self.assertListEqual(index_value, [
         's0010', 'my', 'title', 'description', u'011999900000690',
         'imio011999900000690', u'690'
     ])
     createContentInContainer(omail,
                              'dmsommainfile',
                              id='testid2',
                              scan_id='011999900000700')
     self.assertEqual(
         ext(),
         u'011999900000690 IMIO011999900000690 690 011999900000700 IMIO011999900000700 700'
     )
     index_value = pc._catalog.getIndex("SearchableText").getEntryForObject(
         rid, default=[])
     self.assertListEqual(index_value, [
         's0010', 'my', 'title', 'description', u'011999900000690',
         'imio011999900000690', u'690', u'011999900000700',
         'imio011999900000700', u'700'
     ])
예제 #27
0
 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())
예제 #28
0
 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'])
예제 #29
0
 def test_UtilsMethods_is_in_user_groups(self):
     imail = sub_create(self.portal['incoming-mail'], 'dmsincomingmail',
                        datetime.now(), 'my-id')
     view = UtilsMethods(imail, imail.REQUEST)
     self.assertListEqual(
         view.current_user_groups_ids(api.user.get_current()),
         ['AuthenticatedUsers'])
     # current user is Manager
     self.assertTrue(view.is_in_user_groups(groups=['abc']))
     self.assertFalse(view.is_in_user_groups(groups=['abc'], admin=False))
     self.assertFalse(
         view.is_in_user_groups(groups=['abc'], admin=False, test='all'))
     self.assertFalse(
         view.is_in_user_groups(groups=['abc'],
                                admin=False,
                                suffixes=['general']))
     # current user is not Manager
     login(self.portal, 'dirg')
     self.assertSetEqual(
         set(view.current_user_groups_ids(api.user.get_current())),
         {'AuthenticatedUsers', 'createurs_dossier', 'dir_general'})
     # with groups
     self.assertFalse(view.is_in_user_groups(groups=['abc']))
     self.assertTrue(view.is_in_user_groups(groups=['abc', 'dir_general']))
     self.assertFalse(
         view.is_in_user_groups(groups=['abc', 'dir_general'], test='all'))
     self.assertTrue(
         view.is_in_user_groups(
             groups=['AuthenticatedUsers', 'dir_general'], test='all'))
     self.assertFalse(
         view.is_in_user_groups(groups=['dir_general'], test='other'))
     # with suffixes
     self.assertTrue(view.is_in_user_groups(suffixes=['general']))
     self.assertTrue(
         view.is_in_user_groups(groups=['abc'], suffixes=['general']))
     self.assertFalse(
         view.is_in_user_groups(groups=['abc'],
                                suffixes=['general'],
                                test='all'))
     self.assertTrue(
         view.is_in_user_groups(groups=['AuthenticatedUsers'],
                                suffixes=['general'],
                                test='all'))
     # with org_uid, but without suffixes: not considered
     self.assertFalse(view.is_in_user_groups(groups=['abc'], org_uid='dir'))
     self.assertTrue(
         view.is_in_user_groups(groups=['abc', 'dir_general'],
                                org_uid='dir'))
     self.assertFalse(
         view.is_in_user_groups(groups=['abc', 'dir_general'],
                                test='all',
                                org_uid='dir'))
     self.assertFalse(
         view.is_in_user_groups(groups=['dir_general'],
                                test='other',
                                org_uid='dir'))
     # with org_uid and suffixes
     self.assertTrue(
         view.is_in_user_groups(suffixes=['general'], org_uid='dir'))
     self.assertFalse(
         view.is_in_user_groups(suffixes=['general'], org_uid='wrong'))
     self.assertTrue(
         view.is_in_user_groups(groups=['abc'],
                                suffixes=['general'],
                                org_uid='dir'))
     self.assertFalse(
         view.is_in_user_groups(groups=['abc'],
                                suffixes=['general'],
                                org_uid='wrong'))
     self.assertTrue(
         view.is_in_user_groups(groups=['dir_general'],
                                suffixes=['general'],
                                org_uid='wrong'))
     self.assertFalse(
         view.is_in_user_groups(groups=['abc'],
                                test='all',
                                suffixes=['general'],
                                org_uid='dir'))
     self.assertTrue(
         view.is_in_user_groups(groups=['dir_general'],
                                test='all',
                                suffixes=['general'],
                                org_uid='dir'))
     logout()
     login(self.portal, 'agent')
     self.assertFalse(
         view.is_in_user_groups(suffixes=['general'], org_uid='dir'))
     self.assertTrue(
         view.is_in_user_groups(groups=['AuthenticatedUsers'],
                                suffixes=['general'],
                                org_uid='dir'))
     self.assertTrue(
         view.is_in_user_groups(suffixes=['general'],
                                org_uid='dir',
                                user=api.user.get('dirg')))
예제 #30
0
def create_im_mails(tc,
                    start=1,
                    end=100,
                    senders=[],
                    transitions=[],
                    by_days=200):
    """Create a number of im"""
    print('Creating {} incoming mails'.format(end - start + 1))
    import imio.dms.mail as imiodmsmail
    filespath = "%s/batchimport/toprocess/incoming-mail" % imiodmsmail.__path__[
        0]
    files = [
        unicode(name) for name in os.listdir(filespath)
        if os.path.splitext(name)[1][1:] in ('pdf', 'doc', 'jpg')
    ]
    files_cycle = cycle(files)

    intids = getUtility(IIntIds)
    isenders = [intids.getId(ct) for ct in senders]
    senders_cycle = cycle(isenders)

    services = get_registry_organizations()
    selected_orgs = [
        org for i, org in enumerate(services) if i in (0, 1, 2, 4, 5, 6)
    ]
    orgas_cycle = cycle(selected_orgs)

    ifld = tc.layer['portal']['incoming-mail']
    setattr(ifld, 'folder_period', u'day')
    with api.env.adopt_user(username='******'):
        days = 0
        for i in range(start, end + 1):
            if i % by_days == 0:
                days += 1
            mid = 'im{}'.format(i)
            if mid not in ifld:
                scan_date = datetime.datetime.now() - datetime.timedelta(
                    days=days)
                params = {
                    'title': 'Courrier %d' % i,
                    'mail_type': 'courrier',
                    'internal_reference_no': 'E{:04d}'.format(i),
                    'reception_date': scan_date,
                    # 'sender': [RelationValue(senders_cycle.next())],
                    'treating_groups': orgas_cycle.next(),
                    'recipient_groups':
                    [services[3]],  # Direction générale, communication
                    'description':
                    'Ceci est la description du courrier %d' % i,
                }
                t_st = datetime.datetime.now()
                mail = sub_create(ifld, 'dmsincomingmail', scan_date, mid,
                                  **params)
                if i == start or i % 1000 == 0:
                    print("Creation time at {}: '{}'".format(
                        i,
                        datetime.datetime.now() - t_st))
                filename = files_cycle.next()
                with open("%s/%s" % (filespath, filename), 'rb') as fo:
                    file_object = NamedBlobFile(fo.read(), filename=filename)
                    createContentInContainer(mail,
                                             'dmsmainfile',
                                             title='',
                                             file=file_object,
                                             scan_id='0509999{:08d}'.format(i),
                                             scan_date=scan_date)
                do_transitions(mail, transitions)