def test_get_email_data_by_email_id(self): self.load_example_data() workflow = self.create_workflow('get_email_data') study = workflow.study with mail.record_messages() as outbox: # Send an email we can use for get_email_data email_model = EmailService.add_email( subject='My Email Subject', sender='*****@*****.**', recipients=['*****@*****.**'], content='asdf', content_html=None, study_id=study.id) workflow_api = self.get_workflow_api(workflow) task = workflow_api.next_task # Run workflow with get_email_data workflow_api = self.complete_form(workflow, task, {'email_id': email_model.id}) # Make assertions task = workflow_api.next_task data = task.data self.assertIn('email_data', data) email_data = data['email_data'] self.assertEqual(1, len(email_data)) self.assertEqual('My Email Subject', email_data[0]['subject']) self.assertEqual('*****@*****.**', email_data[0]['sender']) self.assertEqual('[\'[email protected]\']', email_data[0]['recipients']) # Make sure we remove content_html from email_data self.assertNotIn('content_html', email_data[0])
def test_send_ramp_up_denied_email(self): with mail.record_messages() as outbox: send_ramp_up_denied_email(self.sender, self.recipients, self.approver_1) self.assertEqual(outbox[0].subject, 'Research Ramp-up Plan Denied') self.assertIn(self.approver_1, outbox[0].body) self.assertIn(self.approver_1, outbox[0].html) db_emails = EmailModel.query.count() self.assertEqual(db_emails, 1)
def test_get_dashboard_url(self): with mail.record_messages() as outbox: dashboard_url = f'https://{app.config["FRONTEND"]}' workflow = self.create_workflow('email_dashboard_url') self.get_workflow_api(workflow) self.assertEqual(1, len(outbox)) self.assertEqual('My Email Subject', outbox[0].subject) self.assertEqual(['*****@*****.**'], outbox[0].recipients) self.assertIn(dashboard_url, outbox[0].body)
def test_send_ramp_up_approval_request_first_review_email(self): with mail.record_messages() as outbox: send_ramp_up_approval_request_first_review_email( self.sender, self.recipients, self.primary_investigator) self.assertEqual(len(outbox), 1) self.assertEqual(outbox[0].subject, 'Research Ramp-up Plan Approval Request') self.assertIn(self.primary_investigator, outbox[0].body) self.assertIn(self.primary_investigator, outbox[0].html) db_emails = EmailModel.query.count() self.assertEqual(db_emails, 1)
def test_get_email_data_by_workflow_spec_id(self): self.load_example_data() workflow = self.create_workflow('get_email_data_by_workflow') study = workflow.study email_workflow = session.query(WorkflowModel).first() email_workflow_spec_id = email_workflow.workflow_spec_id with mail.record_messages() as outbox: # Send an email we can use for get_email_data email_model_one = EmailService.add_email( subject='My Email Subject', sender='*****@*****.**', recipients=['*****@*****.**'], content='asdf', content_html=None, study_id=study.id, workflow_spec_id=email_workflow_spec_id) email_model_two = EmailService.add_email( subject='My Other Email Subject', sender='*****@*****.**', recipients=['*****@*****.**'], content='xyzpdq', content_html=None, study_id=study.id, workflow_spec_id=email_workflow_spec_id) workflow_api = self.get_workflow_api(workflow) task = workflow_api.next_task # Run workflow with get_email_data workflow_api = self.complete_form( workflow, task, {'workflow_spec_id': email_workflow_spec_id}) task = workflow_api.next_task data = task.data # Make assertions self.assertIn('email_data', data) email_data = data['email_data'] self.assertEqual(2, len(email_data)) self.assertEqual('My Email Subject', email_data[0]['subject']) self.assertEqual('*****@*****.**', email_data[0]['sender']) self.assertEqual('[\'[email protected]\']', email_data[0]['recipients']) self.assertEqual('My Other Email Subject', email_data[1]['subject']) self.assertEqual('*****@*****.**', email_data[1]['sender']) self.assertEqual('[\'[email protected]\']', email_data[1]['recipients'])
def test_email_script_attachments(self): self.load_example_data() irb_code_1 = 'Study_App_Doc' irb_code_2 = 'Study_Protocol_Document' workflow = self.create_workflow('email_script') workflow_api = self.get_workflow_api(workflow) first_task = workflow_api.next_task FileService.add_workflow_file(workflow_id=workflow.id, task_spec_name=first_task.name, name="something.png", content_type="text", binary_data=b'1234', irb_doc_code=irb_code_1) FileService.add_workflow_file(workflow_id=workflow.id, task_spec_name=first_task.name, name="another.png", content_type="text", binary_data=b'67890', irb_doc_code=irb_code_1) FileService.add_workflow_file(workflow_id=workflow.id, task_spec_name=first_task.name, name="anything.png", content_type="text", binary_data=b'5678', irb_doc_code=irb_code_2) with mail.record_messages() as outbox: self.complete_form( workflow, first_task, { 'subject': 'My Test Subject', 'recipients': '*****@*****.**', 'doc_codes': [{ 'doc_code': irb_code_1 }, { 'doc_code': irb_code_2 }] }) self.assertEqual(1, len(outbox)) self.assertEqual(3, len(outbox[0].attachments)) self.assertEqual('image/png', outbox[0].attachments[0].content_type) self.assertEqual('something.png', outbox[0].attachments[0].filename) self.assertEqual(b'1234', outbox[0].attachments[0].data)
def test_email_raises_exception(self, mock_response): self.load_example_data() mock_response.return_value.ok = True mock_response.side_effect = Exception("This is my exception!") workflow = self.create_workflow('email') task_data = { 'PIComputingID': '*****@*****.**', 'ApprvlApprvr1': '*****@*****.**' } task = self.get_workflow_api(workflow).next_task with mail.record_messages() as outbox: with self.assertRaises(Exception) as e: self.complete_form(workflow, task, task_data)
def test_jinja_service_email(self): workflow = self.create_workflow('jinja_email') workflow_api = self.get_workflow_api(workflow) task = workflow_api.next_task data = {'subject': "My Email Subject", 'recipients': '*****@*****.**', 'include_me': "Hello {{name}}, This is a jinja template too!", 'name': 'World'} with mail.record_messages() as outbox: workflow_api = self.complete_form(workflow, task, data) self.assertIn('Hello World, This is a jinja template too!', outbox[0].body) self.assertIn("# Email Model", workflow_api.next_task.documentation) self.assertIn("My Email Subject", workflow_api.next_task.documentation) self.assertIn("*****@*****.**", workflow_api.next_task.documentation) print(f'test_jinja_service_email: {workflow_api.next_task.data}')
def test_email_script_multiple(self): self.load_example_data() with mail.record_messages() as outbox: workflow = self.create_workflow('email_script') workflow_api = self.get_workflow_api(workflow) first_task = workflow_api.next_task self.complete_form( workflow, first_task, { 'subject': 'My Email Subject', 'recipients': ['*****@*****.**', '*****@*****.**'] }) self.assertEqual(1, len(outbox)) self.assertEqual("My Email Subject", outbox[0].subject) self.assertEqual(2, len(outbox[0].recipients)) self.assertEqual('*****@*****.**', outbox[0].recipients[0]) self.assertEqual('*****@*****.**', outbox[0].recipients[1])
def test_send_ramp_up_submission_email(self): with mail.record_messages() as outbox: send_ramp_up_submission_email(self.sender, self.recipients, self.approver_1) self.assertEqual(len(outbox), 1) self.assertEqual(outbox[0].subject, 'Research Ramp-up Plan Submitted') self.assertIn(self.approver_1, outbox[0].body) self.assertIn(self.approver_1, outbox[0].html) send_ramp_up_submission_email(self.sender, self.recipients, self.approver_1, self.approver_2) self.assertEqual(len(outbox), 2) self.assertIn(self.approver_1, outbox[1].body) self.assertIn(self.approver_1, outbox[1].html) self.assertIn(self.approver_2, outbox[1].body) self.assertIn(self.approver_2, outbox[1].html) db_emails = EmailModel.query.count() self.assertEqual(db_emails, 2)
def test_email_attachment_empty_string(self): # This workflow specifically sends `attachments = ''` as a parameter # to the email script workflow = self.create_workflow('email_attachment_empty_string') workflow_api = self.get_workflow_api(workflow) task = workflow_api.next_task with mail.record_messages() as outbox: workflow_api = self.complete_form(workflow, task, {'subject': 'My Test Email', 'recipients': '*****@*****.**'}) task = workflow_api.next_task # Make sure 'attachments' is in task.data, and is None self.assertIn('attachments', task.data) self.assertEqual(task.data['attachments'], '') # Make sure we still send an email self.assertIn('email_id', task.data) self.assertEqual(len(outbox), 1) self.assertEqual(outbox[0].subject, "My Test Email") self.assertEqual(outbox[0].recipients, ['*****@*****.**'])
def test_email_script_associated(self): workflow = self.create_workflow('email_script') workflow_api = self.get_workflow_api(workflow) # Only dhf8r is in testing DB. # We want to test multiple associates, and lb3dp is already in testing LDAP self.create_user(uid='lb3dp', email='*****@*****.**', display_name='Laura Barnes') StudyService.update_study_associates(workflow.study_id, [{ 'uid': 'dhf8r', 'role': 'Chief Bee Keeper', 'send_email': True, 'access': True }, { 'uid': 'lb3dp', 'role': 'Chief Cat Herder', 'send_email': True, 'access': True }]) first_task = workflow_api.next_task with mail.record_messages() as outbox: self.complete_form( workflow, first_task, { 'subject': 'My Test Subject', 'recipients': ['*****@*****.**', 'associated'] }) self.assertEqual(1, len(outbox)) self.assertIn(outbox[0].recipients[0], [ '*****@*****.**', '*****@*****.**', '*****@*****.**' ]) self.assertIn(outbox[0].recipients[1], [ '*****@*****.**', '*****@*****.**', '*****@*****.**' ]) self.assertIn(outbox[0].recipients[2], [ '*****@*****.**', '*****@*****.**', '*****@*****.**' ])
def test_do_task(self): workflow = self.create_workflow('email') task_data = { 'PIComputingID': '*****@*****.**', 'ApprvlApprvr1': '*****@*****.**' } task = self.get_workflow_api(workflow).next_task with mail.record_messages() as outbox: workflow_api = self.complete_form(workflow, task, task_data) self.assertEqual(len(outbox), 1) self.assertEqual(outbox[0].subject, 'Camunda Email Subject') # PI is present self.assertIn(task_data['PIComputingID'], outbox[0].body) self.assertIn(task_data['PIComputingID'], outbox[0].html) # Approver is present self.assertIn(task_data['ApprvlApprvr1'], outbox[0].body) self.assertIn(task_data['ApprvlApprvr1'], outbox[0].html) # Test nl2br formatting self.assertIn('<strong>Test Some Formatting</strong><br />', outbox[0].html) # Correct From field self.assertEqual('*****@*****.**', outbox[0].sender) # Make sure we log the email # Grab model for comparison below db_emails = EmailModel.query.all() self.assertEqual(len(db_emails), 1) # Check whether we get a good email model back from the script self.assertIn('email_model', workflow_api.next_task.data) self.assertEqual(db_emails[0].recipients, workflow_api.next_task.data['email_model']['recipients']) self.assertEqual(db_emails[0].sender, workflow_api.next_task.data['email_model']['sender']) self.assertEqual(db_emails[0].subject, workflow_api.next_task.data['email_model']['subject'])
def test_email_script(self): with mail.record_messages() as outbox: workflow = self.create_workflow('email_script') first_task = self.get_workflow_api(workflow).next_task self.complete_form( workflow, first_task, { 'subject': 'My Email Subject', 'recipients': '*****@*****.**', 'cc': '*****@*****.**', 'bcc': '*****@*****.**', 'reply_to': '*****@*****.**' }) self.assertEqual(1, len(outbox)) self.assertEqual('My Email Subject', outbox[0].subject) self.assertEqual(['*****@*****.**'], outbox[0].recipients) self.assertEqual(['*****@*****.**'], outbox[0].cc) self.assertEqual(['*****@*****.**'], outbox[0].bcc) self.assertEqual('*****@*****.**', outbox[0].reply_to) self.assertIn('Thank you for using this email example', outbox[0].body)
def test_do_task(self): workflow = self.create_workflow('email') task_data = {'PIComputingID': 'dhf8r', 'ApprvlApprvr1': 'lb3dp'} task = self.get_workflow_api(workflow).next_task with mail.record_messages() as outbox: self.complete_form(workflow, task, task_data) self.assertEqual(len(outbox), 1) self.assertEqual(outbox[0].subject, 'Camunda Email Subject') # PI is present self.assertIn(task_data['PIComputingID'], outbox[0].body) self.assertIn(task_data['PIComputingID'], outbox[0].html) # Approver is present self.assertIn(task_data['ApprvlApprvr1'], outbox[0].body) self.assertIn(task_data['ApprvlApprvr1'], outbox[0].html) db_emails = EmailModel.query.count() self.assertEqual(db_emails, 1)
def test_send_email(self): subject = 'CR Connect Test Email' address = '*****@*****.**' data = {'user': '******'} message = """ Dear {{ user }}, Thank you for using this email example. I hope this makes sense. Yours faithfully, CR Connect """ with mail.record_messages() as outbox: rv = self.app.put( '/v1.0/send_email?subject=%s&address=%s&data=%s' % (subject, address, json.dumps(data)), data=json.dumps(message), headers=self.logged_in_headers()) self.assert_success(rv) self.assertEqual(1, len(outbox)) self.assertEqual(subject, outbox[0].subject) self.assertEqual(['*****@*****.**'], outbox[0].recipients) self.assertIn('Person of Interest', outbox[0].body)