예제 #1
0
    def test_export_tasks_bucket_exists(self, create_conn, mail):
        """Test JOB export_tasks to bucket works."""
        user = UserFactory.create(admin=True)
        project = ProjectFactory.create(name='test_project',
                                        info={'export-bucket': 'buck'})
        task = TaskFactory.create(project=project)
        task_run = TaskRunFactory.create(project=project, task=task)
        conn = create_conn.return_value
        conn.create_bucket.side_effect = Exception
        buck = conn.get_bucket.return_value
        key = buck.new_key.return_value
        key.generate_url.return_value = 'https://s3.com/buck/key'

        with patch.dict(self.flask_app.config, {
                'EXPORT_MAX_SIZE': 0,
                'EXPORT_BUCKET': 'export-bucket'
        }):
            export_tasks(user.email_addr, project.short_name, 'consensus',
                         False, 'csv')
        args, kwargs = mail.send.call_args
        message = args[0]
        assert message.recipients[0] == user.email_addr, message.recipients
        assert message.subject == 'Data exported for your project: test_project', message.subject
        assert not message.attachments
        assert 'https://s3.com/buck/key' in message.html
예제 #2
0
    def test_export_tasks(self, task_json_exporter, task_csv_exporter, mail):
        """Test JOB export_tasks works."""
        user = UserFactory.create(admin=True)
        project = ProjectFactory.create(name='test_project')
        task = TaskFactory.create(project=project)
        task_run = TaskRunFactory.create(project=project, task=task)

        export_tasks(user.email_addr, project.short_name, 'task', False, 'csv')
        export_tasks(user.email_addr, project.short_name, 'task', False, 'json')

        task_csv_exporter.make_zip.assert_called_once_with(project, 'task', False, None)
        task_json_exporter.make_zip.assert_called_once_with(project, 'task', False, None)
예제 #3
0
 def test_error(self, mail):
     """Test JOB export_tasks invalid type."""
     user = UserFactory.create(admin=True)
     project = ProjectFactory.create(name='test_project')
     export_tasks(user.email_addr, project.short_name, 'task', False,
                  'blerson')
     args, kwargs = mail.send.call_args
     message = args[0]
     assert message.recipients[0] == user.email_addr, message.recipients
     proj_name = unidecode(project.short_name)
     expected_subject = u'Data export failed for your project: {}'.format(
         project.name)
     assert message.subject == expected_subject, message.subject
예제 #4
0
    def test_export_tasks_consensus_csv(self, mail):
        """Test JOB export_tasks consensus works."""
        user = UserFactory.create(admin=True)
        project = ProjectFactory.create(name='test_project')
        task = TaskFactory.create(project=project)
        task_run = TaskRunFactory.create(project=project, task=task)

        export_tasks(user.email_addr, project.short_name, 'consensus', False,
                     'csv')
        args, kwargs = mail.send.call_args
        message = args[0]
        assert message.recipients[0] == user.email_addr, message.recipients
        assert message.subject == 'Data exported for your project: test_project', message.subject
        attachment = message.attachments[0]
        proj_name = unidecode(project.short_name)
        filename = '{}_{}'.format(project.id, proj_name)
        assert attachment.filename == '{}_consensus_csv.zip'.format(filename)
예제 #5
0
    def test_export_tasks_csv_json(self, mail):
        """Test JOB export_tasks task csv works."""
        user = UserFactory.create(admin=True)
        project = ProjectFactory.create(name='test_project')
        task = TaskFactory.create(project=project)
        task_run = TaskRunFactory.create(project=project, task=task)

        export_tasks(user.email_addr, project.short_name, 'task', False, 'csv')
        args, kwargs = mail.send.call_args
        message = args[0]
        assert message.recipients[0] == user.email_addr, message.recipients
        assert message.subject == 'Data exported for your project: test_project', message.subject

        attachment = message.attachments[0]
        proj_name = unidecode(project.short_name)
        filename = '{}_{}'.format(project.id, proj_name)
        assert attachment.filename == '{}_task_csv.zip'.format(filename)

        export_tasks(user.email_addr, project.short_name, 'task', False,
                     'json')
        args, kwargs = mail.send.call_args
        message = args[0]
        assert message.recipients[0] == user.email_addr, message.recipients
        assert message.subject == 'Data exported for your project: test_project', message.subject

        attachment = message.attachments[0]
        assert attachment.filename == '{}_task_json.zip'.format(filename)

        export_tasks(user.email_addr, project.short_name, 'task_run', False,
                     'csv')
        args, kwargs = mail.send.call_args
        message = args[0]
        assert message.recipients[0] == user.email_addr, message.recipients
        assert message.subject == 'Data exported for your project: test_project', message.subject

        attachment = message.attachments[0]
        assert attachment.filename == '{}_task_run_csv.zip'.format(filename)

        export_tasks(user.email_addr, project.short_name, 'task_run', False,
                     'json')
        args, kwargs = mail.send.call_args
        message = args[0]
        assert message.recipients[0] == user.email_addr, message.recipients
        assert message.subject == 'Data exported for your project: test_project', message.subject

        attachment = message.attachments[0]
        assert attachment.filename == '{}_task_run_json.zip'.format(filename)

        filters = dict(task_id=1,
                       hide_completed=True,
                       pcomplete_from='2018-01-01T00:00:00.0001',
                       pcomplete_to='2018-12-12T00:00:00.0001',
                       priority_from=0.0,
                       priority_to=0.5,
                       created_from='2018-01-01T00:00:00.0001',
                       created_to='2018-12-12T00:00:00.0001')

        filters = {
            'display_info_columns': [],
            'pcomplete_from': 0.0,
            'pcomplete_to': 0.45
        }
        export_tasks(user.email_addr, project.short_name, 'task', False, 'csv',
                     filters)
        args, kwargs = mail.send.call_args
        message = args[0]
        assert message.recipients[0] == user.email_addr, message.recipients
        assert message.subject == 'Data exported for your project: test_project', message.subject

        export_tasks(user.email_addr, project.short_name, 'task', False,
                     'json', filters)
        args, kwargs = mail.send.call_args
        message = args[0]
        assert message.recipients[0] == user.email_addr, message.recipients
        assert message.subject == 'Data exported for your project: test_project', message.subject
예제 #6
0
    def test_export_tasks_csv_json(self, mail):
        """Test JOB export_tasks task csv works."""
        user = UserFactory.create(admin=True)
        project = ProjectFactory.create(name='test_project')
        task = TaskFactory.create(project=project)
        TaskRunFactory.create(project=project,
                              task=task,
                              info={
                                  'text':
                                  u'Test String',
                                  'object': {
                                      'a': 1
                                  },
                                  'list': [{
                                      'name': u'Julia',
                                      'lastName': u'Rivera'
                                  }, {
                                      'name': u'Lola',
                                      'lastName': u'Santos'
                                  }]
                              })

        export_tasks(user.email_addr, project.short_name, 'task', False, 'csv')
        args, kwargs = mail.send.call_args
        message = args[0]
        assert message.recipients[0] == user.email_addr, message.recipients
        assert message.subject == 'Data exported for your project: test_project', message.subject

        attachment = message.attachments[0]
        proj_name = unidecode(project.short_name)
        filename = '{}_{}'.format(project.id, proj_name)
        assert attachment.filename == '{}_task_csv.zip'.format(filename)

        export_tasks(user.email_addr, project.short_name, 'task', False,
                     'json')
        args, kwargs = mail.send.call_args
        message = args[0]
        assert message.recipients[0] == user.email_addr, message.recipients
        assert message.subject == 'Data exported for your project: test_project', message.subject

        attachment = message.attachments[0]
        assert attachment.filename == '{}_task_json.zip'.format(filename)

        export_tasks(user.email_addr, project.short_name, 'task_run', False,
                     'csv')
        args, kwargs = mail.send.call_args
        message = args[0]
        assert message.recipients[0] == user.email_addr, message.recipients
        assert message.subject == 'Data exported for your project: test_project', message.subject

        attachment = message.attachments[0]
        assert attachment.filename == '{}_task_run_csv.zip'.format(filename)

        # fp = StringIO(message.attachments[0].data)
        # zfp = zipfile.ZipFile(fp, "r")
        # file_objects = zfp.infolist()
        # contents = [zfp.read(file_object) for file_object in file_objects]
        # expected_headers = [
        #     'task_run__calibration', 'task_run__created',
        #     'task_run__external_uid', 'task_run__finish_time',
        #     'task_run__id', 'task_run__info', 'task_run__info__list',
        #     'task_run__info__list__0__lastName', 'task_run__info__list__0__name',
        #     'task_run__info__list__1__lastName', 'task_run__info__list__1__name',
        #     'task_run__info__object', 'task_run__info__object__a',
        #     'task_run__info__text', 'task_run__project_id', 'task_run__task__gold_answers',
        #     'task_run__task_id', 'task_run__timeout', 'task_run__user_id',
        #     'task_run__user_ip']
        # assert all(header in contents[0] for header in expected_headers)

        export_tasks(user.email_addr, project.short_name, 'task_run', False,
                     'json')
        args, kwargs = mail.send.call_args
        message = args[0]
        assert message.recipients[0] == user.email_addr, message.recipients
        assert message.subject == 'Data exported for your project: test_project', message.subject

        attachment = message.attachments[0]
        assert attachment.filename == '{}_task_run_json.zip'.format(filename)

        filters = dict(task_id=1,
                       hide_completed=True,
                       pcomplete_from='2018-01-01T00:00:00.0001',
                       pcomplete_to='2018-12-12T00:00:00.0001',
                       priority_from=0.0,
                       priority_to=0.5,
                       created_from='2018-01-01T00:00:00.0001',
                       created_to='2018-12-12T00:00:00.0001')

        filters = {
            'display_info_columns': [],
            'pcomplete_from': 0.0,
            'pcomplete_to': 0.45
        }
        export_tasks(user.email_addr, project.short_name, 'task', False, 'csv',
                     filters)
        args, kwargs = mail.send.call_args
        message = args[0]
        assert message.recipients[0] == user.email_addr, message.recipients
        assert message.subject == 'Data exported for your project: test_project', message.subject

        export_tasks(user.email_addr, project.short_name, 'task', False,
                     'json', filters)
        args, kwargs = mail.send.call_args
        message = args[0]
        assert message.recipients[0] == user.email_addr, message.recipients
        assert message.subject == 'Data exported for your project: test_project', message.subject