def send_mail_reporter_status_changed_afgehandeld(signal, status, prev_status): signal_is_afgehandeld = status.state == workflow.AFGEHANDELD if not signal_is_afgehandeld or not signal.reporter.email: return None # SIG-1619 We should not send a mail after request to repoen a "melding" / # Signal was closed, hence: if prev_status.state == workflow.VERZOEK_TOT_HEROPENEN: return None # Create the feedback instance feedback = Feedback.actions.request_feedback(signal) positive_feedback_url, negative_feedback_url = get_feedback_urls(feedback) context = { 'negative_feedback_url': negative_feedback_url, 'positive_feedback_url': positive_feedback_url, 'signal': signal, 'status': status, } txt_message = _create_message('email/signal_status_changed_afgehandeld.txt', context=context) html_message = _create_message('email/signal_status_changed_afgehandeld.html', context=context) subject = f'Betreft melding: {signal.id}' from_email = settings.NOREPLY recipient_list = [signal.reporter.email, ] return django_send_mail(subject=subject, message=txt_message, from_email=from_email, recipient_list=recipient_list, html_message=html_message)
def test_link_generation_with_environment_set_frontend_url_set(self): test_frontend_urls = ['https://acc.meldingen.amsterdam.nl', 'https://meldingen.amsterdam.nl', 'https://random.net', ] for test_frontend_url in test_frontend_urls: with override_settings(FRONTEND_URL=test_frontend_url): pos_url, neg_url = get_feedback_urls(self.feedback) self.assertIn(test_frontend_url, pos_url) self.assertIn(test_frontend_url, neg_url)
def test_send_mail_reporter_status_changed_afgehandeld_txt_and_html(self): # Prepare signal with status change from `BEHANDELING` to `AFGEHANDELD`. StatusFactory.create(_signal=self.signal, state=workflow.BEHANDELING) status = StatusFactory.create(_signal=self.signal, state=workflow.AFGEHANDELD) self.signal.status = status self.signal.save() # Is the intended rule activated? actions = self._get_mail_rules(['Send mail signal handled' ])._get_actions(self.signal) self.assertEqual(len(actions), 1) # Is it the only one that activates? ma = MailActions(mail_rules=SIGNAL_MAIL_RULES) activated = ma._get_actions(self.signal) self.assertEqual(set(actions), set(activated)) # Check mail contents ma.apply(signal_id=self.signal.id) self.assertEqual(len(mail.outbox), 1) self.assertEqual(1, Feedback.objects.count()) feedback = Feedback.objects.get(_signal__id=self.signal.id) message = mail.outbox[0] self.assertEqual(message.subject, f'Meer over uw melding {self.signal.id}') self.assertEqual(message.to, [ self.signal.reporter.email, ]) self.assertEqual(mail.outbox[0].from_email, settings.DEFAULT_FROM_EMAIL) positive_feedback_url, negative_feedback_url = get_feedback_urls( feedback) context = { 'negative_feedback_url': negative_feedback_url, 'positive_feedback_url': positive_feedback_url, 'signal': self.signal, 'status': status, 'ORGANIZATION_NAME': settings.ORGANIZATION_NAME, } txt_message = loader.get_template( 'email/signal_status_changed_afgehandeld.txt').render(context) html_message = loader.get_template( 'email/signal_status_changed_afgehandeld.html').render(context) self.assertEqual(message.body, txt_message) content, mime_type = message.alternatives[0] self.assertEqual(mime_type, 'text/html') self.assertEqual(content, html_message) # we want a history entry when a email was sent self.assertEqual(Note.objects.count(), 1)
def _create_feedback_and_mail_context(signal: Signal): """ Util functions to create the feedback object and create the context needed for the mail """ feedback = Feedback.actions.request_feedback(signal) positive_feedback_url, negative_feedback_url = get_feedback_urls(feedback) return { 'negative_feedback_url': negative_feedback_url, 'positive_feedback_url': positive_feedback_url, }
def test_link_generation_with_environment_set_frontend_url_not_set(self): env_fe_mapping = copy.deepcopy(getattr( settings, 'FEEDBACK_ENV_FE_MAPPING', feedback_settings.FEEDBACK_ENV_FE_MAPPING, )) for environment, fe_location in env_fe_mapping.items(): env = {'ENVIRONMENT': environment} with mock.patch.dict('os.environ', env, clear=True): pos_url, neg_url = get_feedback_urls(self.feedback) self.assertIn(fe_location, pos_url) self.assertIn(fe_location, neg_url)
def _create_feedback_and_mail_context(signal: Signal): """ Util functions to create the feedback object and create the context needed for the mail :param signal: :return: """ from signals.apps.feedback.models import Feedback from signals.apps.feedback.utils import get_feedback_urls feedback = Feedback.actions.request_feedback(signal) positive_feedback_url, negative_feedback_url = get_feedback_urls(feedback) return { 'negative_feedback_url': negative_feedback_url, 'positive_feedback_url': positive_feedback_url, }
def test_send_mail_reporter_status_changed_afgehandeld_txt_and_html(self): mail.outbox = [] # Prepare signal with status change from `BEHANDELING` to `AFGEHANDELD`. prev_status = StatusFactory.create(_signal=self.signal, state=workflow.BEHANDELING) status = StatusFactory.create(_signal=self.signal, state=workflow.AFGEHANDELD) self.signal.status = status self.signal.save() num_of_messages = reporter_mail.send_mail_reporter_status_changed_afgehandeld( self.signal, status, prev_status) self.assertEqual(1, Feedback.objects.count()) feedback = Feedback.objects.get(_signal__id=self.signal.id) self.assertEqual(num_of_messages, 1) self.assertEqual(len(mail.outbox), 1) message = mail.outbox[0] self.assertEqual(message.subject, f'Betreft melding: {self.signal.id}') self.assertEqual(message.to, [ '*****@*****.**', ]) positive_feedback_url, negative_feedback_url = get_feedback_urls( feedback) context = { 'negative_feedback_url': negative_feedback_url, 'positive_feedback_url': positive_feedback_url, 'signal': self.signal, 'status': status, } txt_message = reporter_mail._create_message( 'email/signal_status_changed_afgehandeld.txt', context=context) html_message = reporter_mail._create_message( 'email/signal_status_changed_afgehandeld.html', context=context) self.assertEqual(message.body, txt_message) content, mime_type = message.alternatives[0] self.assertEqual(mime_type, 'text/html') self.assertEqual(content, html_message)
def test_link_generation_no_environment_set(self): with mock.patch.dict('os.environ', {}, clear=True): pos_url, neg_url = get_feedback_urls(self.feedback) self.assertEqual('http://dummy_link/kto/yes/123', pos_url) self.assertEqual('http://dummy_link/kto/no/123', neg_url)
def test_link_generation_no_environment_set(self): pos_url, neg_url = get_feedback_urls(self.feedback) self.assertEqual( f'{settings.FRONTEND_URL}/kto/ja/{self.feedback.token}', pos_url) self.assertEqual( f'{settings.FRONTEND_URL}/kto/nee/{self.feedback.token}', neg_url)