def invoke_notification(obj, event): """Event handler for `IQueueExecutedEvent` which invokes the `IReportNotifier` adapter. """ config = IMonitorConfigurationSchema(obj) if not config.enabled or not len(config.get_receivers()): return monitor_queue_length(obj, event.queue, config) monitor_failed_extractions(obj, event.queue, config)
def invoke_notification(obj, event): """Event handler for `IQueueExecutedEvent` which invokes the `IReportNotifier` adapter. """ config = IMonitorConfigurationSchema(obj) if not config.enabled or not len(config.get_receivers()): return amount_of_jobs = event.queue.countJobs() if amount_of_jobs >= config.threshold: return getAdapter(obj, IMonitorNotifier)(config, event.queue)
def test_default_configuration(self): self.browser.open(self.config_url) config = IMonitorConfigurationSchema(self.portal) self.assertFalse(config.enabled) self.assertFalse(self.browser.getControl(name='form.enabled').value) self.assertEqual(config.get_receivers(), []) self.assertEqual( self.browser.getControl(name='form.receivers').value, '') self.assertEqual(config.get_threshold(), 100) self.assertEqual( self.browser.getControl(name='form.threshold').value, '100')
def setUp(self): super(TestEventhandler, self).setUp() self.portal = self.layer['portal'] setRoles(self.portal, TEST_USER_ID, ['Manager']) login(self.portal, TEST_USER_NAME) self.folder = self.portal.get(self.portal.invokeFactory( 'Folder', 'mailing-test', title='Mailing Test Folder')) self.queue = IQueue(self.portal) mtool = getToolByName(self.portal, 'portal_membership') self.user = mtool.getMemberById(TEST_USER_ID) self.config = IMonitorConfigurationSchema(self.portal) self.config.set_enabled(True) self.config.set_receivers_plain('*****@*****.**') self.notifier_class = self.stub_interface(IMonitorNotifier) self.notifier = self.mock_interface(IMonitorNotifier) self.expect(self.notifier_class(self.portal)).result( self.notifier) provideAdapter(factory=self.notifier_class, provides=IMonitorNotifier, adapts=(IPloneSiteRoot,))
def test_change_configuration(self): self.browser.open(self.config_url) self.browser.getControl(name='form.enabled').value = True self.browser.getControl(name='form.receivers').value = '\n'.join(( '*****@*****.**', '*****@*****.**')) self.browser.getControl(name='form.threshold').value = '75' self.browser.getControl('Save').click() self.assertEqual(self.browser.url, self.config_url) self.assertIn('Updated on', self.browser.contents) config = IMonitorConfigurationSchema(self.portal) self.assertTrue(config.enabled) self.assertEqual(config.get_receivers(), [ '*****@*****.**', '*****@*****.**']) self.assertEqual(config.threshold, 75)
class TestEventhandler(MockTestCase): layer = MONITOR_FUNCTIONAL_TESTING def setUp(self): super(TestEventhandler, self).setUp() self.portal = self.layer['portal'] setRoles(self.portal, TEST_USER_ID, ['Manager']) login(self.portal, TEST_USER_NAME) self.folder = self.portal.get(self.portal.invokeFactory( 'Folder', 'mailing-test', title='Mailing Test Folder')) self.queue = IQueue(self.portal) mtool = getToolByName(self.portal, 'portal_membership') self.user = mtool.getMemberById(TEST_USER_ID) self.config = IMonitorConfigurationSchema(self.portal) self.config.set_enabled(True) self.config.set_receivers_plain('*****@*****.**') self.notifier_class = self.stub_interface(IMonitorNotifier) self.notifier = self.mock_interface(IMonitorNotifier) self.expect(self.notifier_class(self.portal)).result( self.notifier) provideAdapter(factory=self.notifier_class, provides=IMonitorNotifier, adapts=(IPloneSiteRoot,)) def tearDown(self): sm = getGlobalSiteManager() sm.unregisterAdapter(factory=self.notifier_class, provided=IMonitorNotifier, required=(IPloneSiteRoot,)) super(TestEventhandler, self).tearDown() def stub_current_queue_length(self, amount_of_jobs): while self.queue.countJobs() > 0: self.queue.popJob() for _i in range(amount_of_jobs): # Remove acquisition wrapper from "self.user" in order to # prevent the following error: # TypeError: Can't pickle objects in acquisition wrappers. self.queue.createJob('push', self.folder, aq_base(self.user)) def test_eventhandler_calls_notifier(self): self.config.set_threshold(2) self.stub_current_queue_length(3) event = self.create_dummy(queue=self.queue) self.expect(self.notifier(ANY, ANY)) self.replay() invoke_notification(self.portal, event) def test_adapter_called_after_queue_execution(self): self.config.set_threshold(2) self.stub_current_queue_length(3) self.expect(self.notifier(ANY, ANY)) self.replay() self.portal.unrestrictedTraverse('@@publisher.executeQueue')() def test_adapter_not_called_when_monitoring_disabled(self): self.config.set_threshold(2) self.stub_current_queue_length(3) self.config.set_enabled(False) self.expect(self.notifier(ANY, ANY)).count(0) self.replay() self.portal.unrestrictedTraverse('@@publisher.executeQueue')() def test_adapter_not_called_when_threshold_not_reached(self): self.config.set_threshold(10) self.stub_current_queue_length(1) self.expect(self.notifier(ARGS, KWARGS)).count(0) self.replay() self.portal.unrestrictedTraverse('@@publisher.executeQueue')() def test_adapter_is_called_even_when_publishing_disabled(self): self.config.set_threshold(2) self.stub_current_queue_length(3) config = IConfig(self.portal) config.set_publishing_enabled(False) self.expect(self.notifier(ARGS, KWARGS)) self.replay() self.portal.unrestrictedTraverse('@@publisher.executeQueue')()