Source code for pangea.contrib.metasub.tests

from django.urls import reverse

from rest_framework import status
from rest_framework.test import APITestCase

from pangea.core.models import (
    Organization,
    Sample,
    SampleAnalysisResult,
    SampleAnalysisResultField,
)

from .constants import (
    METASUB_GRP_NAME,
    METASUB_ORG_NAME,
    METASUB_LIBRARY_UUID,
)


[docs]class MetaSUBTests(APITestCase):
[docs] @classmethod def setUpTestData(cls): organization = Organization.objects.create(name=METASUB_ORG_NAME) sample_group = organization.create_sample_group(name=METASUB_GRP_NAME, is_library=True) sample_library = sample_group.library sample_01 = Sample.objects.create(name='Test Sample 01', metadata={ 'city': 'new_york_city', 'city_latitude': -30.1, 'city_longitude': 50.2, }, library=sample_library) sample_02 = Sample.objects.create(name='Test Sample 02', metadata={ 'city': 'hong_kong', 'city_latitude': 20.0, 'city_longitude': -10.9, }, library=sample_library) analysis_result_01 = SampleAnalysisResult.objects.create(module_name='taxa', sample=sample_01) analysis_result_02 = SampleAnalysisResult.objects.create(module_name='taxa', sample=sample_02) stored_data_01 = {"e. coli": 0.32, "enterococcus": 0.79} stored_data_02 = {"e. coli": 0.56} taxa_field_01 = SampleAnalysisResultField.objects.create(name='relative_abundance', analysis_result=analysis_result_01, stored_data=stored_data_01) taxa_field_02 = SampleAnalysisResultField.objects.create(name='relative_abundance', analysis_result=analysis_result_02, stored_data=stored_data_02)
[docs] def test_detailed_match_samples(self): """Check that a detailed query returns appropriatelylimited results.""" url = reverse('metasub-sample-taxa-search') data = {'query': 'enterococcus'} response = self.client.get(url, data, format='json') self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(len(response.data['results']), 1) self.assertEqual(len(response.data['results']['enterococcus']), 1) matching_sample = response.data['results']['enterococcus'][0] self.assertEqual(matching_sample['sample_name'], 'Test Sample 01') with self.assertRaises(KeyError): matching_sample['metadata']
[docs] def test_fuzzy_match_samples(self): """Check that a detailed query returns appropriatelylimited results.""" url = reverse('metasub-sample-taxa-search') data = {'query': 'e'} response = self.client.get(url, data, format='json') self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(len(response.data['results']), 2) self.assertEqual(len(response.data['results']['enterococcus']), 1) entero_sample = response.data['results']['enterococcus'][0] self.assertEqual(entero_sample['sample_name'], 'Test Sample 01') ecoli_samples = response.data['results']['e. coli'] self.assertEqual(len(ecoli_samples), 2) ecoli_names = [sample['sample_name'] for sample in ecoli_samples] self.assertIn('Test Sample 01', ecoli_names) self.assertIn('Test Sample 02', ecoli_names)
[docs] def test_detailed_match_cities(self): """Check that a detailed query returns appropriatelylimited results.""" url = reverse('metasub-city-taxa-search') data = {'query': 'enterococcus'} response = self.client.get(url, data, format='json') self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(len(response.data['results']), 1) self.assertEqual(len(response.data['results']['enterococcus']), 1) matching_city = list(response.data['results']['enterococcus'].values())[0] self.assertEqual(matching_city['city_name'], 'new_york_city')