def test_sort_place_holders(self, find_markers_for_methods_mock): """Ensure multiple place holders are sorted correctly.""" from google.appengine.ext import ndb from sosbeacon.event.contact_marker import ContactMarker from sosbeacon.event.contact_marker import get_marker_for_methods from sosbeacon.event.event import Event marker1_key = mock.Mock(spec=ndb.Key) marker1_key.kind.return_value = "ContactMarker" marker1 = ContactMarker(key=marker1_key, short_id='A') marker1_key.get.return_value = marker1 marker2_key = mock.Mock(spec=ndb.Key) marker2_key.kind.return_value = "ContactMarker" marker2 = ContactMarker(key=marker2_key, short_id='Z') marker2_key.get.return_value = marker2 find_markers_for_methods_mock.return_value = ( ContactMarker(place_holder=marker1_key), ContactMarker(place_holder=marker2_key), ContactMarker(place_holder=marker1_key), ContactMarker(place_holder=marker2_key), ContactMarker(place_holder=marker1_key), ) event_key = ndb.Key(Event, 'EVENTKEY') ret_value = get_marker_for_methods(event_key, ['123']) self.assertIs(marker1, ret_value)
def test_matching_markers(self, find_markers_for_methods_mock): """Ensure a marker is returned when there are multiple existing markers. """ from google.appengine.ext import ndb from sosbeacon.event.contact_marker import ContactMarker from sosbeacon.event.contact_marker import get_marker_for_methods from sosbeacon.event.event import Event marker1_key = mock.Mock(spec=ndb.Key) marker1_key.kind.return_value = "ContactMarker" marker1 = ContactMarker(key=marker1_key, short_id='A') marker2_key = mock.Mock(spec=ndb.Key) marker2_key.kind.return_value = "ContactMarker" marker2 = ContactMarker(key=marker2_key, short_id='Z') find_markers_for_methods_mock.return_value = (marker1, marker2) event_key = ndb.Key(Event, 'EVENTKEY') ret_value = get_marker_for_methods(event_key, ['123']) self.assertIn(ret_value, (marker1, marker2))
def create_marker_user(event_key, message_key, user_key): """Scan over the given set of groups, sending the broadcast to everyone in those groups. """ from sosbeacon.utils import insert_tasks from sosbeacon.event.contact_marker import ContactMarker from sosbeacon.event.contact_marker import get_marker_for_methods from sosbeacon.student import Student from sosbeacon.student import DEFAULT_STUDENT_ID methods = set() if message_key.get().message_type == 'eo': methods.add(user_key.get().email) else: methods.add(user_key.get().phone) methods.add(user_key.get().email) marker = get_marker_for_methods(event_key, methods) student_key = ndb.Key(Student, "%s-%s" % (DEFAULT_STUDENT_ID, user_key.id()), namespace='_x_') if not marker: # TODO: What needs set? short_id = str(ContactMarker.allocate_ids(size=1, parent=event_key)[0]) key_id = "%s:%s" % (event_key.id(), user_key.id()) marker = ContactMarker( id=key_id, event=event_key, first_name=user_key.get().first_name, last_name=user_key.get().last_name, students={str(student_key.id()): []}, short_id=short_id, methods=[user_key.get().email, user_key.get().phone], count_comment=0, count_visit=0, is_user=True) marker.acknowledged = True marker.put() tasks = [] for method in methods: # TODO: Batch tasks or start tasks.append( get_broadcast_method_to_user_task(event_key, message_key, user_key, method)) if len(tasks) > 10: insert_tasks(tasks, USER_TX_QUEUE) tasks = [] if tasks: insert_tasks(tasks, USER_TX_QUEUE)
def create_marker_user(event_key, message_key, user_key): """Scan over the given set of groups, sending the broadcast to everyone in those groups. """ from sosbeacon.utils import insert_tasks from sosbeacon.event.contact_marker import ContactMarker from sosbeacon.event.contact_marker import get_marker_for_methods from sosbeacon.student import Student from sosbeacon.student import DEFAULT_STUDENT_ID methods = set() if message_key.get().message_type == "eo": methods.add(user_key.get().email) else: methods.add(user_key.get().phone) methods.add(user_key.get().email) marker = get_marker_for_methods(event_key, methods) student_key = ndb.Key(Student, "%s-%s" % (DEFAULT_STUDENT_ID, user_key.id()), namespace="_x_") if not marker: # TODO: What needs set? short_id = str(ContactMarker.allocate_ids(size=1, parent=event_key)[0]) key_id = "%s:%s" % (event_key.id(), user_key.id()) marker = ContactMarker( id=key_id, event=event_key, first_name=user_key.get().first_name, last_name=user_key.get().last_name, students={str(student_key.id()): []}, short_id=short_id, methods=[user_key.get().email, user_key.get().phone], count_comment=0, count_visit=0, is_user=True, ) marker.acknowledged = True marker.put() tasks = [] for method in methods: # TODO: Batch tasks or start tasks.append(get_broadcast_method_to_user_task(event_key, message_key, user_key, method)) if len(tasks) > 10: insert_tasks(tasks, USER_TX_QUEUE) tasks = [] if tasks: insert_tasks(tasks, USER_TX_QUEUE)
def test_no_matches(self, find_markers_for_methods_mock): """Ensure a new short id is returned if there are non existing.""" from google.appengine.ext import ndb from sosbeacon.event.contact_marker import get_marker_for_methods from sosbeacon.event.event import Event find_markers_for_methods_mock.return_value = () event_key = ndb.Key(Event, 'EVENTKEY') ret_value = get_marker_for_methods(event_key, ['123']) self.assertIsNone(ret_value)
def test_matching_marker(self, find_markers_for_methods_mock): """Ensure a single existing placeholder is returned.""" from google.appengine.ext import ndb from sosbeacon.event.contact_marker import ContactMarker from sosbeacon.event.contact_marker import get_marker_for_methods from sosbeacon.event.event import Event marker1_key = mock.Mock(spec=ndb.Key) marker1_key.kind.return_value = "ContactMarker" marker1 = ContactMarker(key=marker1_key, short_id='A') find_markers_for_methods_mock.return_value = (marker1,) event_key = ndb.Key(Event, 'EVENTKEY') ret_value = get_marker_for_methods(event_key, ['123']) self.assertIs(marker1, ret_value)
def test_matching_marker(self, find_markers_for_methods_mock): """Ensure a single existing placeholder is returned.""" from google.appengine.ext import ndb from sosbeacon.event.contact_marker import ContactMarker from sosbeacon.event.contact_marker import get_marker_for_methods from sosbeacon.event.event import Event marker1_key = mock.Mock(spec=ndb.Key) marker1_key.kind.return_value = "ContactMarker" marker1 = ContactMarker(key=marker1_key, short_id='A') find_markers_for_methods_mock.return_value = (marker1, ) event_key = ndb.Key(Event, 'EVENTKEY') ret_value = get_marker_for_methods(event_key, ['123']) self.assertIs(marker1, ret_value)