You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by ma...@apache.org on 2022/07/08 19:19:46 UTC
[airavata-django-portal] 05/05: AIRAVATA-3568 Unit tests for user profile completeness check
This is an automated email from the ASF dual-hosted git repository.
machristie pushed a commit to branch AIRAVATA-3562
in repository https://gitbox.apache.org/repos/asf/airavata-django-portal.git
commit 8a516305c54616c78e841f8b9e787a7bec4cb193
Author: Marcus Christie <ma...@apache.org>
AuthorDate: Fri Jul 8 15:18:54 2022 -0400
AIRAVATA-3568 Unit tests for user profile completeness check
---
django_airavata/apps/auth/tests/test_middleware.py | 123 +++++++++++++++++++++
1 file changed, 123 insertions(+)
diff --git a/django_airavata/apps/auth/tests/test_middleware.py b/django_airavata/apps/auth/tests/test_middleware.py
new file mode 100644
index 00000000..81091afb
--- /dev/null
+++ b/django_airavata/apps/auth/tests/test_middleware.py
@@ -0,0 +1,123 @@
+
+from unittest.mock import MagicMock, sentinel
+
+from django.contrib.auth import get_user_model
+from django.contrib.auth.models import AnonymousUser
+from django.http import HttpResponseRedirect
+from django.test import RequestFactory, TestCase
+from django.urls import reverse
+
+from django_airavata.apps.auth import models
+from django_airavata.apps.auth.middleware import (
+ user_profile_completeness_check
+)
+
+
+class UserProfileCompletenessCheckTestCase(TestCase):
+
+ def setUp(self):
+ User = get_user_model()
+ self.user: User = User.objects.create_user("testuser")
+ self.user_profile: models.UserProfile = models.UserProfile.objects.create(user=self.user)
+ self.factory = RequestFactory()
+
+ def _middleware_passes_through(self, request):
+ get_response = MagicMock(return_value=sentinel.response)
+ response = user_profile_completeness_check(get_response)(request)
+ get_response.assert_called()
+ self.assertIs(response, sentinel.response)
+
+ def _middleware_redirects_to_user_profile(self, request):
+ get_response = MagicMock(return_value=sentinel.response)
+ response = user_profile_completeness_check(get_response)(request)
+ get_response.assert_not_called()
+ self.assertIsInstance(response, HttpResponseRedirect)
+ self.assertEqual(response.url, reverse('django_airavata_auth:user_profile'))
+
+ def test_not_authenticated(self):
+ """Test that completeness check is skipped when not authenticated."""
+ request = self.factory.get(reverse('django_airavata_workspace:dashboard'))
+ request.user = AnonymousUser()
+ self.assertFalse(request.user.is_authenticated)
+ self._middleware_passes_through(request)
+
+ def test_user_profile_is_incomplete(self):
+ """Test user profile incomplete, should redirect to user_profile view."""
+ request = self.factory.get(reverse('django_airavata_workspace:dashboard'), HTTP_ACCEPT=['text/html'])
+ request.user = self.user
+ self.assertTrue(request.user.is_authenticated)
+ self.assertFalse(self.user_profile.is_complete)
+ self._middleware_redirects_to_user_profile(request)
+
+ def test_user_profile_is_incomplete_but_allowed(self):
+ """Test user profile incomplete, but should be able to access user_profile."""
+ request = self.factory.get(reverse('django_airavata_auth:user_profile'), HTTP_ACCEPT=['text/html'])
+ request.user = self.user
+ self.assertTrue(request.user.is_authenticated)
+ self.assertFalse(self.user_profile.is_complete)
+ self._middleware_passes_through(request)
+
+ def test_user_profile_is_complete(self):
+ """Test user profile is complete, should pass through."""
+ request = self.factory.get(reverse('django_airavata_workspace:dashboard'), HTTP_ACCEPT=['text/html'])
+ request.user = self.user
+ self.user.first_name = "Test"
+ self.user.last_name = "User"
+ self.user.email = "testuser@gateway.edu"
+ self.assertTrue(request.user.is_authenticated)
+ self.assertTrue(self.user_profile.is_complete)
+ self.assertTrue(self.user_profile.is_ext_user_profile_valid)
+ self._middleware_passes_through(request)
+
+ def test_user_profile_is_complete_but_ext_up_is_invalid(self):
+ """Test user profile is complete, but ext user prof is invalid."""
+ request = self.factory.get(reverse('django_airavata_workspace:dashboard'), HTTP_ACCEPT=['text/html'])
+ request.user = self.user
+ self.user.first_name = "Test"
+ self.user.last_name = "User"
+ self.user.email = "testuser@gateway.edu"
+ models.ExtendedUserProfileTextField.objects.create(name="test1", order=1, required=True)
+ self.assertTrue(request.user.is_authenticated)
+ self.assertTrue(self.user_profile.is_complete)
+ self.assertFalse(self.user_profile.is_ext_user_profile_valid)
+ self._middleware_redirects_to_user_profile(request)
+
+ def test_user_profile_is_complete_and_ext_up_is_valid(self):
+ """Test user profile is complete and ext user prof is valid."""
+ request = self.factory.get(reverse('django_airavata_workspace:dashboard'), HTTP_ACCEPT=['text/html'])
+ request.user = self.user
+ self.user.first_name = "Test"
+ self.user.last_name = "User"
+ self.user.email = "testuser@gateway.edu"
+ field1 = models.ExtendedUserProfileTextField.objects.create(name="test1", order=1, required=True)
+ models.ExtendedUserProfileTextValue.objects.create(
+ ext_user_profile_field=field1, user_profile=self.user_profile,
+ text_value="Answer #1"
+ )
+ self.assertTrue(self.user_profile.is_ext_user_profile_valid)
+ self.assertTrue(request.user.is_authenticated)
+ self.assertTrue(self.user_profile.is_complete)
+ self.assertEqual(1, len(self.user_profile.extended_profile_values.all()))
+ self._middleware_passes_through(request)
+
+ def test_user_profile_is_complete_ext_up_is_invalid_but_user_is_admin(self):
+ """Test user profile is complete, ext user prof is invalid, but user is gateway admin."""
+ request = self.factory.get(reverse('django_airavata_workspace:dashboard'), HTTP_ACCEPT=['text/html'])
+ request.user = self.user
+ request.is_gateway_admin = True
+ self.user.first_name = "Admin"
+ self.user.last_name = "User"
+ self.user.email = "admin@gateway.edu"
+ models.ExtendedUserProfileTextField.objects.create(name="test1", order=1, required=True)
+ self.assertFalse(self.user_profile.is_ext_user_profile_valid)
+ self.assertTrue(request.user.is_authenticated)
+ self.assertTrue(self.user_profile.is_complete)
+ self._middleware_passes_through(request)
+
+ def test_user_profile_is_incomplete_but_logout_allowed(self):
+ """Test user profile incomplete, but should be able to access logout."""
+ request = self.factory.get(reverse('django_airavata_auth:logout'), HTTP_ACCEPT=['text/html'])
+ request.user = self.user
+ self.assertTrue(request.user.is_authenticated)
+ self.assertFalse(self.user_profile.is_complete)
+ self._middleware_passes_through(request)