def test_missing_component_no_exception(self): """If a component no longer exists at the path to receive the notification, no error should occur.""" v = ViewState(MagicMock()) n = NotificationCentre(v) v.component_from_path = MagicMock(return_value=None) n.subscribe_to_notification('test_notification', 'page.test_component') n.post_notification('test_notification')
def test_unsubscribe_non_existant_without_error(self): """Test that unsubscribing from a notification that isn't being listened to, and from a controller that hasn't been subscribed to, doesn't raise an error.""" v = ViewState(MagicMock()) n = NotificationCentre(v) n.unsubscribe_from_notification('non-existant', 'not.a.real.path') n.subscribe_to_notification('real-notification', 'listener.path', 'a.real.path') n.unsubscribe_from_notification('real-notification', 'listener.path', 'not.a.real.path')
def test_notification_unsubscribe_all(self): """nc.unsubscribe_from_all_notifications should prevent any more calls going to the component.""" v = ViewState(MagicMock()) n = NotificationCentre(v) component = MagicMock() v.component_from_path = MagicMock(return_value=component) n.subscribe_to_notification('test_notification', 'page.test_component') n.subscribe_to_notification('test_notification2', 'page.test_component') n.unsubscribe_from_all_notifications('page.test_component') n.post_notification('test_notification') n.post_notification('test_notification2') self.assertEqual(component.process_notification.call_count, 0)
def test_notification_unsubscribe(self): """After a component unsubscribes, it should not receive that notification any more (but should still receive others that it is subscribed to).""" v = ViewState(MagicMock()) n = NotificationCentre(v) component = MagicMock() v.component_from_path = MagicMock(return_value=component) n.subscribe_to_notification('test_notification', 'page.test_component') n.subscribe_to_notification('test_notification2', 'page.test_component') n.unsubscribe_from_notification('test_notification', 'page.test_component') n.post_notification('test_notification') self.assertEqual(component.process_notification.call_count, 0) n.post_notification('test_notification2') component.process_notification.assert_called_with('test_notification2', None)
def test_specific_notification_subscription_and_receive(self): """A component can listen to events from only single sources, so shouldn't receive that notification if posted from elsewhere.""" v = ViewState(MagicMock()) n = NotificationCentre(v) component = MagicMock() v.component_from_path = MagicMock(return_value=component) n.subscribe_to_notification('test_notification', 'page.test_component', 'page.source_component') n.post_notification('test_notification') n.post_notification('test_notification', 'page.another_source') self.assertEqual(component.process_notification.call_count, 0) n.post_notification('test_notification', 'page.source_component') component.process_notification.assert_called_with('test_notification', None)
def test_global_notification_subscription_and_receive(self): """A component that subscribes to a notification with a blank source, should receive that notification no matter what source posts it.""" v = ViewState(MagicMock()) n = NotificationCentre(v) component = MagicMock() v.component_from_path = MagicMock(return_value=component) n.subscribe_to_notification('test_notification', 'page.test_component') n.post_notification('test_notification') component.process_notification.assert_called_with('test_notification', None) n.subscribe_to_notification('test_notification2', 'page.test_component') n.post_notification('test_notification2', 'page.another_component') component.process_notification.assert_called_with('test_notification2', None)