def setUp(self): self.team_member = UserFactory() self.team = TeamFactory() self.membership = TeamMembershipFactory(user=self.team_member, team=self.team)
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)