Exemple #1
0
    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])
Exemple #2
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)
Exemple #4
0
    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)
Exemple #5
0
    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])
Exemple #10
0
    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)
Exemple #15
0
    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)