def test_contacts_with_no_contacts(self): """Ensure merging contacts with no contacts.""" from sosbeacon.event.student_marker import StudentMarker from sosbeacon.event.student_marker import _build_contact_map contacts = _build_contact_map([{ 'name': 'Sam Smith', 'methods': [{ 'value': '123432' }, { 'value': '*****@*****.**' }] }, { 'name': 'Josh Jones', 'methods': [{ 'value': '443241' }, { 'value': '*****@*****.**' }] }, { 'name': 'Betty Boop', 'methods': [{ 'value': '321133' }, { 'value': '*****@*****.**' }] }]) left = StudentMarker(contacts=copy.deepcopy(contacts)) right = StudentMarker() left.merge(right) self.assertEqual(contacts, left.contacts)
def test_merge_overlapping_contacts(self): """Ensure merging overlapping contacts.""" from sosbeacon.event.student_marker import StudentMarker from sosbeacon.event.student_marker import _build_contact_map contacts = _build_contact_map([ { 'name': 'Sam Smith', 'methods': [{'value': '123432'}, {'value': '*****@*****.**'}] }, { 'name': 'Josh Jones', 'methods': [{'value': '443241'}, {'value': '*****@*****.**'}] }, { 'name': 'Betty Boop', 'methods': [{'value': '321133'}, {'value': '*****@*****.**'}] } ]) left = StudentMarker(contacts=copy.deepcopy(contacts)) right = StudentMarker(contacts=copy.deepcopy(contacts)) left.merge(right) for contact in contacts.values(): contact['acked'] = None contact['acked_at'] = None contact['sent'] = None self.assertEqual(contacts, left.contacts)
def test_merge_no_contacts_with_contacts(self): """Ensure merging no contacts with contacts.""" from sosbeacon.event.student_marker import StudentMarker from sosbeacon.event.student_marker import _build_contact_map contacts = _build_contact_map([ { 'name': 'Sam Smith', 'methods': [{'value': '123432'}, {'value': '*****@*****.**'}], 'acked': True }, { 'name': 'Josh Jones', 'methods': [{'value': '443241'}, {'value': '*****@*****.**'}], 'acked_at': 123432 }, { 'name': 'Betty Boop', 'methods': [{'value': '321133'}, {'value': '*****@*****.**'}], 'sent': 23423 } ]) left = StudentMarker() right = StudentMarker(contacts=copy.deepcopy(contacts)) left.merge(right) self.assertEqual(contacts, left.contacts)
def test_merge_no_name(self): """Ensure merging without name.""" from sosbeacon.event.student_marker import StudentMarker left = StudentMarker() right = StudentMarker() left.merge(right) self.assertFalse(left.name)
def test_merge_non_broadcasts(self): """Ensure merging two non-broadcast.""" from sosbeacon.event.student_marker import StudentMarker left = StudentMarker(last_broadcast=None) right = StudentMarker(last_broadcast=None) left.merge(right) self.assertFalse(left.last_broadcast)
def test_merge_different_names(self): """Ensure merging with different name.""" from sosbeacon.event.student_marker import StudentMarker left = StudentMarker(name="billy") right = StudentMarker(name="joe") left.merge(right) self.assertEqual("billy", left.name)
def test_merge_name_with_no_name(self): """Ensure merging name with missing name.""" from sosbeacon.event.student_marker import StudentMarker left = StudentMarker(name="joe") right = StudentMarker() left.merge(right) self.assertEqual("joe", left.name)
def test_merge_contacts_into_ack_info(self): """Ensure merging contact list into ack info works.""" from sosbeacon.event.student_marker import StudentMarker from sosbeacon.event.student_marker import _build_contact_map contacts = _build_contact_map([{ 'name': 'Sam Smith', 'methods': [{ 'value': '123432' }, { 'value': '*****@*****.**' }] }, { 'name': 'Josh Jones', 'methods': [{ 'value': '443241' }, { 'value': '*****@*****.**' }] }, { 'name': 'Betty Boop', 'methods': [{ 'value': '321133' }, { 'value': '*****@*****.**' }] }]) acked_contact = _build_contact_map([{ 'name': 'Sam Smith', 'methods': [{ 'value': '123432' }, { 'value': '*****@*****.**' }], 'acked': True, 'acked_at': 1234231, 'sent': 232311, }]) left = StudentMarker(contacts=copy.deepcopy(acked_contact)) right = StudentMarker(contacts=copy.deepcopy(contacts)) left.merge(right) contacts.update(acked_contact) self.assertEqual(contacts, left.contacts) self.assertEqual(True, left.acknowledged) self.assertEqual(1234231, left.acknowledged_at)
def test_merge_broadcast(self): """Ensure merging broadcast markers.""" from datetime import datetime from sosbeacon.event.student_marker import StudentMarker broadcasted = datetime.now() left = StudentMarker(last_broadcast=broadcasted) right = StudentMarker(last_broadcast=broadcasted) left.merge(right) self.assertEqual(broadcasted, left.last_broadcast)
def test_merge_broadcast_with_older(self): """Ensure merging more recently broadcast marker with older marker.""" from datetime import datetime, timedelta from sosbeacon.event.student_marker import StudentMarker broadcasted = datetime.now() prior_broadcasted = datetime.now() + timedelta(minutes=-5) left = StudentMarker(last_broadcast=broadcasted) right = StudentMarker(last_broadcast=prior_broadcasted) left.merge(right) self.assertEqual(broadcasted, left.last_broadcast)
def test_merge_overlapping_contacts(self): """Ensure merging overlapping contacts.""" from sosbeacon.event.student_marker import StudentMarker from sosbeacon.event.student_marker import _build_contact_map contacts = _build_contact_map([{ 'name': 'Sam Smith', 'methods': [{ 'value': '123432' }, { 'value': '*****@*****.**' }] }, { 'name': 'Josh Jones', 'methods': [{ 'value': '443241' }, { 'value': '*****@*****.**' }] }, { 'name': 'Betty Boop', 'methods': [{ 'value': '321133' }, { 'value': '*****@*****.**' }] }]) left = StudentMarker(contacts=copy.deepcopy(contacts)) right = StudentMarker(contacts=copy.deepcopy(contacts)) left.merge(right) for contact in contacts.values(): contact['acked'] = None contact['acked_at'] = None contact['sent'] = None self.assertEqual(contacts, left.contacts)
def test_merge_contacts_into_ack_info(self): """Ensure merging contact list into ack info works.""" from sosbeacon.event.student_marker import StudentMarker from sosbeacon.event.student_marker import _build_contact_map contacts = _build_contact_map([ { 'name': 'Sam Smith', 'methods': [{'value': '123432'}, {'value': '*****@*****.**'}] }, { 'name': 'Josh Jones', 'methods': [{'value': '443241'}, {'value': '*****@*****.**'}] }, { 'name': 'Betty Boop', 'methods': [{'value': '321133'}, {'value': '*****@*****.**'}] } ]) acked_contact = _build_contact_map([ { 'name': 'Sam Smith', 'methods': [{'value': '123432'}, {'value': '*****@*****.**'}], 'acked': True, 'acked_at': 1234231, 'sent': 232311, } ]) left = StudentMarker(contacts=copy.deepcopy(acked_contact)) right = StudentMarker(contacts=copy.deepcopy(contacts)) left.merge(right) contacts.update(acked_contact) self.assertEqual(contacts, left.contacts) self.assertEqual(True, left.acknowledged) self.assertEqual(1234231, left.acknowledged_at)
def get(self, event_id, number, *args, **kwargs): import sendgrid import settings from datetime import datetime from sosbeacon.event.message import Message from sosbeacon.event.student_marker import StudentMarker session_store = sessions.get_store() session = session_store.get_session() user_urlsafe = session.get('u') user_key = ndb.Key(urlsafe = user_urlsafe).get() event_key = ndb.Key(urlsafe = event_id) query_messages = Message.query(Message.event == event_key).fetch() body = "" for i in number: # list comment message if i == "1": list_comment = Message.query(Message.event == event_key, Message.message_type == 'c') title = "Responder messages" body += str(self.responder_messages(user_key, title, list_comment)) # list student marker Responders if i == "2": query_response = StudentMarker.query(StudentMarker.event == event_key, StudentMarker.is_direct == True, StudentMarker.acknowledged == True) student_markers = query_response.fetch() title = "Responder List" body += str(self.email_student_marker(student_markers, title)) # list student marker Non Responders if i == "3": query_response = StudentMarker.query(StudentMarker.event == event_key, StudentMarker.acknowledged == False, StudentMarker.is_direct == True) student_markers = query_response.fetch() title = "No Responder List" body += str(self.email_student_marker(student_markers, title)) # list message email if i == "4": title = "Alert Messages" body += str(self.email_broadcast_message(user_key, title, query_messages)) today = datetime.today() today = today.strftime('%Y-%m-%d %H:%M') subject = "Download data sent from SOSbeacon Message Center %s" % today email = user_key.email s = sendgrid.Sendgrid(settings.SENDGRID_ACCOUNT, settings.SENDGRID_PASSWORD, secure=True) message = sendgrid.Message( settings.SENDGRID_SENDER, subject, body, body) message.add_to(str(email)) try: s.web.send(message) except: error = "Can not download email." create_error_log(error, 'ERR')
def get(self, event_id, number, *args, **kwargs): import sendgrid import settings from datetime import datetime from sosbeacon.event.message import Message from sosbeacon.event.student_marker import StudentMarker session_store = sessions.get_store() session = session_store.get_session() user_urlsafe = session.get('u') user_key = ndb.Key(urlsafe=user_urlsafe).get() event_key = ndb.Key(urlsafe=event_id) query_messages = Message.query(Message.event == event_key).fetch() body = "" for i in number: # list comment message if i == "1": list_comment = Message.query(Message.event == event_key, Message.message_type == 'c') title = "Responder messages" body += str( self.responder_messages(user_key, title, list_comment)) # list student marker Responders if i == "2": query_response = StudentMarker.query( StudentMarker.event == event_key, StudentMarker.is_direct == True, StudentMarker.acknowledged == True) student_markers = query_response.fetch() title = "Responder List" body += str(self.email_student_marker(student_markers, title)) # list student marker Non Responders if i == "3": query_response = StudentMarker.query( StudentMarker.event == event_key, StudentMarker.acknowledged == False, StudentMarker.is_direct == True) student_markers = query_response.fetch() title = "No Responder List" body += str(self.email_student_marker(student_markers, title)) # list message email if i == "4": title = "Alert Messages" body += str( self.email_broadcast_message(user_key, title, query_messages)) today = datetime.today() today = today.strftime('%Y-%m-%d %H:%M') subject = "Download data sent from SOSbeacon Message Center %s" % today email = user_key.email s = sendgrid.Sendgrid(settings.SENDGRID_ACCOUNT, settings.SENDGRID_PASSWORD, secure=True) message = sendgrid.Message(settings.SENDGRID_SENDER, subject, body, body) message.add_to(str(email)) try: s.web.send(message) except: error = "Can not download email." create_error_log(error, 'ERR')