def test_reminders(self): user_datas = { 'userA': sample_userA, 'userB': sample_userB, } user_ids, user_headers = self.create_users(user_datas) searchA_id, searchB_id = self.create_searches(user_ids, user_headers) conversation_data = self.make_conversation( user_headers['userA'], search_id=searchA_id, title='Trip to moon.', userA_id=user_ids['userA'], userB_id=user_ids['userB']) conversation_id = conversation_data['id'] share_data = self.make_share( user_headers['userA'], conversation_id, educator_user_id=user_ids['userA'], community_partner_user_id=user_ids['userB'], starting_in_hours=0.5) mailer = mail.get_mailer() while mailer.queue: mailer.pop() events = EventReminder.get_oneday_reminder_events() assert(len(events) == 1) worker.work_loop(target_time_between_calls=datetime.timedelta(seconds=1), max_loops=2) events = EventReminder.get_oneday_reminder_events() assert(len(events) == 0) # Two reminder emails should have been sent. assert(len(mailer.queue) == 2) email1 = mailer.pop() email2 = mailer.pop() expected_email_addresses = set([sample_userA['email'], sample_userB['email']]) rcvd_email_addresses = set([email1.to_address, email2.to_address]) assert(expected_email_addresses == rcvd_email_addresses)
def send_reminders(): # Send reminders before events happen. events = EventReminder.get_oneday_reminder_events() if events: logger.info('Sending reminders for {} events'.format(len(events))) event_reminders = [ EventReminder( event_id=event.id, typ='oneday_before', ) for event in events ] for reminder in event_reminders: store.session.add(reminder) store.session.commit() for event in events: mail_actions.send_event_reminder_message(event) # Send review reminder one day after they finish. send_review_reminders = False events = EventReminder.get_review_reminder_events() if events and send_review_reminders: logger.info('Sending review reminders for {} events'.format(len(events))) event_reminders = [EventReminder(event_id=event.id, typ='review') for event in events] for reminder in event_reminders: store.session.add(reminder) store.session.commit() for event in events: users = [event.share.educator, event.share.community_partner] for user in users: # FIXME: Would be nice to have a check in case they # already reviewed it. mail_actions.send_review_reminder_message(user, event)
def send_reminders(): # Send reminders before events happen. events = EventReminder.get_oneday_reminder_events() if events: logger.info('Sending reminders for {} events'.format(len(events))) event_reminders = [ EventReminder( event_id=event.id, typ='oneday_before', ) for event in events ] for reminder in event_reminders: store.session.add(reminder) store.session.commit() for event in events: mail_actions.send_event_reminder_message(event) # Send review reminder one day after they finish. send_review_reminders = False events = EventReminder.get_review_reminder_events() if events and send_review_reminders: logger.info('Sending review reminders for {} events'.format( len(events))) event_reminders = [ EventReminder(event_id=event.id, typ='review') for event in events ] for reminder in event_reminders: store.session.add(reminder) store.session.commit() for event in events: users = [event.share.educator, event.share.community_partner] for user in users: # FIXME: Would be nice to have a check in case they # already reviewed it. mail_actions.send_review_reminder_message(user, event)
def test_reminders(self): user_datas = { 'userA': sample_userA, 'userB': sample_userB, } user_ids, user_headers = self.create_users(user_datas) searchA_id, searchB_id = self.create_searches(user_ids, user_headers) conversation_data = self.make_conversation( user_headers['userA'], search_id=searchA_id, title='Trip to moon.', userA_id=user_ids['userA'], userB_id=user_ids['userB'], ) conversation_id = conversation_data['id'] share_data = self.make_share( user_headers['userA'], conversation_id, educator_user_id=user_ids['userA'], community_partner_user_id=user_ids['userB'], starting_in_hours=0.5, ) mailer = mail.get_mailer() while mailer.queue: mailer.pop() events = EventReminder.get_oneday_reminder_events() self.assertEqual(len(events), 1) worker.work_loop( target_time_between_calls=datetime.timedelta(seconds=1), max_loops=2) events = EventReminder.get_oneday_reminder_events() self.assertEqual(len(events), 0) # Two reminder emails should have been sent. self.assertEqual(len(mailer.queue), 2) email1 = mailer.pop() email2 = mailer.pop() expected_email_addresses = set( [sample_userA['email'], sample_userB['email']]) rcvd_email_addresses = set([email1.to_address, email2.to_address]) self.assertEqual(expected_email_addresses, rcvd_email_addresses)
def test_user_review(self): user_datas = { 'userA': sample_userA, 'userB': sample_userB, 'userC': sample_userC, } user_ids, user_headers = self.create_users(user_datas) searchA_id, searchB_id = self.create_searches(user_ids, user_headers) conversation_data = self.make_conversation( user_headers['userA'], search_id=searchA_id, title='Trip to moon.', userA_id=user_ids['userA'], userB_id=user_ids['userB']) conversation_id = conversation_data['id'] share_data = self.make_share( user_headers['userA'], conversation_id, educator_user_id=user_ids['userA'], community_partner_user_id=user_ids['userB'], starting_in_hours=0.5, force_past_events=False) # We shouldn't be able to save a review for the current event # because it is in the future share_id = share_data['id'] eventA_id = share_data['events'][0]['id'] review_data = { 'event_id': eventA_id, 'user_id': user_ids['userA'], 'rating': 3, } serialized = json.dumps(review_data) rv = self.app.post('/api/user_review', data=serialized, headers=user_headers['userB']) assert(rv.status_code == 403) # Two reminder emails should have been sent. # This check is mostly here since we need to flush the emails out # to test review reminder emails later. mailer = mail.get_mailer() while mailer.queue: mailer.pop() worker.work_loop(target_time_between_calls=datetime.timedelta(seconds=1), max_loops=2) assert(len(mailer.queue) == 2) while mailer.queue: mailer.pop() # Let's make another conversation and share this time but put event in past. conversation_data = self.make_conversation( user_headers['userA'], search_id=searchA_id, title='Trip to moon.', userA_id=user_ids['userA'], userB_id=user_ids['userB']) conversation_id = conversation_data['id'] share_data = self.make_share( user_headers['userA'], conversation_id, educator_user_id=user_ids['userA'], community_partner_user_id=user_ids['userB'], starting_in_hours=-26, force_past_events=True) eventA_id = share_data['events'][0]['id'] # We should receive an email telling us to review it. events = EventReminder.get_review_reminder_events() assert(len(events) == 1) while mailer.queue: mailer.pop() worker.work_loop(target_time_between_calls=datetime.timedelta(seconds=1), max_loops=2) events = EventReminder.get_review_reminder_events() assert(len(events) == 0) # Two reminder emails should have been sent. assert(len(mailer.queue) == 2) # Now try to make a review for the wrong user review_data = { 'event_id': eventA_id, 'user_id': user_ids['userC'], 'rating': 3, 'review': 'Was really super' } serialized = json.dumps(review_data) rv = self.app.post('/api/user_review', data=serialized, headers=user_headers['userB']) assert(rv.status_code == 403) # Now try to make a review for oneself review_data = { 'event_id': eventA_id, 'user_id': user_ids['userB'], 'rating': 3, 'review': 'Was really super' } serialized = json.dumps(review_data) rv = self.app.post('/api/user_review', data=serialized, headers=user_headers['userB']) assert(rv.status_code == 403) # Now try to make a review with invalid rating review_data = { 'event_id': eventA_id, 'user_id': user_ids['userA'], 'rating': 6, 'review': 'Was really super' } serialized = json.dumps(review_data) rv = self.app.post('/api/user_review', data=serialized, headers=user_headers['userB']) assert(rv.status_code == 400) # Now try to make a review with invalid rating again review_data = { 'event_id': eventA_id, 'user_id': user_ids['userA'], 'rating': -1, 'review': 'Was really super' } serialized = json.dumps(review_data) rv = self.app.post('/api/user_review', data=serialized, headers=user_headers['userB']) assert(rv.status_code == 400) # Make a valid review review_data = { 'event_id': eventA_id, 'user_id': user_ids['userA'], 'rating': 3, 'review': 'Was really super' } serialized = json.dumps(review_data) rv = self.app.post('/api/user_review', data=serialized, headers=user_headers['userB']) assert(rv.status_code == 200) # We can't make a second review based off the same event review_data = { 'event_id': eventA_id, 'user_id': user_ids['userA'], 'rating': 3, 'review': 'Was really super' } serialized = json.dumps(review_data) rv = self.app.post('/api/user_review', data=serialized, headers=user_headers['userB']) assert(rv.status_code == 403)