예제 #1
0
 def setUp(self):
     self.team_member = UserFactory()
     self.team = TeamFactory()
     self.membership = TeamMembershipFactory(user=self.team_member,
                                             team=self.team)
예제 #2
0
class RemindTeamMemberTest(TestCase):
    def setUp(self):
        self.team_member = UserFactory()
        self.team = TeamFactory()
        self.membership = TeamMembershipFactory(user=self.team_member,
                                                team=self.team)

    def test_reminder_with_no_todos_or_blockers(self):
        expected_subject = 'What did you get done today?'
        expected_from_email = 'Digestus Reminder <{email}>'.format(email=self.team.email)
        expected_recipients = [
            '{name} <{email}>'.format(name=self.team_member.get_full_name(),
                                      email=self.team_member.email)
        ]

        remind_team_member(self.membership.id)

        self.assertEqual(len(mail.outbox), 1)
        outgoing_email_message = mail.outbox[0]

        self.assertEqual(outgoing_email_message.subject, expected_subject)
        self.assertEqual(outgoing_email_message.from_email, expected_from_email)
        self.assertEqual(outgoing_email_message.recipients(), expected_recipients)

    def test_reminder_with_todos_or_blockers(self):
        """
        Blockers and will do items should be included in the email body.
        """
        will_do = ['Finish Ticket #102', 'Open PR for Ticket #103']
        blockers = ['Slow internet connection', 'Power outage']

        remind_team_member(self.membership.id, will_do, blockers)

        self.assertEqual(len(mail.outbox), 1)
        outgoing_email_message = mail.outbox[0]

        for todo in will_do:
            self.assertIn(todo, outgoing_email_message.body)

        for blocker in blockers:
            self.assertIn(blocker, outgoing_email_message.body)

    def test_team_membership_does_not_exist(self):
        """
        No TeamMembership for give `membership_id`
        """
        invalid_membership_id = 999

        remind_team_member(invalid_membership_id)

        self.assertEqual(len(mail.outbox), 0)

    @mock.patch('updates.tasks.remind_team_member.retry')
    @mock.patch('updates.tasks.logger.exception')
    @mock.patch('updates.tasks.EmailMultiAlternatives')
    def test_retry_reminder_sending_if_exception_occured(self, email, logger, retry_task):
        """
        If an exception is raised when sending the reminder,
        retry the task in 5 minutes.
        """
        instance = email.return_value
        instance.send.side_effect = Exception('Dummy exception')

        remind_team_member(self.membership.id)

        self.assertTrue(logger.called)
        self.assertTrue(retry_task.called)