Esempio n. 1
0
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)
Esempio n. 2
0
    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)
Esempio n. 3
0
    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)
Esempio n. 4
0
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,
    }
Esempio n. 5
0
    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)
Esempio n. 6
0
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,
    }
Esempio n. 7
0
    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)
Esempio n. 8
0
 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)
Esempio n. 9
0
 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)