Source code for pangea.contrib.taxasearch.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,
)
[docs]class TaxaSearchTests(APITestCase):
[docs] @classmethod
def setUpTestData(cls):
organization = Organization.objects.create(name='Test Organization')
sample_group = organization.create_sample_group(name='Test Library', is_library=True)
sample_library = sample_group.library
sample_01 = Sample.objects.create(name='Test Sample 01',
metadata={'foo': 'bar'},
library=sample_library)
sample_02 = Sample.objects.create(name='Test Sample 02', 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(self):
"""Check that a detailed query returns appropriatelylimited results."""
url = reverse('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(self):
"""Check that a detailed query returns appropriatelylimited results."""
url = reverse('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)