예제 #1
0
    def test_generate_project_summary(self):
        summary_service = SummaryService(patch('__main__.IngestApi'))
        mock_project_id = 'mock-project-id'
        mock_project_resource = dict()
        mock_project_resource['_links'] = dict()
        mock_project_resource['_links']['envelopes'] = {
            'href':
            'http://mock-ingest-api/projects/{0}/envelopes'.format(
                mock_project_id)
        }

        with patch(
                'broker.service.summary_service.SummaryService.get_submissions_in_project'
        ) as mock_get_project_submissions:

            def get_submissions_in_project_mock(*args, **kwargs):
                if args[0] == mock_project_resource:
                    yield from self.generate_mock_submissions_in_project(10)
                else:
                    yield

            mock_get_project_submissions.side_effect = get_submissions_in_project_mock

            with patch(
                    'broker.service.summary_service.SummaryService.get_entities_in_submission'
            ) as mock_get_entities_in_submission:

                def get_entities_in_submission_mock(*args, **kwargs):
                    entity_type = args[1]

                    type_to_mock_specific_type_map = {
                        'processes': 'specific-process',
                        'biomaterials': 'specific-biomaterial',
                        'protocols': 'specific-protocol',
                        'files': 'specific-file',
                        'projects': 'specific-project'
                    }

                    yield from self.generate_mock_entities(
                        10, type_to_mock_specific_type_map[entity_type])

                mock_get_entities_in_submission.side_effect = get_entities_in_submission_mock

                project_summary = summary_service.summary_for_project(
                    mock_project_resource)

                assert project_summary.file_summary.count == 100  # 10 envelopes within, each with 10 files
                assert project_summary.process_summary.count == 100  # ...
                assert project_summary.protocol_summary.count == 100  # ...
                assert project_summary.biomaterial_summary.count == 100  # ...
예제 #2
0
    def test_generates_summary_when_cache_expire(self):
        mock_ingest_api = patch('__main__.IngestApi')
        mock_project_resource = dict()

        cache_expiry = 3  # seconds
        cache_size = 10

        summary_cache = SubmissionSummaryCache(cache_size, cache_expiry)

        with patch(
                'broker.service.summary_service.SummaryService.get_submissions_in_project'
        ) as mock_get_project_submissions:

            def get_submissions_in_project_mock(*args, **kwargs):
                yield from self.generate_mock_submissions_in_project(10)

            mock_get_project_submissions.side_effect = get_submissions_in_project_mock

            with patch(
                    'broker.service.summary_service.SummaryService.get_entities_in_submission'
            ) as mock_get_entities:
                summary_service = SummaryService(mock_ingest_api,
                                                 summary_cache)

                summary_service.summary_for_project(mock_project_resource)
                assert mock_get_entities.call_count == 50  # 5 for each 10 submissions

                summary_service.summary_for_project(mock_project_resource)
                assert mock_get_entities.call_count == 50  # assert still 50 because cache used

                sleep(5)

                summary_service.summary_for_project(mock_project_resource)
                assert mock_get_entities.call_count == 100  # assert 50 more calls after cache expiry
예제 #3
0
    def test_generate_summary_for_entity(self):
        mock_ingest_api = patch('__main__.IngestApi')
        mock_envelope_uri = 'http://mock-ingest-api/envelopes/mock-envelope-id'
        mock_specific_type = 'reanimated_donor'

        summary_service = SummaryService(mock_ingest_api)
        with patch(
                'broker.service.summary_service.SummaryService.get_entities_in_submission'
        ) as mock_get_entities_in_submission:
            mock_biomaterial_entities = self.generate_mock_entities(
                10, mock_specific_type)
            mock_get_entities_in_submission.return_value = mock_biomaterial_entities

            entity_summary = summary_service.generate_summary_for_entity(
                mock_biomaterial_entities)
            assert mock_specific_type in entity_summary.breakdown
            assert entity_summary.count == 10
예제 #4
0
def project_summary(project_uuid):
    project = IngestApi().getProjectByUuid(project_uuid)
    summary = SummaryService().summary_for_project(project)

    return app.response_class(response=jsonpickle.encode(summary,
                                                         unpicklable=False),
                              status=200,
                              mimetype='application/json')
예제 #5
0
def submission_summary(submission_uuid):
    submission = IngestApi().getSubmissionByUuid(submission_uuid)
    summary = SummaryService().summary_for_submission(submission)

    return app.response_class(response=jsonpickle.encode(summary,
                                                         unpicklable=False),
                              status=200,
                              mimetype='application/json')
예제 #6
0
def generate_submission_summary(uuid, ingest_url):
    ingest_api = IngestApi(ingest_url)
    submission = ingest_api.getSubmissionByUuid(uuid)
    summary = SummaryService(ingest_api).summary_for_submission(submission)

    return summary
예제 #7
0
def generate_project_summary(uuid, ingest_url):
    ingest_api = IngestApi(ingest_url)
    project = ingest_api.getProjectByUuid(uuid)
    summary = SummaryService(ingest_api).summary_for_project(project)

    return summary
예제 #8
0
    def test_generate_submission_summary(self):
        mock_ingest_api = patch('__main__.IngestApi')
        mock_envelope_uri = 'http://mock-ingest-api/envelopes/mock-envelope-id'
        mock_envelope_submission_date = '2018-03-22T10:01:48.290Z'
        mock_envelope_update_date = '2018-03-22T10:02:45.224Z'
        mock_envelope_status = "PROCESSING"

        mock_envelope_resource = dict()
        mock_envelope_resource['_links'] = {
            'self': {
                'href': mock_envelope_uri
            }
        }
        mock_envelope_resource[
            'submissionDate'] = mock_envelope_submission_date
        mock_envelope_resource['updateDate'] = mock_envelope_update_date
        mock_envelope_resource['submissionState'] = mock_envelope_status
        mock_envelope_resource['uuid'] = {'uuid': 'mock-envelope-uuid'}

        summary_service = SummaryService(mock_ingest_api)
        with patch(
                'broker.service.summary_service.SummaryService.get_entities_in_submission'
        ) as mock_get_entities_in_submission:

            def get_entities_in_submission_mock(*args, **kwargs):
                envelope_uri = args[0]
                entity_type = args[1]

                type_to_mock_specific_type_map = {
                    'processes': 'specific-process',
                    'biomaterials': 'specific-biomaterial',
                    'protocols': 'specific-protocol',
                    'files': 'specific-file',
                    'projects': 'specific-project'
                }

                if envelope_uri == mock_envelope_uri:
                    yield from self.generate_mock_entities(
                        10, type_to_mock_specific_type_map[entity_type])
                else:
                    yield

            mock_get_entities_in_submission.side_effect = get_entities_in_submission_mock
            submission_summary = summary_service.summary_for_submission(
                mock_envelope_resource)

            assert submission_summary.process_summary.count == 10
            assert 'specific-process' in submission_summary.process_summary.breakdown

            assert submission_summary.file_summary.count == 10
            assert 'specific-file' in submission_summary.file_summary.breakdown

            assert submission_summary.biomaterial_summary.count == 10
            assert 'specific-biomaterial' in submission_summary.biomaterial_summary.breakdown

            assert submission_summary.project_summary.count == 10
            assert 'specific-project' in submission_summary.project_summary.breakdown

            assert submission_summary.protocol_summary.count == 10
            assert 'specific-protocol' in submission_summary.protocol_summary.breakdown

            assert submission_summary.submission_status == mock_envelope_status
            assert submission_summary.create_date == mock_envelope_submission_date
            assert submission_summary.last_updated_date == mock_envelope_update_date