Esempio n. 1
0
 def setUp(self):
     self.body_plaintext = 'This is a test!'
     self.body_html = '<h1>This is a test!</h1>'
     self.subject = 'Test email'
     self.email_to = [settings.DEFAULT_FROM_EMAIL]
     self.email_from = settings.DEFAULT_FROM_EMAIL
     self.notification_type = SendEmail.EmailType.STOCK_TRANSFER
     self.group = Group.objects.create(name='administrators')  # create 'administrators' group
     self.user = User.objects.create_user('warehouse admin', settings.DEFAULT_FROM_EMAIL, 'myPwd8*e')
     self.user2 = User.objects.create_user('shop manager', '*****@*****.**', 'eekeJ839)lx*')
     self.stock_data = StockData.objects.create(
         owner=User.objects.get(username='******'),
         sku='001-001',
         desc='Test description',
         units_total=11,
         unit_price=11.23
     )
     self.mock_serialized_model_instance = {"success": True, "error": None, "user_is_admin": False,
                                            "data": {"id": 1, "record_created": datetime.utcnow(),
                                                     "record_updated": datetime.utcnow(),
                                                     "sku": "NCC-1701-E", "desc": "USS Enterprise",
                                                     "units_total": 543, "unit_price": 23.9, "units_to_transfer": 1}}
     self.stock_data.user = self.user2
     self.stock_data.units_to_transfer = 77
     self.send_email = SendEmail()
Esempio n. 2
0
 def dispatch_email(records=None, transfer=False, user=None):
     """
     method to dispatch email on successful update if transferring
     """
     email_notify_on_transfer = (records and len(records) > 0) and transfer
     if email_notify_on_transfer:
         SendEmail().compose(records=records,
                             user=user, notification_type=SendEmail.EmailType.STOCK_TRANSFER)
Esempio n. 3
0
def dispatch_email(records=None,
                   user=None,
                   pre_formatted: dict = None) -> bool:
    """
    method to dispatch email on successful update
    """
    SendEmail().compose(pre_formatted=pre_formatted,
                        user=user,
                        subject=pre_formatted['subject'],
                        notification_type=SendEmail.EmailType.STOCK_TAKE)
    return True
class SendEmailTestCase(TestCase):
    """
    test SendEmail class
    """
    def setUp(self):
        self.body_plaintext = 'This is a test!'
        self.body_html = '<h1>This is a test!</h1>'
        self.subject = 'Test email'
        self.email_to = [settings.DEFAULT_FROM_EMAIL]
        self.email_from = settings.DEFAULT_FROM_EMAIL
        self.notification_type = SendEmail.EmailType.STOCK_TRANSFER
        self.group = Group.objects.create(
            name='administrators')  # create 'administrators' group
        self.user = User.objects.create_user('warehouse admin',
                                             settings.DEFAULT_FROM_EMAIL,
                                             'myPwd8*e')
        self.user2 = User.objects.create_user('shop manager',
                                              '*****@*****.**',
                                              'eekeJ839)lx*')
        self.stock_data = StockData.objects.create(
            owner=User.objects.get(username='******'),
            sku='001-001',
            desc='Test description',
            units_total=11,
            unit_price=11.23)
        self.mock_serialized_model_instance = {
            "success": True,
            "error": None,
            "user_is_admin": False,
            "data": {
                "id": 1,
                "record_created": datetime.utcnow(),
                "record_updated": datetime.utcnow(),
                "sku": "NCC-1701-E",
                "desc": "USS Enterprise",
                "units_total": 543,
                "unit_price": 23.9,
                "units_to_transfer": 1
            }
        }
        self.stock_data.user = self.user2
        self.stock_data.units_to_transfer = 77
        self.send_email = SendEmail()

    def test_send(self):
        # test False (no email sent) if body, email_to or email_from are absent
        test_params = {
            'email_to': self.email_to,
            'email_from': self.email_from,
            'body_plaintext': self.body_plaintext,
            'body_html': self.body_html,
            'subject': self.subject
        }
        for k, v in test_params.items():
            self.assertFalse(self.send_email.send(f'{k}={v}'))
        # test True (email sent) if params are present
        settings.STOCK_MANAGEMENT_OPTIONS['email']['notifications_on'] = True
        self.assertTrue(self.send_email.send(**test_params))
        # test False if invalid email
        test_params['email_to'] = 'blah'
        self.assertFalse(self.send_email.send(**test_params))
        # test false if params are in incorrect type
        test_params_corrupt = {
            'email_to': 77,
            'email_from': 77,
            'body_plaintext': 77,
            'body_html': 77,
            'subject': 77
        }
        self.assertFalse(self.send_email.send(**test_params_corrupt))

    def test_compose(self):
        # test False if no stock instance or notification type
        self.assertFalse(self.send_email.compose())
        with as_admin(user=self.user, group=self.group):
            # test True to confirm sending
            self.assertTrue(
                self.send_email.compose(
                    records=[self.mock_serialized_model_instance],
                    user=self.user,
                    notification_type=self.notification_type))
            # test invalid email return False
            self.user.email = 'blah'
            self.assertFalse(
                self.send_email.compose(
                    records=[self.mock_serialized_model_instance],
                    user=self.user,
                    notification_type=self.notification_type))
            # test Attribute error returns False
            self.stock_data.user.email = '*****@*****.**'
            self.stock_data.desc = 77
            self.assertFalse(
                self.send_email.compose(
                    records=[self.mock_serialized_model_instance],
                    user=self.user,
                    notification_type=self.notification_type))