"""Test suite for Sample model."""
import os
from django.test import TestCase
from django.urls import reverse
from rest_framework import status
from rest_framework.test import APITestCase
from .models import (
Tag,
)
from pangea.core.models import (
PangeaUser,
Organization,
SampleGroup,
Sample,
)
[docs]class TagModelTests(TestCase):
"""Test suite for Sample model."""
[docs] def test_add_tag(self):
tag = Tag.objects.create(name='mytag YUDFS')
self.assertTrue(tag.uuid)
self.assertEqual(tag.name, 'mytag YUDFS')
self.assertTrue(tag.created_at)
[docs] def test_add_tag_with_payload(self):
tag = Tag.objects.create(name='mytag YJTUYDS', payload='FOO')
self.assertTrue(tag.uuid)
self.assertEqual(tag.name, 'mytag YJTUYDS')
self.assertEqual(tag.payload, 'FOO')
self.assertTrue(tag.created_at)
[docs] def test_relate_tag_pair(self):
tag1 = Tag.objects.create(name='tag1 TFDKSG')
tag2 = Tag.objects.create(name='tag2 TFDKSG')
tag2.add_related_tag(tag1)
self.assertEqual(tag2.related_tags.get().other_tag, tag1)
[docs] def test_relate_tag_triple(self):
tag1 = Tag.objects.create(name='tag1 HJFJUS')
tag2 = Tag.objects.create(name='tag2 HJFJUS')
tag3 = Tag.objects.create(name='tag3 HJFJUS')
tag2.add_related_tag(tag1)
tag3.add_related_tag(tag2)
tag1.add_related_tag(tag3)
self.assertEqual(tag2.related_tags.get().other_tag, tag1)
self.assertEqual(tag3.related_tags.get().other_tag, tag2)
self.assertEqual(tag1.related_tags.get().other_tag, tag3)
[docs] def test_tag_sample_group(self):
"""Ensure we can tag a sample group."""
org = Organization.objects.create(name='org ADUJABF')
grp = org.create_sample_group(name='GRP ADUJABF')
tag = Tag.objects.create(name='tag ADUJABF')
tag.tag_sample_group(grp)
self.assertEqual(grp.tags.get().tag, tag)
self.assertEqual(tag.tagged_sample_groups.get().sample_group, grp)
[docs] def test_tag_sample(self):
"""Ensure we can tag a sample group."""
org = Organization.objects.create(name='org AUHFVJKELF')
lib = org.create_sample_group(name='LBRY_01 AUHFVJKELF', is_library=True)
sample = lib.create_sample(name='SMPL_01 AUHFVJKELF')
tag = Tag.objects.create(name='tag AUHFVJKELF')
tag.tag_sample(sample)
self.assertEqual(sample.tags.get().tag, tag)
self.assertEqual(tag.tagged_samples.get().sample, sample)
[docs] def test_tag_sample_and_group(self):
"""Ensure we can tag a sample group."""
org = Organization.objects.create(name='org AUHFVJKELF')
lib = org.create_sample_group(name='LBRY_01 AUHFVJKELF', is_library=True)
sample = lib.create_sample(name='SMPL_01 AUHFVJKELF')
tag = Tag.objects.create(name='tag AUHFVJKELF')
tag.tag_sample(sample)
tag.tag_sample_group(lib)
self.assertEqual(sample.tags.get().tag, tag)
self.assertEqual(tag.tagged_samples.get().sample, sample)
self.assertEqual(lib.tags.get().tag, tag)
self.assertEqual(tag.tagged_sample_groups.get().sample_group, lib)
[docs]class TagApiTests(APITestCase):
[docs] @classmethod
def setUpTestData(cls):
cls.org1 = Organization.objects.create(name='Test Organization')
cls.org2 = Organization.objects.create(name='Test Organization (No Membership)')
cls.creds = ('user@domain.com', 'Foobar22')
cls.user = PangeaUser.objects.create(email=cls.creds[0], password=cls.creds[1])
cls.org1.users.add(cls.user)
cls.priv_grp_auth = cls.org1.create_sample_group(name='GRP_01', is_public=False)
cls.pub_grp = cls.org2.create_sample_group(name='GRP_02', is_public=True)
cls.priv_grp_unauth = cls.org2.create_sample_group(name='GRP_03', is_public=False)
[docs] def test_create_tag(self):
"""Ensure authorized user can create sample group."""
self.client.force_authenticate(user=self.user)
url = reverse('tag-create')
data = {'name': 'Test Tag'}
response = self.client.post(url, data, format='json')
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
self.assertEqual(Tag.objects.count(), 1)
self.assertEqual(Tag.objects.get().name, 'Test Tag')
[docs] def test_tag_read(self):
"""Ensure no login is required to read a tag."""
tag = Tag.objects.create(name='My Test Tag')
url = reverse('tag-details', kwargs={'pk': tag.uuid})
response = self.client.get(url, format='json')
self.assertEqual(response.status_code, status.HTTP_200_OK)
[docs] def test_tag_tag(self):
tag1 = Tag.objects.create(name='My Test Tag 1')
tag2 = Tag.objects.create(name='My Test Tag 2')
url = reverse('tag-tags', kwargs={'tag_pk': tag1.uuid})
data = {'tag_uuid': tag2.uuid}
self.client.force_authenticate(user=self.user)
response = self.client.post(url, data, format='json')
self.assertEqual(response.status_code, status.HTTP_200_OK)
tag1 = Tag.objects.get(pk=tag1.uuid)
self.assertEqual(tag1.related_tags.get().other_tag, tag2)
[docs] def test_tag_public_sample_group(self):
tag = Tag.objects.create(name='My Test Tag AHGDGS')
url = reverse('tag-sample-groups', kwargs={'tag_pk': tag.uuid})
data = {'sample_group_uuid': self.pub_grp.uuid}
self.client.force_authenticate(user=self.user)
response = self.client.post(url, data, format='json')
self.assertEqual(response.status_code, status.HTTP_200_OK)
tag = Tag.objects.get(pk=tag.uuid)
self.assertEqual(tag.tagged_sample_groups.get().sample_group, self.pub_grp)
[docs] def test_auth_tag_private_sample_group(self):
tag = Tag.objects.create(name='My Test Tag YDSGJ')
url = reverse('tag-sample-groups', kwargs={'tag_pk': tag.uuid})
data = {'sample_group_uuid': self.priv_grp_auth.uuid}
self.client.force_authenticate(user=self.user)
response = self.client.post(url, data, format='json')
self.assertEqual(response.status_code, status.HTTP_200_OK)
tag1 = Tag.objects.get(pk=tag.uuid)
self.assertEqual(tag.tagged_sample_groups.get().sample_group, self.priv_grp_auth)
[docs] def test_unauth_tag_private_sample_group(self):
tag = Tag.objects.create(name='My Test Tag ADIRH')
url = reverse('tag-sample-groups', kwargs={'tag_pk': tag.uuid})
data = {'sample_group_uuid': self.priv_grp_unauth.uuid}
self.client.force_authenticate(user=self.user)
response = self.client.post(url, data, format='json')
self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
[docs] def test_read_tagged_sample_groups(self):
tag = Tag.objects.create(name='My Test Tag YDSGJ')
tag.tag_sample_group(self.pub_grp)
tag.tag_sample_group(self.priv_grp_unauth)
tag.tag_sample_group(self.priv_grp_auth)
url = reverse('tag-sample-groups', kwargs={'tag_pk': tag.uuid})
self.client.force_authenticate(user=self.user)
response = self.client.get(url, format='json')
self.assertEqual(response.status_code, status.HTTP_200_OK)
response_uuids = [el['uuid'] for el in response.data['results']]
self.assertEqual(len(response_uuids), 2)
self.assertIn(str(self.pub_grp.uuid), response_uuids)
self.assertIn(str(self.priv_grp_auth.uuid), response_uuids)
self.assertNotIn(str(self.priv_grp_unauth.uuid), response_uuids)
[docs] def test_tag_public_sample(self):
pass
[docs] def test_auth_tag_private_sample(self):
pass
[docs] def test_unauth_tag_private_sample(self):
pass
[docs] def test_read_tagged_samples(self):
pass