def test_downtimeTimezones(self, _getUtcnow): # Execute a browser test for downtime to ensure correct time formats and # timezone handling. # Hack to be able to mock utcnow as it can not be patched immediatelly as it is # member of the builtin type datetime. Additionally datetime is required by Plone # within the patching scope. _getUtcnow.return_value = datetime.datetime(2017, 4, 13, 15, 37, 0, 0, pytz.utc) # Allow user create content. setRoles(self.portal, TEST_USER_ID, ['Manager',]) # Create the provider folder and two providers. self.portal.invokeFactory('Folder', 'Providers') self.portal.Providers.invokeFactory('Provider', 'provider') self.portal.Providers.invokeFactory('Provider', self.TEST_OTHER_PROVIDER) # Create primary providers downtime to be filled out via browser. self.portal.Providers.provider.invokeFactory('Downtime', 'downtime') # Setup default workflow. getToolByName(self.portal, 'portal_workflow').setDefaultChain('intranet_workflow') # Setup downtime portlet. column = getUtility(IPortletManager, 'plone.leftcolumn') manager = getMultiAdapter((self.portal, column), IPortletAssignmentMapping) assignment = Assignment() chooser = INameChooser(manager) setRoles(self.portal, TEST_USER_ID, ['Manager',]) manager[chooser.chooseName(None, assignment)] = assignment # Setup secondary provider and it's downtimes: # * otherDowntime: not to be shown by portlet in primary provider's content subtree # * pastDowntime: not to be shown by portlet at all otherProvider = self.portal.Providers[self.TEST_OTHER_PROVIDER] otherProvider.update(title=self.TEST_OTHER_PROVIDER) otherProvider.invokeFactory('Downtime', self.TEST_OTHER_DOWNTIME) otherDowntime = otherProvider[self.TEST_OTHER_DOWNTIME] otherDowntime.update(title=self.TEST_OTHER_DOWNTIME, startDateTime=self.TEST_OTHER_DOWNTIME_START, endDateTime=self.TEST_OTHER_DOWNTIME_END) otherProvider.invokeFactory('Downtime', self.TEST_PAST_DOWNTIME) pastDowntime = otherProvider[self.TEST_PAST_DOWNTIME] pastDowntime.update(title=self.TEST_PAST_DOWNTIME, startDateTime=self.TEST_PAST_DOWNTIME_START, endDateTime=self.TEST_PAST_DOWNTIME_END) plone.api.content.transition(obj=otherDowntime, transition='publish') plone.api.content.transition(obj=pastDowntime, transition='publish') transaction.commit() # Start actual interaction via browser from plone.testing.z2 import Browser browser = Browser(self.app) browser.handleErrors = False portal_url = self.portal.absolute_url() self.portal.error_log._ignored_exceptions = () browser.open(portal_url + '/login_form') browser.getControl(name='__ac_name').value = TEST_USER_NAME browser.getControl(name='__ac_password').value = TEST_USER_PASSWORD browser.getControl(name='submit').click() self.assertIn('You are now logged in', browser.contents) browser.open(portal_url) # Create provider browser.follow('Providers') browser.follow('Add new') self.assertTrue('Add new item' in browser.contents) self.assertTrue('Compute or data service provider' in browser.contents) browser.getControl("Provider").click() browser.getControl(name='form.button.Add').click() browser.getControl(name="title").value = self.TEST_PROVIDER_NAME browser.getControl(name='provider_userid').value = self.TEST_PROVIDER_ID browser.getControl(name='address.city:record:ignore_empty').value = self.TEST_PROVIDER_CITY browser.getControl(name='address.country:record:ignore_empty').displayValue = [self.TEST_PROVIDER_COUNTRY] browser.getControl(name="form.button.save").click() # Create downtime browser.follow('Add new') self.assertTrue('Add new item' in browser.contents) browser.getControl(label='Downtime').click() browser.getControl(name='form.button.Add').click() self.assertTrue('Add Downtime' in browser.contents) browser.getControl(name='title').value = self.TEST_DOWNTIME_TITLE browser.getControl(name='description').value = self.TEST_DOWNTIME_DESCRIPTION self.fillInDateWidget(browser, 'startDateTime', self.TEST_DOWNTIME_START) self.fillInDateWidget(browser, 'endDateTime', self.TEST_DOWNTIME_END) browser.getControl(name='form.button.save').click() # Publish browser.follow('Publish') browser.getControl(name='form.button.confirm').click() # Check detail view self.assertContainsDowntimeFull(browser) # Check overview browser.open(portal_url + '/downtime_overview') self.assertContainsDowntimeShort(browser) # Back to detail view and edit browser.follow('Das ganze Schei') browser.follow('Edit') # Check edit view for correct dates self.assertDateWidget(browser, 'startDateTime', self.TEST_DOWNTIME_START) self.assertDateWidget(browser, 'endDateTime', self.TEST_DOWNTIME_END) # Check portlet on portal site browser.open(portal_url) self.assertTrue('All Downtimes...' in browser.contents) self.assertContainsDowntimeShort(browser) self.assertFalse(re.search('Upcoming Downtimes\\s+?\\(' + self.TEST_PROVIDER_NAME, browser.contents)) self.assertTrue(self.TEST_OTHER_DOWNTIME in browser.contents) self.assertFalse(self.TEST_PAST_DOWNTIME in browser.contents) # Check portlet on provider overview site browser.follow('Providers') self.assertContainsDowntimeShort(browser) self.assertFalse(re.search('Upcoming Downtimes\\s+?\\(' + self.TEST_PROVIDER_NAME, browser.contents)) self.assertTrue(self.TEST_OTHER_DOWNTIME in browser.contents) self.assertFalse(self.TEST_PAST_DOWNTIME in browser.contents) # Check portlet on provider detail site browser.follow(self.TEST_PROVIDER_NAME) self.assertContainsDowntimeShort(browser) self.assertTrue(re.search('Upcoming Downtimes\\s+?\\(' + self.TEST_PROVIDER_NAME, browser.contents)) self.assertFalse(self.TEST_OTHER_DOWNTIME in browser.contents) self.assertFalse(self.TEST_PAST_DOWNTIME in browser.contents)
def test_downtimeTimezones(self, _getUtcnow): # Execute a browser test for downtime to ensure correct time formats and # timezone handling. # Hack to be able to mock utcnow as it can not be patched immediatelly as it is # member of the builtin type datetime. Additionally datetime is required by Plone # within the patching scope. _getUtcnow.return_value = datetime.datetime(2017, 4, 13, 15, 37, 0, 0, pytz.utc) # Allow user create content. setRoles(self.portal, TEST_USER_ID, [ 'Manager', ]) # Create the provider folder and two providers. self.portal.invokeFactory('Folder', 'Providers') self.portal.Providers.invokeFactory('Provider', 'provider') self.portal.Providers.invokeFactory('Provider', self.TEST_OTHER_PROVIDER) # Create primary providers downtime to be filled out via browser. self.portal.Providers.provider.invokeFactory('Downtime', 'downtime') # Setup default workflow. getToolByName(self.portal, 'portal_workflow').setDefaultChain('intranet_workflow') # Setup downtime portlet. column = getUtility(IPortletManager, 'plone.leftcolumn') manager = getMultiAdapter((self.portal, column), IPortletAssignmentMapping) assignment = Assignment() chooser = INameChooser(manager) setRoles(self.portal, TEST_USER_ID, [ 'Manager', ]) manager[chooser.chooseName(None, assignment)] = assignment # Setup secondary provider and it's downtimes: # * otherDowntime: not to be shown by portlet in primary provider's content subtree # * pastDowntime: not to be shown by portlet at all otherProvider = self.portal.Providers[self.TEST_OTHER_PROVIDER] otherProvider.update(title=self.TEST_OTHER_PROVIDER) otherProvider.invokeFactory('Downtime', self.TEST_OTHER_DOWNTIME) otherDowntime = otherProvider[self.TEST_OTHER_DOWNTIME] otherDowntime.update(title=self.TEST_OTHER_DOWNTIME, startDateTime=self.TEST_OTHER_DOWNTIME_START, endDateTime=self.TEST_OTHER_DOWNTIME_END) otherProvider.invokeFactory('Downtime', self.TEST_PAST_DOWNTIME) pastDowntime = otherProvider[self.TEST_PAST_DOWNTIME] pastDowntime.update(title=self.TEST_PAST_DOWNTIME, startDateTime=self.TEST_PAST_DOWNTIME_START, endDateTime=self.TEST_PAST_DOWNTIME_END) plone.api.content.transition(obj=otherDowntime, transition='publish') plone.api.content.transition(obj=pastDowntime, transition='publish') transaction.commit() # Start actual interaction via browser from plone.testing.z2 import Browser browser = Browser(self.app) browser.handleErrors = False portal_url = self.portal.absolute_url() self.portal.error_log._ignored_exceptions = () browser.open(portal_url + '/login_form') browser.getControl(name='__ac_name').value = TEST_USER_NAME browser.getControl(name='__ac_password').value = TEST_USER_PASSWORD browser.getControl(name='submit').click() self.assertIn('You are now logged in', browser.contents) browser.open(portal_url) # Create provider browser.follow('Providers') browser.follow('Add new') self.assertTrue('Add new item' in browser.contents) self.assertTrue('Compute or data service provider' in browser.contents) browser.getControl("Provider").click() browser.getControl(name='form.button.Add').click() browser.getControl(name="title").value = self.TEST_PROVIDER_NAME browser.getControl( name='provider_userid').value = self.TEST_PROVIDER_ID browser.getControl(name='address.city:record:ignore_empty' ).value = self.TEST_PROVIDER_CITY browser.getControl( name='address.country:record:ignore_empty').displayValue = [ self.TEST_PROVIDER_COUNTRY ] browser.getControl(name="form.button.save").click() # Create downtime browser.follow('Add new') self.assertTrue('Add new item' in browser.contents) browser.getControl(label='Downtime').click() browser.getControl(name='form.button.Add').click() self.assertTrue('Add Downtime' in browser.contents) browser.getControl(name='title').value = self.TEST_DOWNTIME_TITLE browser.getControl( name='description').value = self.TEST_DOWNTIME_DESCRIPTION self.fillInDateWidget(browser, 'startDateTime', self.TEST_DOWNTIME_START) self.fillInDateWidget(browser, 'endDateTime', self.TEST_DOWNTIME_END) browser.getControl(name='form.button.save').click() # Publish browser.follow('Publish') browser.getControl(name='form.button.confirm').click() # Check detail view self.assertContainsDowntimeFull(browser) # Check overview browser.open(portal_url + '/downtime_overview') self.assertContainsDowntimeShort(browser) # Back to detail view and edit browser.follow('Das ganze Schei') browser.follow('Edit') # Check edit view for correct dates self.assertDateWidget(browser, 'startDateTime', self.TEST_DOWNTIME_START) self.assertDateWidget(browser, 'endDateTime', self.TEST_DOWNTIME_END) # Check portlet on portal site browser.open(portal_url) self.assertTrue('All Downtimes...' in browser.contents) self.assertContainsDowntimeShort(browser) self.assertFalse( re.search('Upcoming Downtimes\\s+?\\(' + self.TEST_PROVIDER_NAME, browser.contents)) self.assertTrue(self.TEST_OTHER_DOWNTIME in browser.contents) self.assertFalse(self.TEST_PAST_DOWNTIME in browser.contents) # Check portlet on provider overview site browser.follow('Providers') self.assertContainsDowntimeShort(browser) self.assertFalse( re.search('Upcoming Downtimes\\s+?\\(' + self.TEST_PROVIDER_NAME, browser.contents)) self.assertTrue(self.TEST_OTHER_DOWNTIME in browser.contents) self.assertFalse(self.TEST_PAST_DOWNTIME in browser.contents) # Check portlet on provider detail site browser.follow(self.TEST_PROVIDER_NAME) self.assertContainsDowntimeShort(browser) self.assertTrue( re.search('Upcoming Downtimes\\s+?\\(' + self.TEST_PROVIDER_NAME, browser.contents)) self.assertFalse(self.TEST_OTHER_DOWNTIME in browser.contents) self.assertFalse(self.TEST_PAST_DOWNTIME in browser.contents)