from django.contrib.auth import get_user_model from django.conf import settings from django.test import TestCase, override_settings from django.urls import reverse class TestOAuthAccess(TestCase): def test_oauth_page_requires_login(self): """ This checks that /account/oauth requires the user to be logged in """ oauth_page = reverse('users:oauth') response = self.client.get(oauth_page, follow=True) self.assertRedirects(response, reverse( 'users:login') + '?next=' + reverse('users:oauth') , status_code=301, target_status_code=200) @override_settings() def test_oauth_not_set_up(self): del settings.SOCIAL_AUTH_GOOGLE_OAUTH2_WHITELISTED_DOMAINS self.login() response = self.client.get(reverse('users:oauth'), follow=True) self.assertEqual(response.status_code, 403) def test_oauth_user_email_not_whitelisted(self): self.login() response = self.client.get(reverse('users:oauth'), follow=True) self.assertEqual(response.status_code, 403) @override_settings(SOCIAL_AUTH_GOOGLE_OAUTH2_WHITELISTED_DOMAINS=['email.com']) def test_oauth_whitelisted_user_can_see_link_to_oauth_settings_page(self): self.login() response = self.client.get(reverse('users:account'), follow=True) self.assertContains(response, 'Manage OAuth') @override_settings(SOCIAL_AUTH_GOOGLE_OAUTH2_WHITELISTED_DOMAINS=['email.com']) def test_oauth_whitelisted_user_can_access_oauth_settings_page(self): """ Checks that the test user can access the OAuth page as their email is whitelisted """ self.login() response = self.client.get(reverse('users:oauth'), follow=True) self.assertEqual(response.status_code, 200) self.assertContains(response, 'Google OAuth') self.assertNotContains(response, 'Disconnect Google OAuth') self.assertTemplateUsed(response, 'users/oauth.html') def login(self): user = get_user_model().objects.create_user(username='test', email='test@email.com', password='password') self.assertTrue( self.client.login(username='test', password='password') ) return user