def post(self): payload = json.loads(self.request.body) user_id = payload['user_id'] references = feedback_services.get_feedback_message_references(user_id) if not references: # Model may not exist if user has already attended to the feedback. return feedback_services.update_feedback_email_retries_transactional(user_id) messages = {} for reference in references: message = feedback_services.get_message(reference.thread_id, reference.message_id) exploration = exp_fetchers.get_exploration_by_id( reference.entity_id) message_text = message.text if len(message_text) > 200: message_text = message_text[:200] + '...' if exploration.id in messages: messages[exploration.id]['messages'].append(message_text) else: messages[exploration.id] = { 'title': exploration.title, 'messages': [message_text] } email_manager.send_feedback_message_email(user_id, messages) feedback_services.pop_feedback_message_references_transactional( user_id, len(references)) self.render_json({})
def post(self): payload = json.loads(self.request.body) user_id = payload["user_id"] references = feedback_services.get_feedback_message_references(user_id) if not references: # Model may not exist if user has already attended to the feedback. return transaction_services.run_in_transaction(feedback_services.update_feedback_email_retries, user_id) messages = {} for reference in references: message = feedback_services.get_message(reference.exploration_id, reference.thread_id, reference.message_id) exploration = exp_services.get_exploration_by_id(reference.exploration_id) message_text = message.text if len(message_text) > 200: message_text = message_text[:200] + "..." if exploration.id in messages: messages[exploration.id]["messages"].append(message_text) else: messages[exploration.id] = {"title": exploration.title, "messages": [message_text]} email_manager.send_feedback_message_email(user_id, messages) transaction_services.run_in_transaction( feedback_services.pop_feedback_message_references, user_id, len(references) )
def test_correct_email_body_is_sent(self): expected_email_html_body = ( 'Hi editor,<br>' '<br>' 'You have 1 new message(s) about your Oppia explorations:<br>' '<ul><li>Title: A message<br></li></ul>' 'You can view and reply to your messages from your ' '<a href="https://www.oppia.org/dashboard">dashboard</a>.' '<br>' 'Thanks, and happy teaching!<br>' '<br>' 'Best wishes,<br>' 'The Oppia Team<br>' '<br>' 'You can change your email preferences via the ' '<a href="https://www.example.com">Preferences</a> page.') expected_email_text_body = ( 'Hi editor,\n' '\n' 'You have 1 new message(s) about your Oppia explorations:\n' '- Title: A message\n' 'You can view and reply to your messages from your dashboard.' '\n' 'Thanks, and happy teaching!\n' '\n' 'Best wishes,\n' 'The Oppia Team\n' '\n' 'You can change your email preferences via the Preferences page.') feedback_messages = { self.exploration.id : { 'title': self.exploration.title, 'messages': ['A message']} } with self.can_send_emails_ctx, self.can_send_feedback_email_ctx: email_manager.send_feedback_message_email( self.editor_id, feedback_messages) # check that email body is correct. messages = self.mail_stub.get_sent_messages(to=self.EDITOR_EMAIL) self.assertEqual(len(messages), 1) self.assertEqual( messages[0].html.decode(), expected_email_html_body) self.assertEqual( messages[0].body.decode(), expected_email_text_body) # check that email model is correct. all_models = email_models.SentEmailModel.get_all().fetch() self.assertEqual(len(all_models), 1) sent_email_model = all_models[0] self.assertEqual( sent_email_model.recipient_id, self.editor_id) self.assertEqual( sent_email_model.recipient_email, self.EDITOR_EMAIL) self.assertEqual( sent_email_model.sender_id, feconf.SYSTEM_COMMITTER_ID) self.assertEqual( sent_email_model.sender_email, 'Site Admin <%s>' % feconf.NOREPLY_EMAIL_ADDRESS) self.assertEqual( sent_email_model.intent, feconf.EMAIL_INTENT_FEEDBACK_MESSAGE_NOTIFICATION) self.assertEqual( sent_email_model.subject, self.expected_email_subject)