예제 #1
0
    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]))
예제 #2
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)
예제 #3
0
    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, "")
예제 #4
0
    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)
예제 #5
0
    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)