def test_cancel_meeting(self, browser): self.login(self.committee_responsible, browser) self.assertEquals(u'pending', self.meeting.model.workflow_state) browser.open(self.meeting) editbar.menu_option('Actions', 'Cancel').click() self.assertEquals(u'cancelled', self.meeting.model.workflow_state)
def test_closing_meeting_with_unreturned_excerpts_is_not_allowed(self, browser): """The user must decide all agenda items before the meeting can be closed. """ self.login(self.committee_responsible, browser) agendaitem = self.schedule_proposal(self.meeting, self.submitted_proposal) agendaitem.decide() self.assertEquals(u'held', self.meeting.model.workflow_state) browser.open(self.meeting) editbar.menu_option('Actions', 'Close meeting').click() self.assertEquals( {u'messages': [ {u'messageTitle': u'Error', u'message': u'The meeting cannot be closed because it' u' has undecided agenda items.', u'messageClass': u'error'}], u'proceed': False}, browser.json) self.assertEquals(u'held', self.meeting.model.workflow_state) excerpt = agendaitem.generate_excerpt("Foo") agendaitem.return_excerpt(excerpt) browser.open(self.meeting) editbar.menu_option('Actions', 'Close meeting').click() self.assertEquals(u'closed', self.meeting.model.workflow_state)
def deactivate(self, dossier, browser, use_editbar=False): if use_editbar: browser.open(dossier) editbar.menu_option('Actions', 'dossier-transition-deactivate').click() else: browser.open(dossier, view='transition-deactivate', send_authenticator=True)
def test_closing_meeting_with_unreturned_excerpts_is_not_allowed( self, browser): """The user must decide all agenda items before the meeting can be closed. """ self.login(self.committee_responsible, browser) agendaitem = self.schedule_proposal(self.meeting, self.submitted_proposal) agendaitem.decide() self.assertEquals(u'held', self.meeting.model.workflow_state) browser.open(self.meeting) editbar.menu_option('Actions', 'Close meeting').click() self.assertEquals( { u'messages': [{ u'messageTitle': u'Error', u'message': u'The meeting cannot be closed because it' u' has undecided agenda items.', u'messageClass': u'error' }], u'proceed': False }, browser.json) self.assertEquals(u'held', self.meeting.model.workflow_state) excerpt = agendaitem.generate_excerpt("Foo") agendaitem.return_excerpt(excerpt) browser.open(self.meeting) editbar.menu_option('Actions', 'Close meeting').click() self.assertEquals(u'closed', self.meeting.model.workflow_state)
def test_adding_is_not_available_in_inactive_committee(self, browser): self.login(self.committee_responsible, browser) browser.open(self.empty_committee) self.assertEqual([u'Add new', u'Actions'], editbar.menus()) editbar.menu_option('Actions', 'deactivate').click() self.assertEqual([u'Actions'], editbar.menus())
def test_sets_end_date_to_current_date(self, browser): self.login(self.secretariat_user, browser) with freeze(datetime(2016, 3, 29)): browser.open(self.empty_dossier) editbar.menu_option('Actions', 'dossier-transition-deactivate').click() self.assertEqual(date(2016, 3, 29), IDossier(self.empty_dossier).end)
def test_active_committee_can_be_deactivated(self, browser): self.login(self.committee_responsible, browser) browser.open(self.empty_committee) editbar.menu_option('Actions', 'deactivate').click() self.assertEqual(Committee.STATE_INACTIVE, self.empty_committee.load_model().get_state()) statusmessages.assert_message('Committee deactivated successfully')
def test_recursively_deactivate_subdossier(self, browser): self.login(self.secretariat_user, browser) subdossier = create(Builder('dossier').within(self.empty_dossier)) browser.open(self.empty_dossier) editbar.menu_option('Actions', 'dossier-transition-deactivate').click() statusmessages.assert_no_error_messages() self.assert_workflow_state('dossier-state-inactive', self.empty_dossier) self.assert_workflow_state('dossier-state-inactive', subdossier)
def test_deactivating_is_not_possible_when_pending_meetings_exists( self, browser): self.login(self.committee_responsible, browser) browser.open(self.committee) editbar.menu_option('Actions', 'deactivate').click() self.assertEqual(Committee.STATE_ACTIVE, self.committee.load_model().get_state()) statusmessages.assert_message('Not all meetings are closed.')
def test_shows_warning_message_committee_closed(self, browser): self.login(self.committee_responsible, browser) browser.open(self.empty_committee) editbar.menu_option('Actions', 'deactivate').click() self.login(self.dossier_responsible, browser) browser.open(self.draft_proposal) self.assertEqual( [u'The committee Kommission f\xfcr Verkehr is no longer active.'], warning_messages())
def test_list_only_active_committees_by_default(self, browser): with self.login(self.committee_responsible, browser): browser.open(self.empty_committee) editbar.menu_option('Actions', 'deactivate').click() self.login(self.meeting_user, browser) browser.open(self.committee_container, view='tabbedview_view-committees') self.assertEquals( [u'Rechnungspr\xfcfungskommission'], browser.css('#committees_view .committee_box h2').text)
def test_meeting_with_agenda_items_cannot_be_cancelled(self, browser): self.login(self.committee_responsible, browser) self.schedule_proposal(self.meeting, self.submitted_proposal) browser.open(self.meeting) editbar.menu_option('Actions', 'Cancel').click() self.assertDictContainsSubset({ 'message': "The meeting already has agenda items and can't " "be cancelled", 'messageClass': 'error'}, browser.json.get('messages')[0])
def test_menu_option_not_found(self, browser): self.grant('Manager') browser.login().open() with self.assertRaises(NoElementFound) as cm: editbar.menu_option('Add new', 'Dog', browser=browser) self.assertEquals( "Empty result set: editbar.menu_option('Add new', 'Dog'," " browser=<ftw.browser.core.Browser instance>)" " did not match any nodes." "\nOptions in menu 'Add new': ['Collection', 'DXType', 'Event'," " 'File', 'Folder', 'Image', 'Link', 'News Item', 'Page']", str(cm.exception))
def test_recursively_activates_subdossier(self, browser): self.login(self.secretariat_user, browser) self.set_workflow_state( 'dossier-state-inactive', self.dossier, self.subdossier, self.subdossier2) browser.open(self.dossier) editbar.menu_option('Actions', 'dossier-transition-activate').click() statusmessages.assert_message('The Dossier has been activated') self.assert_workflow_state('dossier-state-active', self.dossier) self.assert_workflow_state('dossier-state-active', self.subdossier) self.assert_workflow_state('dossier-state-active', self.subdossier2)
def test_list_all_committees_when_selecting_all_filter(self, browser): with self.login(self.committee_responsible, browser): browser.open(self.empty_committee) editbar.menu_option('Actions', 'deactivate').click() self.login(self.meeting_user, browser) browser.open(self.committee_container, view='tabbedview_view-committees', data={'committee_state_filter': 'filter_all'}) self.assertEquals( [u'Kommission f\xfcr Verkehr', u'Rechnungspr\xfcfungskommission'], browser.css('#committees_view .committee_box h2').text)
def test_meeting_with_agenda_items_cannot_be_cancelled(self, browser): self.login(self.committee_responsible, browser) self.schedule_proposal(self.meeting, self.submitted_word_proposal) browser.open(self.meeting) editbar.menu_option('Actions', 'Cancel').click() self.assertDictContainsSubset( { 'message': "The meeting already has agenda items and can't " "be cancelled", 'messageClass': 'error' }, browser.json.get('messages')[0])
def test_zip_export_link_on_meeting_view(self, browser): self.login(self.committee_responsible, browser) browser.open(self.meeting) editbar.menu_option('Actions', 'Export as Zip').click() zip_file = ZipFile(StringIO(browser.contents), 'r') self.assertIsNone(zip_file.testzip(), 'Got a invalid zip file.') self.assertEquals( '9. Sitzung der Rechnungsprufungskommission.zip', cgi.parse_header(browser.headers['content-disposition'])[1]['filename'], 'Wrong zip filename.')
def test_deactivating_not_possible_when_unscheduled_proposals_exist( self, browser): self.login(self.committee_responsible, browser) create( Builder('proposal').within(self.dossier).having( title=u'Non-scheduled proposal', committee=self.empty_committee.load_model()).as_submitted()) browser.open(self.empty_committee) editbar.menu_option('Actions', 'deactivate').click() self.assertEqual(Committee.STATE_ACTIVE, self.committee.load_model().get_state()) statusmessages.assert_message( 'There are unscheduled proposals submitted to this committee.')
def test_committe_box_has_state_class(self, browser): with self.login(self.committee_responsible, browser): browser.open(self.empty_committee) editbar.menu_option('Actions', 'deactivate').click() self.login(self.meeting_user, browser) browser.open(self.committee_container, view='tabbedview_view-committees', data={'committee_state_filter': 'filter_all'}) self.assertEquals( 'committee_box inactive', browser.css('#committees_view .committee_box')[0].get('class')) self.assertEquals( 'committee_box active', browser.css('#committees_view .committee_box')[1].get('class'))
def test_resets_end_dates_recursively(self, browser): self.login(self.secretariat_user, browser) IDossier(self.dossier).end = date(2013, 2, 21) IDossier(self.subdossier).end = date(2013, 2, 21) self.set_workflow_state( 'dossier-state-inactive', self.dossier, self.subdossier, self.subdossier2) self.assertIsNotNone(IDossier(self.dossier).end) self.assertIsNotNone(IDossier(self.subdossier).end) browser.open(self.dossier) editbar.menu_option('Actions', 'dossier-transition-activate').click() self.assert_workflow_state('dossier-state-active', self.dossier) self.assert_workflow_state('dossier-state-active', self.subdossier) self.assertIsNone(IDossier(self.dossier).end) self.assertIsNone(IDossier(self.subdossier).end)
def test_menu_option(self, browser): self.grant('Manager') browser.login().open() link = editbar.menu_option('Display', 'Summary view', browser=browser) self.assertEquals('plone-contentmenu-display-summary_view', link.attrib.get('id')) self.assertEquals('a', link.tag)
def test_deactivating_not_possible_when_unscheduled_proposals_exist( self, browser): self.login(self.committee_responsible, browser) create( Builder('proposal').within(self.dossier) .having(title=u'Non-scheduled proposal', committee=self.empty_committee.load_model()) .as_submitted()) browser.open(self.empty_committee) editbar.menu_option('Actions', 'deactivate').click() self.assertEqual(Committee.STATE_ACTIVE, self.committee.load_model().get_state()) statusmessages.assert_message( 'There are unscheduled proposals submitted to this committee.')
def test_shows_discreet_transition_button_committee_closed(self, browser): self.login(self.committee_responsible, browser) browser.open(self.empty_committee) editbar.menu_option('Actions', 'deactivate').click() self.login(self.dossier_responsible, browser) browser.open(self.draft_proposal, view='tabbedview_view-overview') self.assertEqual( [ 'proposal-transition-cancel', 'proposal-transition-submit', 'Comment' ], browser.css('.actionButtons .regular_buttons li').text) self.assertEqual( ['proposal-transition-cancel', 'Comment'], browser.css('.actionButtons .regular_buttons li a').text)
def test_closing_meeting_with_undecided_items_is_not_allowed(self, browser): """The user must decide all agenda items before the meeting can be closed. """ self.login(self.committee_responsible, browser) self.schedule_ad_hoc(self.meeting, "Ad hoc proposal") self.assertEquals(u'pending', self.meeting.model.workflow_state) browser.open(self.meeting) editbar.menu_option('Actions', 'Close meeting').click() self.assertEquals( {u'messages': [ {u'messageTitle': u'Error', u'message': u'The meeting cannot be closed because it' u' has undecided agenda items.', u'messageClass': u'error'}], u'proceed': False}, browser.json) self.assertEquals(u'pending', self.meeting.model.workflow_state)
def test_menu_option_menu_not_found(self, browser): self.grant('Manager') browser.login().open() with self.assertRaises(NoElementFound) as cm: editbar.menu_option('Shapes', 'Square', browser=browser) if IS_PLONE_4: self.assertEquals( "Empty result set: editbar.menu_option('Shapes', 'Square'," " browser=<ftw.browser.core.Browser instance>)" " did not match any nodes." "\nVisible menus: [u'Add new', u'Display'].", str(cm.exception)) else: self.assertEquals( "Empty result set: editbar.menu_option('Shapes', 'Square'," " browser=<ftw.browser.core.Browser instance>)" " did not match any nodes." "\nVisible menus: [u'Add new', u'Display', u'Manage portlets'].", str(cm.exception))
def test_revoke_action_points_to_revoke_permissions_view(self, browser): self.login(self.dossier_responsible, browser) self.set_workflow_state('task-state-tested-and-closed', self.subtask) browser.open(self.subtask) revoke_action = editbar.menu_option('Actions', "Revoke permissions") action_url = urlparse(revoke_action.get("href")) self.assertEqual( "/".join( [self.subtask.absolute_url_path(), '@@revoke_permissions']), action_url.path)
def test_closing_meeting_with_undecided_items_is_not_allowed( self, browser): """The user must decide all agenda items before the meeting can be closed. """ self.login(self.committee_responsible, browser) self.schedule_ad_hoc(self.meeting, "Ad hoc proposal") self.assertEquals(u'pending', self.meeting.model.workflow_state) browser.open(self.meeting) editbar.menu_option('Actions', 'Close meeting').click() self.assertEquals( { u'messages': [{ u'messageTitle': u'Error', u'message': u'The meeting cannot be closed because it' u' has undecided agenda items.', u'messageClass': u'error' }], u'proceed': False }, browser.json) self.assertEquals(u'pending', self.meeting.model.workflow_state)
def test_close_transition_closes_meeting(self, browser): self.login(self.committee_responsible, browser) self.assertEquals('pending', self.meeting.model.get_state().name) browser.open(self.meeting) editbar.menu_option('Actions', 'Close meeting').click() self.assertEquals('closed', self.meeting.model.get_state().name)
def test_reopen_closed_meeting(self, browser): self.login(self.committee_responsible, browser) self.assertEquals(u'closed', self.decided_meeting.model.workflow_state) browser.open(self.decided_meeting) editbar.menu_option('Actions', 'Reopen').click() self.assertEquals(u'held', self.decided_meeting.model.workflow_state)