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
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'")
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 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)
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())
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), '-')
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())
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)
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
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' ])
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' )
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'})
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'])
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')
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")
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())
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'*****@*****.**')
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())
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]])
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)
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: "')
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']
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'')
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())
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_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' ])
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_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')))
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)