def test_set_showroom_vars_correctly(self, browser): self.login(self.regular_user, browser=browser) catalog = api.portal.get_tool('portal_catalog') search_view = getMultiAdapter((self.portal, self.request), name="search") brains = catalog({ 'portal_type': 'opengever.document.document', 'sort_on': 'sortable_title', 'SearchableText': "Foo" }) brains = [ obj2brain(obj) for obj in [self.document, self.dossier, self.subdocument] ] search_view.calculate_showroom_configuration(IContentListing(brains)) self.assertEqual(2, search_view.number_of_documents) self.assertEqual(0, search_view.offset) brains = [obj2brain(obj) for obj in [self.task, self.subdossier]] search_view.calculate_showroom_configuration(IContentListing(brains)) self.assertEqual(0, search_view.number_of_documents) self.assertEqual(0, search_view.offset)
def test_author_indexers(self): """check the author indexers.""" doc1 = createContentInContainer(self.portal, 'opengever.document.document', title=u"Doc One", document_author=u'Hugo Boss', document_date=datetime.date( 2011, 1, 1)) self.assertEquals(obj2brain(doc1).document_author, 'Hugo Boss') self.assertEquals( index_data_for(doc1).get('sortable_author'), u'Hugo Boss') # without a author doc1.document_author = None doc1.reindexObject() self.assertEquals(obj2brain(doc1).document_author, None) self.assertEquals(index_data_for(doc1).get('sortable_author'), u'') # with a non-ascii characters including author doc1.document_author = u'H\xfcgo B\xf6ss' doc1.reindexObject() self.assertEquals( obj2brain(doc1).document_author, 'H\xc3\xbcgo B\xc3\xb6ss') self.assertEquals( index_data_for(doc1).get('sortable_author'), u'H\xfcgo B\xf6ss')
def test_full_values_rendering(self): self.listing.items = [obj2brain(self.dossier), obj2brain(self.subdossier)] table = lxml.html.fromstring(self.listing.template()) rows = table.xpath(CSSSelector('tbody tr').path) self.assert_row_values( ['Client1 1.1 / 1', '1', '1.1. Repository XY', 'Dossier A', 'Admin Unit 1 / Boss Hugo (hugo.boss)', 'dossier-state-resolved', '01.11.2013', '31.12.2013'], rows[0]) self.assert_row_values( ['Client1 1.1 / 1.1', '2', '1.1. Repository XY', 'Dossier B', 'Admin Unit 1 / Boss Hugo (hugo.boss)', 'dossier-state-active', '01.11.2013', ''], rows[1])
def test_Title_on_brains_uses_Title_when_type_does_not_support_translated_title(self, browser): dossier = create(Builder('dossier').titled(u'F\xfchrung')) set_preferred_language(self.portal.REQUEST, 'de') self.assertEquals("F\xc3\xbchrung", obj2brain(dossier).Title) set_preferred_language(self.portal.REQUEST, 'fr') self.assertEquals("F\xc3\xbchrung", obj2brain(dossier).Title)
def test_bulk_checkout(self): doc1 = createContentInContainer( self.portal, 'opengever.document.document', title=u'Document1', document_author=u'Hugo Boss', document_date=datetime.date(2011, 1, 1), file=NamedBlobFile('bla bla', filename=u'test.txt')) doc2 = createContentInContainer( self.portal, 'opengever.document.document', title=u'Document2', document_author=u'Hugo Boss', document_date=datetime.date(2011, 1, 1), file=NamedBlobFile('bla bla', filename=u'test.txt')) self.portal.REQUEST['paths'] = [ obj2brain(doc1).getPath(), obj2brain(doc2).getPath(), ] view = self.portal.restrictedTraverse('@@checkout_documents').render() self.assertEquals('http://nohost/plone#documents', view) self.assertEquals(TEST_USER_ID, self.get_manager(doc1).checked_out()) self.assertEquals(TEST_USER_ID, self.get_manager(doc2).checked_out())
def test_multi_checkin_does_not_checkin_locked_documents(self, browser): self.login(self.regular_user, browser) browser.open(self.document, view='tabbedview_view-overview') browser.find('Checkout and edit').click() browser.open(self.subdocument, view='tabbedview_view-overview') browser.find('Checkout and edit').click() lockable = IRefreshableLockable(self.document) lockable.lock() browser.open( self.dossier, method='POST', data={ 'paths': [ obj2brain(self.document).getPath(), obj2brain(self.subdocument).getPath(), ], 'checkin_without_comment:method': 1, '_authenticator': createToken(), }, ) manager = getMultiAdapter((self.document, self.portal.REQUEST), ICheckinCheckoutManager) self.assertEquals('kathi.barfuss', manager.get_checked_out_by()) manager = getMultiAdapter((self.subdocument, self.portal.REQUEST), ICheckinCheckoutManager) self.assertEquals(None, manager.get_checked_out_by()) self.assertEquals([u'Could not check in document Vertr\xe4gsentwurf'], error_messages())
def test_bulk_checkout(self): self.portal.REQUEST["paths"] = [obj2brain(self.doc1).getPath(), obj2brain(self.doc2).getPath()] view = self.portal.restrictedTraverse("@@checkout_documents").render() self.assertEquals("http://nohost/plone#documents", view) self.assertEquals(TEST_USER_ID, self.get_manager(self.doc1).get_checked_out_by()) self.assertEquals(TEST_USER_ID, self.get_manager(self.doc2).get_checked_out_by())
def test_full_values_rendering(self): self.listing.brains = [obj2brain(self.dossier), obj2brain(self.subdossier)] table = lxml.html.fromstring(self.listing.template()) rows = table.xpath(CSSSelector('tbody tr').path) self.assertEquals( ['OG 1 / 1', '1', '1. Repository XY', 'Dossier A', 'Client1 / Boss Hugo (hugo.boss)', 'dossier-state-resolved', '01.11.2013', '31.12.2013'], [value.text_content().strip() for value in rows[0].xpath(CSSSelector('td').path)]) self.assertEquals( ['OG 1 / 1.1', '2', '1. Repository XY', 'Dossier B', 'Client1 / Boss Hugo (hugo.boss)', 'dossier-state-active', '01.11.2013', ''], [value.text_content().strip() for value in rows[1].xpath(CSSSelector('td').path)])
def test_multi_checkin_from_tabbedview_with_comment(self, browser): document2 = create(Builder("document").checked_out().within(self.dossier)) browser.login().open( self.dossier, data={ "paths": [obj2brain(self.document).getPath(), obj2brain(document2).getPath()], "checkin_documents:method": 1, "_authenticator": createToken(), }, ) # fill and submit checkin form browser.fill({"Journal Comment Describe, why you checkin the selected documents": "Checkini"}) browser.css("#form-buttons-button_checkin").first.click() manager1 = getMultiAdapter((self.document, self.portal.REQUEST), ICheckinCheckoutManager) self.assertEquals(None, manager1.get_checked_out_by()) manager2 = getMultiAdapter((document2, self.portal.REQUEST), ICheckinCheckoutManager) self.assertEquals(None, manager2.get_checked_out_by()) # check last history entry to verify the checkin repository_tool = getToolByName(document2, "portal_repository") history = repository_tool.getHistory(document2) last_entry = repository_tool.retrieve(document2, len(history) - 1) self.assertEquals("Checkini", last_entry.comment)
def test_reference_number_is_updated_in_catalog(self, browser): self.login(self.administrator, browser) self.assertEquals('Client1 1.1', obj2brain(self.leaf_repofolder).reference) browser.open(self.leaf_repofolder, view='edit') browser.fill({'Reference Prefix': u'7'}).save() self.assertEquals('Client1 1.7', obj2brain(self.leaf_repofolder).reference)
def test_multi_checkin_from_tabbedview_with_comment(self, browser): document2 = create(Builder("document") .checked_out() .within(self.dossier)) browser.login().open( self.dossier, data={'paths': [obj2brain(self.document).getPath(), obj2brain(document2).getPath()], 'checkin_documents:method': 1, '_authenticator': createToken()}) # fill and submit checkin form browser.fill({ 'Journal Comment Describe, why you checkin the selected documents': 'Checkini' }) browser.css('#form-buttons-button_checkin').first.click() manager1 = getMultiAdapter((self.document, self.portal.REQUEST), ICheckinCheckoutManager) self.assertEquals(None, manager1.get_checked_out_by()) manager2 = getMultiAdapter((document2, self.portal.REQUEST), ICheckinCheckoutManager) self.assertEquals(None, manager2.get_checked_out_by()) # check last history entry to verify the checkin repository_tool = getToolByName(document2, 'portal_repository') history = repository_tool.getHistory(document2) last_entry = repository_tool.retrieve(document2, len(history)-1) self.assertEquals('Checkini', last_entry.comment)
def test_author_indexers(self): """check the author indexers.""" doc1 = createContentInContainer( self.portal, 'opengever.document.document', title=u"Doc One", document_author=u'Hugo Boss', document_date=datetime.date(2011, 1, 1)) self.assertEquals(obj2brain(doc1).document_author, 'Hugo Boss') self.assertEquals( index_data_for(doc1).get('sortable_author'), u'Hugo Boss') # without a author doc1.document_author = None doc1.reindexObject() self.assertEquals(obj2brain(doc1).document_author, None) self.assertEquals( index_data_for(doc1).get('sortable_author'), u'') # with a non-ascii characters including author doc1.document_author = u'H\xfcgo B\xf6ss' doc1.reindexObject() self.assertEquals( obj2brain(doc1).document_author, 'H\xc3\xbcgo B\xc3\xb6ss') self.assertEquals( index_data_for(doc1).get('sortable_author'), u'H\xfcgo B\xf6ss')
def test_assigned_client(self): self.assertEquals(obj2brain(self.task).assigned_client, 'client1') self.task.responsible = 'hugo.boss' self.task.responsible_client = 'client2' self.task.reindexObject() self.assertEquals(obj2brain(self.task).assigned_client, 'client2')
def test_is_subtask(self): self.subtask = create( Builder("task").within( self.task).titled("Test task 1").having(task_type='comment')) self.assertFalse(obj2brain(self.task).is_subtask) self.assertTrue(obj2brain(self.subtask).is_subtask)
def test_is_document(self): document = create(Builder('document')) mail = create(Builder('mail')) dossier = create(Builder('dossier')) self.assertTrue(IContentListingObject(obj2brain(document)).is_document) self.assertFalse(IContentListingObject(obj2brain(mail)).is_document) self.assertFalse(IContentListingObject(obj2brain(dossier)).is_document)
def test_getIcon_returns_none_for_every_contenttype(self): self.login(self.regular_user) self.assertIsNone( IContentListingObject(obj2brain(self.dossier)).getIcon(), ) self.assertIsNone( IContentListingObject(obj2brain(self.document)).getIcon(), )
def test_Title_on_brains_uses_Title_when_type_does_not_support_translated_title( self, browser): dossier = create(Builder('dossier').titled(u'F\xfchrung')) set_preferred_language(self.portal.REQUEST, 'de') self.assertEquals("F\xc3\xbchrung", obj2brain(dossier).Title) set_preferred_language(self.portal.REQUEST, 'fr') self.assertEquals("F\xc3\xbchrung", obj2brain(dossier).Title)
def test_is_subtask(self): self.subtask = create(Builder("task").within(self.task) .titled("Test task 1") .having(task_type='comment')) self.assertFalse(obj2brain(self.task).is_subtask) self.assertTrue(obj2brain(self.subtask).is_subtask)
def test_is_removed(self): document_a = create(Builder('document')) document_b = create(Builder('document').removed()) dossier = create(Builder('dossier')) self.assertFalse(IContentListingObject(obj2brain(document_a)).is_removed) self.assertTrue( IContentListingObject(obj2brain(document_b, unrestricted=True)).is_removed) self.assertFalse(IContentListingObject(obj2brain(dossier)).is_removed)
def test_labels_are_translated_and_show_as_table_headers(self): self.listing.brains = [obj2brain(self.task), obj2brain(self.task)] table = lxml.html.fromstring(self.listing.template()) cols = table.xpath(CSSSelector('thead th').path) self.assertEquals( ['No.', 'Task type', 'Issuer', 'Responsible', 'State', 'Title', 'Deadline'], [col.text_content().strip() for col in cols])
def test_getIcon_returns_none_for_every_contenttype(self): dossier = create(Builder('dossier')) document = create(Builder('document')) self.assertEquals(None, IContentListingObject(obj2brain(dossier)).getIcon()) self.assertEquals(None, IContentListingObject(obj2brain(document)).getIcon())
def test_date_of_completion(self): self.assertEquals( obj2brain(self.task).date_of_completion, datetime(1970, 1, 1)) self.task.date_of_completion = datetime(2012, 2, 2) self.task.reindexObject() self.assertEquals( obj2brain(self.task).date_of_completion, datetime(2012, 2, 2))
def test_get_repository_title_returns_the_title_of_the_first_parental_repository_folder( self): self.assertEquals( '1.1. Repository XY', self.listing.get_repository_title(obj2brain(self.dossier))) self.assertEquals( '1.1. Repository XY', self.listing.get_repository_title(obj2brain(self.subdossier)))
def test_get_repository_title_returns_the_title_of_the_first_parental_repository_folder(self): self.assertEquals( '1.1. Repository XY', self.listing.get_repository_title(obj2brain(self.dossier))) self.assertEquals( '1.1. Repository XY', self.listing.get_repository_title( obj2brain(self.subdossier)))
def test_Title_on_brains_uses_Title_when_type_does_not_support_translated_title(self, browser): self.login(self.regular_user) set_preferred_language(self.portal.REQUEST, 'de-ch') self.assertEquals('Vertr\xc3\xa4ge mit der kantonalen Finanzverwaltung', obj2brain(self.dossier).Title) set_preferred_language(self.portal.REQUEST, 'fr-ch') self.assertEquals('Vertr\xc3\xa4ge mit der kantonalen Finanzverwaltung', obj2brain(self.dossier).Title)
def test_reference_number_of_children_is_updated_in_catalog(self, browser): self.login(self.administrator, browser) self.assertEqual( self.leaf_repofolder, aq_parent(aq_inner(self.dossier)), 'Fixture: expected self.dossier to be within self.leaf_repofolder') self.assertEquals('Client1 1.1 / 1', obj2brain(self.dossier).reference) browser.open(self.leaf_repofolder, view='edit') browser.fill({'Reference Prefix': u'7'}).save() self.assertEquals('Client1 1.7 / 1', obj2brain(self.dossier).reference)
def test_configured_width_is_set_in_the_colgroup(self): self.listing.brains = [obj2brain(self.dossier), obj2brain(self.subdossier)] table = lxml.html.fromstring(self.listing.template()) cols = table.xpath(CSSSelector('col').path) self.assertEquals( ['10%', '5%', '20%', '25%', '20%', '10%', '5%', '5%'], [col.get('width') for col in cols])
def test_assigned_client(self): self.assertEquals( obj2brain(self.task).assigned_client, 'client1') self.task.responsible = 'hugo.boss' self.task.responsible_client = 'client2' self.task.reindexObject() self.assertEquals( obj2brain(self.task).assigned_client, 'client2')
def test_ContentTypeClass_returns_the_contenttype_icon_css_class(self): dossier = create(Builder('dossier')) document = create(Builder('document')) self.assertEquals( 'contenttype-opengever-dossier-businesscasedossier', IContentListingObject(obj2brain(dossier)).ContentTypeClass()) self.assertEquals( 'contenttype-opengever-document-document', IContentListingObject(obj2brain(document)).ContentTypeClass())
def test_getIcon_returns_none_for_every_contenttype(self): dossier = create(Builder('dossier')) document = create(Builder('document')) self.assertEquals( None, IContentListingObject(obj2brain(dossier)).getIcon()) self.assertEquals( None, IContentListingObject(obj2brain(document)).getIcon())
def test_is_trashed(self): self.grant('Administrator') document_a = create(Builder('document')) document_b = create(Builder('document').trashed()) dossier = create(Builder('dossier')) self.assertFalse(IContentListingObject(obj2brain(document_a)).is_trashed) self.assertTrue( IContentListingObject(obj2brain(document_b, unrestricted=True)).is_trashed) self.assertFalse(IContentListingObject(obj2brain(dossier)).is_trashed)
def test_labels_are_translated_and_show_as_table_headers(self): self.listing.brains = [obj2brain(self.dossier), obj2brain(self.subdossier)] table = lxml.html.fromstring(self.listing.template()) cols = table.xpath(CSSSelector('thead th').path) self.assertEquals( ['Reference number', 'No.', 'Repositoryfolder', 'Title', 'Responsible', 'State', 'Start', 'End'], [col.text_content().strip() for col in cols])
def test_is_removed(self): document_a = create(Builder('document')) document_b = create(Builder('document').removed()) dossier = create(Builder('dossier')) self.assertFalse( IContentListingObject(obj2brain(document_a)).is_removed) self.assertTrue( IContentListingObject(obj2brain(document_b, unrestricted=True)).is_removed) self.assertFalse(IContentListingObject(obj2brain(dossier)).is_removed)
def test_is_document(self): self.login(self.regular_user) self.assertTrue( IContentListingObject(obj2brain(self.document)).is_document, ) self.assertFalse( IContentListingObject(obj2brain(self.mail_eml)).is_document, ) self.assertFalse( IContentListingObject(obj2brain(self.dossier)).is_document, )
def test_trash_items_mark_items_as_trashed(self, browser): self.login(self.regular_user, browser=browser) data = self.make_path_param(self.subdocument) data['_authenticator'] = createToken() browser.open(self.dossier, view="trashed", data=data) self.assertFalse(ITrashed.providedBy(self.document)) self.assertFalse(obj2brain(self.document).trashed) self.assertTrue(ITrashed.providedBy(self.subdocument)) self.assertTrue(obj2brain(self.subdocument, unrestricted=True).trashed)
def test_filesize_indexers(self): document = create( Builder("document").attach_file_containing(u"content", name=u"file.txt")) document.reindexObject() self.assertEqual(7, index_data_for(document).get('filesize')) self.assertEqual(7, obj2brain(document).filesize) document.file = None document.reindexObject() self.assertEqual(0, index_data_for(document).get('filesize')) self.assertEqual(0, obj2brain(document).filesize)
def test_ContentTypeClass_returns_the_contenttype_icon_css_class(self): self.login(self.regular_user) self.assertEquals( 'contenttype-opengever-dossier-businesscasedossier', IContentListingObject(obj2brain(self.dossier)).ContentTypeClass(), ) self.assertEquals( 'icon-docx', IContentListingObject(obj2brain(self.document)).ContentTypeClass(), )
def test_by_brain_queries_adminunit_dependent(self): self.login(self.regular_user) self.assertEquals( self.task.get_sql_object(), Task.query.by_brain(obj2brain(self.task))) # manually change admin_unit of task self.task.get_sql_object().admin_unit_id = 'additional' with self.assertRaises(NoResultFound): self.assertIsNone(Task.query.by_brain(obj2brain(self.task)))
def test_is_trashed(self): self.grant('Administrator') document_a = create(Builder('document')) document_b = create(Builder('document').trashed()) dossier = create(Builder('dossier')) self.assertFalse( IContentListingObject(obj2brain(document_a)).is_trashed) self.assertTrue( IContentListingObject(obj2brain(document_b, unrestricted=True)).is_trashed) self.assertFalse(IContentListingObject(obj2brain(dossier)).is_trashed)
def test_bulk_checkout(self): self.portal.REQUEST['paths'] = [ obj2brain(self.doc1).getPath(), obj2brain(self.doc2).getPath(), ] view = self.portal.restrictedTraverse( '@@checkout_documents')() self.assertEquals('http://nohost/plone#documents', view) self.assertEquals( TEST_USER_ID, self.get_manager(self.doc1).get_checked_out_by()) self.assertEquals( TEST_USER_ID, self.get_manager(self.doc2).get_checked_out_by())
def test_filesize_indexers(self): document = create( Builder("document") .attach_file_containing(u"content", name=u"file.txt") ) document.reindexObject() self.assertEqual(7, index_data_for(document).get('filesize')) self.assertEqual(7, obj2brain(document).filesize) document.file = None document.reindexObject() self.assertEqual(0, index_data_for(document).get('filesize')) self.assertEqual(0, obj2brain(document).filesize)
def test_Title_on_brains_uses_Title_when_type_does_not_support_translated_title( self, browser): self.login(self.regular_user) set_preferred_language(self.portal.REQUEST, 'de-ch') self.assertEquals( 'Vertr\xc3\xa4ge mit der kantonalen Finanzverwaltung', obj2brain(self.dossier).Title) set_preferred_language(self.portal.REQUEST, 'fr-ch') self.assertEquals( 'Vertr\xc3\xa4ge mit der kantonalen Finanzverwaltung', obj2brain(self.dossier).Title)
def test_filename_indexers(self): document = create( Builder("document").titled( u'D\xf6k\xfcm\xe4nt').attach_file_containing(u"content", name=u"file.txt")) document.reindexObject() self.assertEqual(u'Doekuemaent.txt', filename_indexer(document)()) self.assertEqual(u'Doekuemaent.txt', obj2brain(document).filename) document.file = None document.reindexObject() self.assertEqual(u'', filename_indexer(document)()) self.assertEqual(u'', obj2brain(document).filename)
def test_file_extension_indexers(self): document = create( Builder("document") .titled(u'D\xf6k\xfcm\xe4nt') .attach_file_containing(u"content", name=u"file.txt") ) document.reindexObject() self.assertEqual(u'.txt', index_data_for(document).get('file_extension')) self.assertEqual(u'.txt', obj2brain(document).file_extension) document.file = None document.reindexObject() self.assertEqual(u'', index_data_for(document).get('file_extension')) self.assertEqual(u'', obj2brain(document).file_extension)
def test_filename_indexers(self): document = create( Builder("document") .titled(u'D\xf6k\xfcm\xe4nt') .attach_file_containing(u"content", name=u"file.txt") ) document.reindexObject() self.assertEqual(u'Doekuemaent.txt', filename_indexer(document)()) self.assertEqual(u'Doekuemaent.txt', obj2brain(document).filename) document.file = None document.reindexObject() self.assertEqual(u'', filename_indexer(document)()) self.assertEqual(u'', obj2brain(document).filename)
def test_indexer_returns_none_for_objects_without_translated_title_support(self): dossier = create(Builder('dossier') .titled(u'Dossier A')) brain = obj2brain(dossier) self.assertEquals(None, brain.title_de) self.assertEquals(None, brain.title_fr)
def test_assign_to_dossier_stores_and_close_forwarding(self, browser): self.login(self.secretariat_user, browser=browser) url = '{}/@workflow/forwarding-transition-assign-to-dossier'.format( self.inbox_forwarding.absolute_url()) dossier_uid = obj2brain(self.empty_dossier).UID data = {'dossier': dossier_uid} browser.open(url, method='POST', data=json.dumps(data), headers=self.api_headers) self.assertEqual(200, browser.status_code) yearfolder = get_current_yearfolder(context=self.inbox) self.assertEqual(1, len(yearfolder.objectValues())) forwarding = yearfolder.objectValues()[0] self.assertEqual( 'forwarding-state-closed', api.content.get_state(forwarding)) response = IResponseContainer(forwarding)[-1] task = self.empty_dossier.objectValues()[-1] self.assertEqual( 'forwarding-transition-assign-to-dossier', response.transition) self.assertEqual(Oguid.for_object(task).id, response.successor_oguid)
def test_client_id(self): self.assertEquals(obj2brain(self.task).client_id, u'plone') registry = getUtility(IRegistry) proxy = registry.forInterface(IClientConfiguration) proxy.client_id = u'client_xy' # invalidate caches cache = queryUtility(ICacheChooser)( 'opengever.ogds.base.utils.get_client_id') cache.ramcache.invalidateAll() self.task.reindexObject() self.assertEquals( obj2brain(self.task).client_id, u'client_xy')