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 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)
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))