Exemple #1
0
    def test_send_mail_reporter_status_changed_afgehandeld(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(1, Feedback.objects.count())
        self.assertEqual(len(mail.outbox), 1)
        self.assertEqual(mail.outbox[0].subject,
                         f'Betreft melding: {self.signal.id}')
        self.assertEqual(mail.outbox[0].to, [
            self.signal.reporter.email,
        ])

        # we want a history entry when a email was sent
        self.assertEqual(Note.objects.count(), 1)
Exemple #2
0
    def test_send_mail_reporter_status_changed_afgehandeld_no_email(self):
        # Prepare signal with status change to `AFGEHANDELD`.
        StatusFactory.create(_signal=self.signal_no_email,
                             state=workflow.BEHANDELING)
        status = StatusFactory.create(_signal=self.signal_no_email,
                                      state=workflow.AFGEHANDELD)
        self.signal_no_email.status = status
        self.signal_no_email.save()

        self._apply_mail_actions(['Send mail signal handled'],
                                 self.signal_no_email)

        # no mail rule should activate
        actions = self._get_mail_rules(['Send mail signal handled'
                                        ])._get_actions(self.signal_no_email)
        self.assertEqual(len(actions), 0)

        # Check mail contents
        ma = MailActions()
        ma.apply(signal_id=self.signal_no_email.id)
        self.assertEqual(0, Feedback.objects.count())
        self.assertEqual(len(mail.outbox), 0)

        # we want no history entry when no email was sent
        self.assertEqual(Note.objects.count(), 0)
Exemple #3
0
    def test_links_in_different_environments(self):
        """Test that generated feedback links contain the correct host."""
        # Prepare signal with status change 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()

        # Check that generated emails contain the correct links for all
        # configured environments:
        env_fe_mapping = getattr(settings, 'FEEDBACK_ENV_FE_MAPPING',
                                 feedback_settings.FEEDBACK_ENV_FE_MAPPING)
        self.assertEqual(len(env_fe_mapping),
                         3)  # sanity check Amsterdam installation has three

        for environment, fe_location in env_fe_mapping.items():
            local_env = {'ENVIRONMENT': environment}

            with mock.patch.dict('os.environ', local_env):
                mail.outbox = []
                ma = MailActions()
                ma.apply(signal_id=self.signal.id)

                self.assertEqual(len(mail.outbox), 1)
                message = mail.outbox[0]
                self.assertIn(fe_location, message.body)
                self.assertIn(fe_location, message.alternatives[0][0])

        # we want a history entry when a email was sent
        self.assertEqual(Note.objects.count(), len(env_fe_mapping))
Exemple #4
0
    def test_optional_mail_GEANNULEERD(self):
        # check normal signal
        new_status = StatusFactory.create(_signal=self.signal,
                                          state=workflow.GEANNULEERD,
                                          send_email=False)
        self.signal.status = new_status
        self.signal.save()

        rules = self._get_mail_rules(['Send mail optional'
                                      ])._get_actions(self.signal)
        self.assertEqual(len(rules), 0)

        new_status = StatusFactory.create(_signal=self.signal,
                                          state=workflow.GEANNULEERD,
                                          send_email=True)
        self.signal.status = new_status
        self.signal.save()

        rules = self._get_mail_rules(['Send mail optional'
                                      ])._get_actions(self.signal)
        self.assertEqual(len(rules), 1)

        # ... not for child signal
        new_status = StatusFactory.create(_signal=self.child_signal,
                                          state=workflow.GEANNULEERD,
                                          send_email=True)
        self.child_signal.status = new_status
        self.child_signal.save()

        rules = self._get_mail_rules(['Send mail optional'
                                      ])._get_actions(self.child_signal)
        self.assertEqual(len(rules), 0)
Exemple #5
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'Betreft melding: {self.signal.id}')
        self.assertEqual(message.to, [
            self.signal.reporter.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,
        }
        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)
Exemple #6
0
    def test_send_mail_reporter_status_changed_afgehandeld_no_email(self):
        # Prepare signal with status change to `AFGEHANDELD`.
        prev_status = StatusFactory.create(_signal=self.signal, state=workflow.BEHANDELING)
        status = StatusFactory.create(_signal=self.signal_no_email, state=workflow.AFGEHANDELD)
        self.signal_no_email.status = status
        self.signal_no_email.save()

        num_of_messages = reporter_mail.send_mail_reporter_status_changed_afgehandeld(
            self.signal_no_email, status, prev_status
        )

        self.assertEqual(0, Feedback.objects.count())
        self.assertEqual(num_of_messages, None)
Exemple #7
0
    def test_send_no_mail_reporter_status_changed_afgehandeld_after_verzoek_tot_heropenen(self):
        # Prepare signal with status change from `VERZOEK_TOT_HEROPENEN` to `AFGEHANDELD`.
        prev_status = StatusFactory.create(
            _signal=self.signal, state=workflow.VERZOEK_TOT_HEROPENEN
        )
        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(0, Feedback.objects.count())
        self.assertEqual(num_of_messages, None)
        self.assertEqual(len(mail.outbox), 0)
Exemple #8
0
    def test_send_mail_reporter_status_changed_afgehandeld(self):
        # 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())
        self.assertEqual(num_of_messages, 1)
        self.assertEqual(len(mail.outbox), 1)
        self.assertEqual(mail.outbox[0].subject, f'Betreft melding: {self.signal.id}')
        self.assertEqual(mail.outbox[0].to, ['*****@*****.**', ])
Exemple #9
0
    def test_links_in_different_environments(self):
        """Test that generated feedback links contain the correct host."""
        # Prepare signal with status change to `AFGEHANDELD`.
        prev_status = self.signal.status
        status = StatusFactory.create(_signal=self.signal, state=workflow.AFGEHANDELD)
        self.signal.status = status
        self.signal.save()

        # Check that generated emails contain the correct links for all
        # configured environments:
        env_fe_mapping = getattr(settings,
                                 'FEEDBACK_ENV_FE_MAPPING',
                                 feedback_settings.FEEDBACK_ENV_FE_MAPPING)
        self.assertEqual(len(env_fe_mapping), 3)  # sanity check Amsterdam installation has three

        for environment, fe_location in env_fe_mapping.items():
            local_env = {'ENVIRONMENT': environment}

            with mock.patch.dict('os.environ', local_env):
                mail.outbox = []
                num_of_messages = reporter_mail.send_mail_reporter_status_changed_afgehandeld(
                    self.signal, status, prev_status
                )

                self.assertEqual(num_of_messages, 1)
                self.assertEqual(len(mail.outbox), 1)
                message = mail.outbox[0]
                self.assertIn(fe_location, message.body)
                self.assertIn(fe_location, message.alternatives[0][0])
Exemple #10
0
    def test_links_environment_env_var_not_set(self):
        """Deals with the case where nothing is overridden and `environment` not set."""
        # Prepare signal with status change to `AFGEHANDELD`.
        prev_status = self.signal.status
        status = StatusFactory.create(_signal=self.signal, state=workflow.AFGEHANDELD)
        self.signal.status = status
        self.signal.save()

        # Check that generated emails contain the correct links for all
        # configured environments:
        env_fe_mapping = feedback_settings.FEEDBACK_ENV_FE_MAPPING
        self.assertEqual(len(env_fe_mapping), 1)

        for environment, fe_location in env_fe_mapping.items():
            with mock.patch.dict('os.environ', {}, clear=True):
                mail.outbox = []
                num_of_messages = reporter_mail.send_mail_reporter_status_changed_afgehandeld(
                    self.signal, status, prev_status
                )

                self.assertEqual(num_of_messages, 1)
                self.assertEqual(len(mail.outbox), 1)
                message = mail.outbox[0]
                self.assertIn('http://dummy_link', message.body)
                self.assertIn('http://dummy_link', message.alternatives[0][0])
Exemple #11
0
    def test_links_environment_env_var_not_set(self):
        """Deals with the case where nothing is overridden and `environment` not set."""

        # Prepare signal with status change to `AFGEHANDELD`.
        status = StatusFactory.create(_signal=self.signal,
                                      state=workflow.AFGEHANDELD)
        self.signal.status = status
        self.signal.save()

        # Check that generated emails contain the correct links for all
        # configured environments:
        env_fe_mapping = feedback_settings.FEEDBACK_ENV_FE_MAPPING
        self.assertEqual(len(env_fe_mapping), 1)

        for environment, fe_location in env_fe_mapping.items():
            with mock.patch.dict('os.environ', {}, clear=True):
                mail.outbox = []
                ma = MailActions()
                ma.apply(signal_id=self.signal.id)

                self.assertEqual(len(mail.outbox), 1)
                message = mail.outbox[0]
                self.assertIn('http://dummy_link', message.body)
                self.assertIn('http://dummy_link', message.alternatives[0][0])

        # we want a history entry when a email was sent
        self.assertEqual(Note.objects.count(), len(env_fe_mapping))
Exemple #12
0
    def test_update_status_handler(self, mocked_tasks):
        prev_status = self.signal.status
        new_status = StatusFactory.create(_signal=self.signal)

        self.signal.status = new_status
        self.signal.save()

        update_status.send_robust(sender=self.__class__,
                                  signal_obj=self.signal,
                                  status=new_status,
                                  prev_status=prev_status)

        mocked_tasks.send_mail_reporter_status_changed_afgehandeld.delay.assert_called_once_with(
            signal_pk=self.signal.id,
            status_pk=new_status.id,
            prev_status_pk=prev_status.pk)
        mocked_tasks.send_mail_reporter_status_changed_heropend.delay.assert_called_once_with(
            signal_pk=self.signal.pk,
            status_pk=new_status.id,
            prev_status_pk=prev_status.pk)
        mocked_tasks.send_mail_reporter_status_changed_ingepland.delay.assert_called_once_with(
            signal_pk=self.signal.pk,
            status_pk=new_status.id,
            prev_status_pk=prev_status.pk)
        mocked_tasks.send_mail_reporter_status_changed_split.delay.assert_called_once_with(
            signal_pk=self.signal.pk,
            status_pk=new_status.id,
            prev_status_pk=prev_status.pk)
Exemple #13
0
    def test_send_mail_reporter_status_changed_split_no_correct_status(self):
        """No resolution GESPLITST email should be sent if status is not GESPLITST."""
        wrong_status = StatusFactory.create(state=workflow.GEMELD)
        self.parent_signal.status = wrong_status

        num_of_messages = reporter_mail.send_mail_reporter_status_changed_split(
            self.parent_signal, self.parent_signal.status)
        self.assertEqual(num_of_messages, None)
Exemple #14
0
    def test_send_mail_reporter_created_only_once(self):
        signal = SignalFactory.create(reporter__email='*****@*****.**')

        status = StatusFactory.create(_signal=signal,
                                      state=workflow.BEHANDELING)
        signal.status = status
        signal.save()

        status = StatusFactory.create(_signal=signal, state=workflow.GEMELD)
        signal.status = status
        signal.save()

        MailActions().apply(signal_id=signal.id, send_mail=True)
        self.assertEqual(len(mail.outbox), 0)

        # we want no history entry when no email was sent
        self.assertEqual(Note.objects.count(), 0)
Exemple #15
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)
Exemple #16
0
    def test_triggered_on_update_status(self, patched_actions):
        prev_status = self.signal.status
        new_status = StatusFactory.create(_signal=self.signal,
                                          state=workflow.BEHANDELING)
        self.signal.status = new_status
        self.signal.save()

        update_status.send_robust(sender=self.__class__,
                                  signal_obj=self.signal,
                                  status=new_status,
                                  prev_status=prev_status)
Exemple #17
0
    def test_send_optional_mail_GEANNULEERD(self, patched_send_mail):
        signal = self.signal
        new_status = StatusFactory.create(_signal=signal,
                                          state=workflow.GEANNULEERD,
                                          send_email=True)
        signal.status = new_status
        signal.save()

        self._get_mail_rules(['Send mail optional']).apply(signal_id=signal.pk,
                                                           send_mail=True)
        patched_send_mail.assert_called_once()
        self.assertEqual(Note.objects.count(), 1)
Exemple #18
0
    def test_send_mail_reporter_status_changed_afgehandeld_no_status_afgehandeld(self):
        # Note: SignalFactory always creates a signal with GEMELD status.
        prev_status = self.signal.status
        status = StatusFactory.create(_signal=self.signal, state=workflow.BEHANDELING)
        self.signal.status = status
        self.signal.save()

        num_of_messages = reporter_mail.send_mail_reporter_status_changed_afgehandeld(
            signal=self.signal, status=self.signal.status, prev_status=prev_status
        )

        self.assertEqual(0, Feedback.objects.count())
        self.assertEqual(num_of_messages, None)
    def test_status_update_handler_object_does_not_exist(self):
        signal = SignalFactory.create()
        prev_status = signal.status

        new_status = StatusFactory.create(_signal=signal)
        signal.status = new_status
        signal.save()

        update_status.send_robust(
            sender=self.__class__,
            signal_obj=signal,
            status=new_status,
            prev_status=prev_status,
        )
Exemple #20
0
    def test_send_no_mail_reporter_status_changed_afgehandeld_after_verzoek_tot_heropenen(
            self):
        # Prepare signal with status change from `VERZOEK_TOT_HEROPENEN` to `AFGEHANDELD`,
        # this should not lead to an email being sent.
        StatusFactory.create(_signal=self.signal,
                             state=workflow.VERZOEK_TOT_HEROPENEN)
        status = StatusFactory.create(_signal=self.signal,
                                      state=workflow.AFGEHANDELD)
        self.signal.status = status
        self.signal.save()

        # no mail rule should activate
        ma = MailActions(mail_rules=SIGNAL_MAIL_RULES)
        activated = ma._get_actions(self.signal)
        self.assertEqual(len(activated), 0)

        # Check mail contents
        ma.apply(signal_id=self.signal.id)
        self.assertEqual(0, Feedback.objects.count())
        self.assertEqual(len(mail.outbox), 0)

        # we want no history entry when no email was sent
        self.assertEqual(Note.objects.count(), 0)
    def test_status_update_handler(self, mocked_tasks):
        signal = SignalFactory.create()
        prev_status = signal.status

        new_status = StatusFactory.create(_signal=signal)
        signal.status = new_status
        signal.save()

        update_status.send_robust(
            sender=self.__class__,
            signal_obj=signal,
            status=new_status,
            prev_status=prev_status,
        )

        mocked_tasks.push_to_sigmax.delay.assert_called_once_with(pk=signal.id)
Exemple #22
0
    def test_send_mail_reporter_status_changed_afgehandeld_no_status_afgehandeld(
            self):
        # Note: SignalFactory always creates a signal with GEMELD status.
        # TODO: test is redundant, remove
        status = StatusFactory.create(_signal=self.signal,
                                      state=workflow.BEHANDELING)
        self.signal.status = status
        self.signal.save()

        # no mail rule should activate
        ma = MailActions(mail_rules=SIGNAL_MAIL_RULES)
        activated = ma._get_actions(self.signal)
        self.assertEqual(len(activated), 0)

        # Check mail contents
        ma.apply(signal_id=self.signal.id)
        self.assertEqual(0, Feedback.objects.count())
        self.assertEqual(len(mail.outbox), 0)

        # we want no history entry when no email was sent
        self.assertEqual(Note.objects.count(), 0)