diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index e831c7b91b76aa947a0f8e9f9207188321556fa5..e3df1a004ff1f22e790d211b55289aa8ec528ddf 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -21,7 +21,7 @@ cache: before_script: - cd backend - pip install -r requirements_dev.txt - - pip install . + - pip install -e . test-backend: stage: lint_test_coverage_backend diff --git a/backend/metagenedb/apps/accounts/test_auth.py b/backend/metagenedb/apps/accounts/tests.py similarity index 58% rename from backend/metagenedb/apps/accounts/test_auth.py rename to backend/metagenedb/apps/accounts/tests.py index fc240e340c7e6a4ab6c286107410bfbf3d089add..39171ec8fb7e0f19465f5cefacd9295515440df0 100644 --- a/backend/metagenedb/apps/accounts/test_auth.py +++ b/backend/metagenedb/apps/accounts/tests.py @@ -4,6 +4,7 @@ from rest_framework import status from django.contrib.auth.models import User +from rest_framework_jwt.settings import api_settings class TestAccounts(APITestCase): @@ -26,3 +27,22 @@ class TestAccounts(APITestCase): resp = self.client.post(url, {'username': 'user', 'password': 'pass'}, format='json') self.assertEqual(resp.status_code, status.HTTP_200_OK) self.assertTrue('token' in resp.data) + + def test_verify_jwt(self): + + jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER + jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER + + user = User.objects.create_user(username='user', email='user@foo.com', password='pass') + user.is_active = True + user.save() + payload = jwt_payload_handler(user) + token = jwt_encode_handler(payload) + + verify_url = reverse('api-jwt-verify') + credentials = { + 'token': token + } + + resp = self.client.post(verify_url, credentials, format='json') + self.assertEqual(resp.status_code, status.HTTP_200_OK) diff --git a/backend/metagenedb/apps/catalog/models/test_views.py b/backend/metagenedb/apps/catalog/models/test_views.py new file mode 100644 index 0000000000000000000000000000000000000000..56394e9668e65fc24f9a52f5d6f6fa96c13bccb9 --- /dev/null +++ b/backend/metagenedb/apps/catalog/models/test_views.py @@ -0,0 +1,36 @@ +from django.contrib.auth.models import User +from django.test import TestCase +from django.urls import reverse + +from rest_framework import status +from rest_framework_jwt.settings import api_settings + + +class TestGenes(TestCase): + """Post Tests""" + + def test_get_genes_no_auth(self): + """ + Unauthenticated users should not be able to access genes via APIListView + """ + url = reverse('genes') + resp = self.client.get(url) + self.assertEqual(resp.status_code, status.HTTP_401_UNAUTHORIZED) + + def test_get_genes_auth(self): + """ + Authenticated users should be able to access genes via APIListView + """ + + jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER + jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER + + user = User.objects.create_user(username='user', email='user@foo.com', password='pass') + user.is_active = True + user.save() + payload = jwt_payload_handler(user) + token = jwt_encode_handler(payload) + + url = reverse('genes') + resp = self.client.get(url, format='json', HTTP_AUTHORIZATION=f"JWT {token}") + self.assertEqual(resp.status_code, status.HTTP_200_OK) diff --git a/backend/metagenedb/apps/catalog/urls.py b/backend/metagenedb/apps/catalog/urls.py index 5ffcf0a764332f924ac29e78c6f0d48f89061295..a25b56c28ce31a08fd0ffb65b3201066662f65d6 100644 --- a/backend/metagenedb/apps/catalog/urls.py +++ b/backend/metagenedb/apps/catalog/urls.py @@ -4,6 +4,6 @@ from . import views urlpatterns = [ path('', views.index, name='index'), - re_path(r'^api/genes/$', views.gene_list), + re_path(r'^api/genes$', views.gene_list, name='genes'), re_path(r'^api/genes/(?P<gene_id>.*)$', views.gene_detail), ]