def test_correct_bounces_created(self): """Test to ensure that bounces are correctly inserted""" # Delete any existing bounces Bounce.objects.all().delete() result = views.process_bounce(self.bounce, self.notification) self.assertEqual(result.status_code, 200) self.assertEqual(result.content.decode('ascii'), 'Bounce Processed') self.assertTrue(Bounce.objects.filter( sns_topic=('arn:aws:sns:us-east-1:250214102493:' 'Demo_App_Unsubscribes'), sns_messageid='f34c6922-c3a1-54a1-bd88-23f998b43978', mail_timestamp=clean_time('2012-06-19T01:05:45.000Z'), mail_id=('00000138111222aa-33322211-cccc-cccc-cccc-' 'ddddaaaa0680-000000'), mail_from='*****@*****.**', address='*****@*****.**', feedback_id=('000001378603176d-5a4b5ad9-6f30-4198-a8c3-' 'b1eb0c270a1d-000000'), feedback_timestamp=clean_time('2012-05-25T14:59:38.605-07:00'), hard=True, bounce_type='Permanent', bounce_subtype='General', reporting_mta='example.com', action='failed', status='5.0.0', diagnostic_code='smtp; 550 user unknown' ).exists())
def test_correct_complaint_created(self): """Test that the correct complaint was created""" Complaint.objects.all().delete() result = views.process_complaint(self.complaint, self.complaint_notification) self.assertEqual(result.status_code, 200) self.assertEqual(result.content.decode('ascii'), 'Complaint Processed') self.assertTrue( Complaint.objects.filter( sns_topic=('arn:aws:sns:us-east-1:250214102493:' 'Demo_App_Unsubscribes'), sns_messageid='217eaf35-67ae-5230-874a-e5df4c5c71c0', mail_timestamp=clean_time('2012-05-25T14:59:38.623-07:00'), mail_id=('000001378603177f-7a5433e7-8edb-42ae-af10-' 'f0181f34d6ee-000000'), mail_from='*****@*****.**', address='*****@*****.**', feedback_id=('000001378603177f-18c07c78-fa81-4a58-9dd1-' 'fedc3cb8f49a-000000'), feedback_timestamp=clean_time('2012-05-25T14:59:38.623-07:00'), useragent='Comcast Feedback Loop (V0.01)', arrival_date=clean_time( '2009-12-03T04:24:21.000-05:00')).exists())
def test_correct_bounces_created(self): """Test to ensure that bounces are correctly inserted""" # Delete any existing bounces Bounce.objects.all().delete() result = views.process_bounce(self.bounce, self.notification) self.assertEqual(result.status_code, 200) self.assertEqual(result.content.decode('ascii'), 'Bounce Processed') self.assertTrue( Bounce.objects.filter( sns_topic=('arn:aws:sns:us-east-1:250214102493:' 'Demo_App_Unsubscribes'), sns_messageid='f34c6922-c3a1-54a1-bd88-23f998b43978', mail_timestamp=clean_time('2012-06-19T01:05:45.000Z'), mail_id=('00000138111222aa-33322211-cccc-cccc-cccc-' 'ddddaaaa0680-000000'), mail_from='*****@*****.**', address='*****@*****.**', feedback_id=('000001378603176d-5a4b5ad9-6f30-4198-a8c3-' 'b1eb0c270a1d-000000'), feedback_timestamp=clean_time('2012-05-25T14:59:38.605-07:00'), hard=True, bounce_type='Permanent', bounce_subtype='General', reporting_mta='example.com', action='failed', status='5.0.0', diagnostic_code='smtp; 550 user unknown').exists())
def process_bounce(message, notification): """Function to process a bounce notification""" mail = message["mail"] bounce = message["bounce"] bounces = [] for recipient in bounce["bouncedRecipients"]: # Create each bounce record. Add to a list for reference later. bounces += [ Bounce.objects.create( sns_topic=notification["TopicArn"], sns_messageid=notification["MessageId"], mail_timestamp=clean_time(mail["timestamp"]), mail_id=mail["messageId"], mail_from=mail["source"], address=recipient["emailAddress"], feedback_id=bounce["feedbackId"], feedback_timestamp=clean_time(bounce["timestamp"]), hard=bool(bounce["bounceType"] == "Permanent"), bounce_type=bounce["bounceType"], bounce_subtype=bounce["bounceSubType"], reporting_mta=bounce.get("reportingMTA"), action=recipient.get("action"), status=recipient.get("status"), diagnostic_code=recipient.get("diagnosticCode"), ) ] # Send signals for each bounce. for bounce in bounces: signals.feedback.send(sender=Bounce, instance=bounce, message=message, notification=notification) logger.info("Logged %s Bounce(s)", str(len(bounces))) return HttpResponse("Bounce Processed")
def process_complaint(message, notification): """Function to process a complaint notification""" mail = message['mail'] complaint = message['complaint'] if 'arrivalDate' in complaint: arrival_date = clean_time(complaint['arrivalDate']) else: arrival_date = None complaints = [] for recipient in complaint['complainedRecipients']: # Create each Complaint. Save in a list for reference later. complaints += [ Complaint.objects.create( sns_topic=notification['TopicArn'], sns_messageid=notification['MessageId'], mail_timestamp=clean_time(mail['timestamp']), mail_id=mail['messageId'], mail_from=mail['source'], address=recipient['emailAddress'], feedback_id=complaint['feedbackId'], feedback_timestamp=clean_time(complaint['timestamp']), useragent=complaint.get('userAgent'), feedback_type=complaint.get('complaintFeedbackType'), arrival_date=arrival_date, dump=message, ) ] # Send signals for each complaint. for complaint in complaints: signals.feedback.send(sender=Complaint, instance=complaint, message=message, notification=notification) logger.info('Logged %s Complaint(s)', str(len(complaints))) return HttpResponse('Complaint Processed')
def test_correct_delivery_created(self): """Test that the correct delivery was created""" Delivery.objects.all().delete() result = views.process_delivery( self.delivery, self.delivery_notification) self.assertEqual(result.status_code, 200) self.assertEqual(result.content.decode('ascii'), 'Delivery Processed') self.assertTrue(Delivery.objects.filter( sns_topic='arn:aws:sns:us-east-1:674400795651:Bouncy_Test', sns_messageid='fbdf2eda-c5ed-5096-a8d7-61a043f7db6e', mail_timestamp=clean_time('2014-05-28T22:40:59.638Z'), mail_id='0000014644fe5ef6-9a483358-9170-4cb4-a269-f5dcdf415321-000' '000', mail_from='*****@*****.**', address='*****@*****.**', # delivery delivered_time=clean_time('2014-05-28T22:41:01.184Z'), processing_time=546, smtp_response='250 ok: Message 64111812 accepted' ).exists())
def process_delivery(message, notification): """Function to process a delivery notification""" mail = message['mail'] delivery = message['delivery'] if 'timestamp' in delivery: delivered_datetime = clean_time(delivery['timestamp']) else: delivered_datetime = None deliveries = [] for eachrecipient in delivery['recipients']: # Create each delivery deliveries += [ Delivery.objects.create( sns_topic=notification['TopicArn'], sns_messageid=notification['MessageId'], mail_timestamp=clean_time(mail['timestamp']), mail_id=mail['messageId'], mail_from=mail['source'], address=eachrecipient, # delivery delivered_time=delivered_datetime, processing_time=int(delivery['processingTimeMillis']), smtp_response=delivery['smtpResponse'], dump=message, ) ] # Send signals for each delivery. for eachdelivery in deliveries: signals.feedback.send(sender=Delivery, instance=eachdelivery, message=message, notification=notification) logger.info('Logged %s Deliveries(s)', str(len(deliveries))) return HttpResponse('Delivery Processed')
def process_bounce(message, notification): """Function to process a bounce notification""" mail = message['mail'] bounce = message['bounce'] bounces = [] for recipient in bounce['bouncedRecipients']: # Create each bounce record. Add to a list for reference later. bounces += [ Bounce.objects.create( sns_topic=notification['TopicArn'], sns_messageid=notification['MessageId'], mail_timestamp=clean_time(mail['timestamp']), mail_id=mail['messageId'], mail_from=mail['source'], address=recipient['emailAddress'], feedback_id=bounce['feedbackId'], feedback_timestamp=clean_time(bounce['timestamp']), hard=bool(bounce['bounceType'] == 'Permanent'), bounce_type=bounce['bounceType'], bounce_subtype=bounce['bounceSubType'], reporting_mta=bounce.get('reportingMTA'), action=recipient.get('action'), status=recipient.get('status'), diagnostic_code=recipient.get('diagnosticCode'), dump=message, ) ] # Send signals for each bounce. for bounce in bounces: signals.feedback.send(sender=Bounce, instance=bounce, message=message, notification=notification) logger.info('Logged %s Bounce(s)', str(len(bounces))) return HttpResponse('Bounce Processed')
def process_complaint(message, notification): """Function to process a complaint notification""" mail = message['mail'] complaint = message['complaint'] if 'arrivalDate' in complaint: arrival_date = clean_time(complaint['arrivalDate']) else: arrival_date = None complaints = [] for recipient in complaint['complainedRecipients']: # Create each Complaint. Save in a list for reference later. complaints += [Complaint.objects.create( sns_topic=notification['TopicArn'], sns_messageid=notification['MessageId'], mail_timestamp=clean_time(mail['timestamp']), mail_id=mail['messageId'], mail_from=mail['source'], address=recipient['emailAddress'], feedback_id=complaint['feedbackId'], feedback_timestamp=clean_time(complaint['timestamp']), useragent=complaint.get('userAgent'), feedback_type=complaint.get('complaintFeedbackType'), arrival_date=arrival_date )] # Send signals for each complaint. for complaint in complaints: signals.feedback.send( sender=Complaint, instance=complaint, message=message, notification=notification ) logger.info('Logged %s Complaint(s)', str(len(complaints))) return HttpResponse('Complaint Processed')
def process_bounce(message, notification): """Function to process a bounce notification""" mail = message['mail'] bounce = message['bounce'] bounces = [] for recipient in bounce['bouncedRecipients']: # Create each bounce record. Add to a list for reference later. bounces += [Bounce.objects.create( sns_topic=notification['TopicArn'], sns_messageid=notification['MessageId'], mail_timestamp=clean_time(mail['timestamp']), mail_id=mail['messageId'], mail_from=mail['source'], address=recipient['emailAddress'], feedback_id=bounce['feedbackId'], feedback_timestamp=clean_time(bounce['timestamp']), hard=bool(bounce['bounceType'] == 'Permanent'), bounce_type=bounce['bounceType'], bounce_subtype=bounce['bounceSubType'], reporting_mta=bounce.get('reportingMTA'), action=recipient.get('action'), status=recipient.get('status'), diagnostic_code=recipient.get('diagnosticCode') )] # Send signals for each bounce. for bounce in bounces: signals.feedback.send( sender=Bounce, instance=bounce, message=message, notification=notification ) logger.info('Logged %s Bounce(s)', str(len(bounces))) return HttpResponse('Bounce Processed')
def process_delivery(message, notification): """Function to process a delivery notification""" mail = message['mail'] delivery = message['delivery'] if 'timestamp' in delivery: delivered_datetime = clean_time(delivery['timestamp']) else: delivered_datetime = None deliveries = [] for eachrecipient in delivery['recipients']: # Create each delivery deliveries += [Delivery.objects.create( sns_topic=notification['TopicArn'], sns_messageid=notification['MessageId'], mail_timestamp=clean_time(mail['timestamp']), mail_id=mail['messageId'], mail_from=mail['source'], address=eachrecipient, # delivery delivered_time=delivered_datetime, processing_time=int(delivery['processingTimeMillis']), smtp_response=delivery['smtpResponse'] )] # Send signals for each delivery. for eachdelivery in deliveries: signals.feedback.send( sender=Delivery, instance=eachdelivery, message=message, notification=notification ) logger.info('Logged %s Deliveries(s)', str(len(deliveries))) return HttpResponse('Delivery Processed')
def test_correct_delivery_created_long_response_time(self): """Test that the correct delivery was created with a long processing_time""" Delivery.objects.all().delete() self.delivery['delivery']['processingTimeMillis'] = 123999123 result = views.process_delivery(self.delivery, self.delivery_notification) self.assertEqual(result.status_code, 200) self.assertEqual(result.content.decode('ascii'), 'Delivery Processed') self.assertTrue( Delivery.objects.filter( sns_topic='arn:aws:sns:us-east-1:674400795651:Bouncy_Test', sns_messageid='fbdf2eda-c5ed-5096-a8d7-61a043f7db6e', mail_timestamp=clean_time('2014-05-28T22:40:59.638Z'), mail_id= '0000014644fe5ef6-9a483358-9170-4cb4-a269-f5dcdf415321-000' '000', mail_from='*****@*****.**', address='*****@*****.**', # delivery delivered_time=clean_time('2014-05-28T22:41:01.184Z'), processing_time=123999123, smtp_response='250 ok: Message 64111812 accepted').exists())
def test_correct_complaint_created(self): """Test that the correct complaint was created""" Complaint.objects.all().delete() result = views.process_complaint( self.complaint, self.complaint_notification) self.assertEqual(result.status_code, 200) self.assertEqual(result.content.decode('ascii'), 'Complaint Processed') self.assertTrue(Complaint.objects.filter( sns_topic=('arn:aws:sns:us-east-1:250214102493:' 'Demo_App_Unsubscribes'), sns_messageid='217eaf35-67ae-5230-874a-e5df4c5c71c0', mail_timestamp=clean_time('2012-05-25T14:59:38.623-07:00'), mail_id=('000001378603177f-7a5433e7-8edb-42ae-af10-' 'f0181f34d6ee-000000'), mail_from='*****@*****.**', address='*****@*****.**', feedback_id=('000001378603177f-18c07c78-fa81-4a58-9dd1-' 'fedc3cb8f49a-000000'), feedback_timestamp=clean_time('2012-05-25T14:59:38.623-07:00'), useragent='Comcast Feedback Loop (V0.01)', arrival_date=clean_time('2009-12-03T04:24:21.000-05:00') ).exists())
def process_complaint(message, notification): """Function to process a complaint notification""" mail = message["mail"] complaint = message["complaint"] if "arrivalDate" in complaint: arrival_date = clean_time(complaint["arrivalDate"]) else: arrival_date = None complaints = [] for recipient in complaint["complainedRecipients"]: # Create each Complaint. Save in a list for reference later. complaints += [ Complaint.objects.create( sns_topic=notification["TopicArn"], sns_messageid=notification["MessageId"], mail_timestamp=clean_time(mail["timestamp"]), mail_id=mail["messageId"], mail_from=mail["source"], address=recipient["emailAddress"], feedback_id=complaint["feedbackId"], feedback_timestamp=clean_time(complaint["timestamp"]), useragent=complaint.get("userAgent"), feedback_type=complaint.get("complaintFeedbackType"), arrival_date=arrival_date, ) ] # Send signals for each complaint. for complaint in complaints: signals.feedback.send(sender=Complaint, instance=complaint, message=message, notification=notification) logger.info("Logged %s Complaint(s)", str(len(complaints))) return HttpResponse("Complaint Processed")