def test_send_assigned_offer_reminder_email_args(self, mock_remind_email):
     """ Test that the code_expiration_date passed is equal to coupon batch end date """
     serializer = CouponCodeRemindSerializer(
         data=self.data, context={'coupon': self.coupon})
     serializer._trigger_email_sending_task(  # pylint: disable=protected-access
         subject=self.SUBJECT,
         greeting=self.GREETING,
         closing=self.CLOSING,
         assigned_offer=self.offer_assignment,
         redeemed_offer_count=3,
         total_offer_count=5,
         sender_alias=self.SENDER_ALIAS,
     )
     expected_expiration_date = self.coupon.attr.coupon_vouchers.vouchers.first(
     ).end_datetime
     mock_remind_email.assert_called_with(
         subject=self.SUBJECT,
         greeting=self.GREETING,
         closing=self.CLOSING,
         learner_email=self.offer_assignment.user_email,
         code=self.offer_assignment.code,
         redeemed_offer_count=mock.ANY,
         total_offer_count=mock.ANY,
         code_expiration_date=expected_expiration_date.strftime(
             '%d %B, %Y %H:%M %Z'),
         sender_alias=self.SENDER_ALIAS)
    def test_send_reminder_email_error(self, mock_email):
        """ Test that we log an appropriate message if the code reminder email cannot be sent. """
        mock_email.side_effect = Exception('Ignore me - reminder')
        serializer = CouponCodeRemindSerializer(
            data=self.data, context={'coupon': self.coupon})
        expected = [
            (self.LOGGER_NAME, 'ERROR',
             '[Offer Reminder] Email for offer_assignment_id: {} with greeting \'{}\' and closing \'{}\' raised '
             'exception: Exception(\'Ignore me - reminder\',)'.format(
                 self.offer_assignment.id,
                 self.GREETING,
                 self.CLOSING,
             )),
        ]

        with self.assertRaises(Exception):
            with LogCapture(self.LOGGER_NAME) as log:
                serializer._trigger_email_sending_task(  # pylint: disable=protected-access
                    greeting=self.GREETING,
                    closing=self.CLOSING,
                    assigned_offer=self.offer_assignment,
                    redeemed_offer_count=3,
                    total_offer_count=5,
                )
        log.check_present(*expected)
    def test_send_reminder_email_error(self, mock_email):
        """ Test that we log an appropriate message if the code reminder email cannot be sent. """
        mock_email.side_effect = Exception('Ignore me - reminder')
        serializer = CouponCodeRemindSerializer(
            data=self.data, context={'coupon': self.coupon})
        expected = [
            (self.LOGGER_NAME, 'ERROR',
             '[Offer Reminder] Email for offer_assignment_id: {} with subject \'{}\', greeting \'{}\' '
             'closing \'{}\' attachments {}, and base_enterprise_url \'{}\' raised exception: {}'
             .format(self.offer_assignment.id, self.SUBJECT, self.GREETING,
                     self.CLOSING, self.ATTACHMENTS, self.BASE_ENTERPRISE_URL,
                     repr(Exception('Ignore me - reminder')))),
        ]

        with self.assertRaises(Exception):
            with LogCapture(self.LOGGER_NAME) as log:
                serializer._trigger_email_sending_task(  # pylint: disable=protected-access
                    subject=self.SUBJECT,
                    greeting=self.GREETING,
                    closing=self.CLOSING,
                    assigned_offer=self.offer_assignment,
                    redeemed_offer_count=3,
                    total_offer_count=5,
                    sender_alias=self.SENDER_ALIAS,
                    reply_to=self.REPLY_TO,
                    attachments=self.ATTACHMENTS,
                    base_enterprise_url=self.BASE_ENTERPRISE_URL,
                )
        log.check_present(*expected)