def test_multiple_groups(self, insert_tasks_mock): """Ensure event key is required to create a message.""" from sosbeacon.event.message import broadcast_to_groups group_keys = [] for i in xrange(35): group_key = Mock() group_key.urlsafe.return_value = i + 100 group_keys.append(group_key) event_key = Mock() message_key = Mock() message_key.urlsafe.return_value = "abc" broadcast_to_groups(group_keys, event_key, message_key, "") self.assertEqual(4, insert_tasks_mock.call_count) call_history = insert_tasks_mock.call_args_list for i in range(3): self.assertEqual(11, len(call_history[i][0][0])) self.assertEqual(2, len(call_history[3][0][0]))
def post(self): from google.appengine.api import namespace_manager # batch_id is used so that we can force resend of notices for an event. batch_id = self.request.get('batch', '') event_urlsafe = self.request.get('event') if not event_urlsafe: logging.error('No event key given.') return # TODO: Use event id rather than key here for namespacing purposes? event_key = ndb.Key(urlsafe=event_urlsafe) event = event_key.get() if not event: logging.error('Event %s not found!', event_key) return if event.status == EVENT_STATUS_CLOSED: logging.error('Event %s closed!', event_key) return message_urlsafe = self.request.get('message') if not message_urlsafe: logging.error('No message key given.') return # TODO: Use message id rather than key here for namespacing purposes? message_key = ndb.Key(urlsafe=message_urlsafe) # TODO: Check namespace here. current_namespae = unicode(namespace_manager.get_namespace()) if message_key.namespace() != current_namespae: logging.error('Message %s not in namespace %s!', message_key, current_namespae) return message = message_key.get() if not message: logging.error('Message %s not found!', message_key) return # We don't want to send the wrong message to the wrong groups. if message.event != event.key: logging.error('Message %s not belong to Event %s!', message_key, event_key) return if message.message_type == 'c' : logging.error('Message %s is not a broadcast!', message_key) return broadcast_to_groups(event.groups, event_key, message_key, batch_id)
def test_batch_passed_through(self, get_task_mock, insert_tasks_mock): """Ensure batch is passed to task generation function.""" from sosbeacon.event.message import broadcast_to_groups group_key = Mock() group_key.id.return_value = "SomeGroup" event_key = Mock() message_key = Mock() message_key.urlsafe.return_value = "abc" broadcast_to_groups([group_key], event_key, message_key, "") self.assertEqual(insert_tasks_mock.call_count, 1) get_task_mock.assert_called_once_with(group_key, event_key, message_key, "")
def test_one_group(self, insert_tasks_mock): """Ensure event key is required to create a message.""" from sosbeacon.event.message import broadcast_to_groups group_keys = [] for i in range(9): group_key = Mock() group_key.urlsafe.return_value = i + 100 group_keys.append(group_key) event_key = Mock() message_key = Mock() message_key.urlsafe.return_value = "abc" broadcast_to_groups(group_keys, event_key, message_key, "") self.assertEqual(insert_tasks_mock.call_count, 1)
def test_all_groups(self, group_query_mock, insert_tasks_mock): """Ensure passing in the all groups group, results in a query.""" from sosbeacon.event.message import broadcast_to_groups from sosbeacon.group import ADMIN_GROUPS_ID from sosbeacon.group import Group group_order_mock = group_query_mock.return_value.order group_iter_mock = group_order_mock.return_value.iter group_iter_mock.return_value = [] group_key = Mock() group_key.id.return_value = ADMIN_GROUPS_ID event_key = Mock() message_key = Mock() message_key.urlsafe.return_value = "abc" broadcast_to_groups([group_key], event_key, message_key, "") group_query_mock.assert_called_once_with() group_order_mock.assert_called_once_with(Group.key) group_iter_mock.assert_called_once_with(keys_only=True)