From 96c7cb5ffdf82aced8fc8eff33e2469fb946fa81 Mon Sep 17 00:00:00 2001 From: Carson Gee Date: Mon, 25 Nov 2013 12:58:08 -0500 Subject: [PATCH] Added tests for signup skipping --- AUTHORS | 1 + .../external_auth/tests/test_ssl.py | 138 ++++++++++++++++++ 2 files changed, 139 insertions(+) create mode 100644 common/djangoapps/external_auth/tests/test_ssl.py diff --git a/AUTHORS b/AUTHORS index 60ac912d49..700bc6e638 100644 --- a/AUTHORS +++ b/AUTHORS @@ -98,3 +98,4 @@ Olivier Marquez Florian Dufour Manuel Freire Daniel Cebrián Robles +Carson Gee diff --git a/common/djangoapps/external_auth/tests/test_ssl.py b/common/djangoapps/external_auth/tests/test_ssl.py new file mode 100644 index 0000000000..f933784d4c --- /dev/null +++ b/common/djangoapps/external_auth/tests/test_ssl.py @@ -0,0 +1,138 @@ +""" +Provides unit tests for SSL based authentication portions +of the external_auth app. +""" + +import unittest + +from django.conf import settings +from django.contrib.auth.models import AnonymousUser, User +from django.contrib.sessions.middleware import SessionMiddleware +from django.core.urlresolvers import reverse +from django.test import TestCase +from django.test.client import Client +from django.test.client import RequestFactory +from django.test.utils import override_settings + +from external_auth.models import ExternalAuthMap +import external_auth.views + +MITX_FEATURES_WITH_SSL_AUTH = settings.MITX_FEATURES.copy() +MITX_FEATURES_WITH_SSL_AUTH['AUTH_USE_MIT_CERTIFICATES'] = True +MITX_FEATURES_WITH_SSL_AUTH_IMMEDIATE_SIGNUP = MITX_FEATURES_WITH_SSL_AUTH.copy() +MITX_FEATURES_WITH_SSL_AUTH_IMMEDIATE_SIGNUP['AUTH_USE_MIT_CERTIFICATES_IMMEDIATE_SIGNUP'] = True + + +@override_settings(MITX_FEATURES=MITX_FEATURES_WITH_SSL_AUTH) +class SSLClientTest(TestCase): + """ + Tests SSL Authentication code sections of external_auth + """ + + AUTH_DN = '/C=US/ST=Massachusetts/O=Massachusetts Institute of Technology/OU=Client CA v1/CN={0}/emailAddress={1}' + USER_NAME = 'test_user_ssl' + USER_EMAIL = 'test_user_ssl@EDX.ORG' + + def _create_ssl_request(self, url): + """Creates a basic request for SSL use.""" + request = self.factory.get(url) + request.META['SSL_CLIENT_S_DN'] = self.AUTH_DN.format(self.USER_NAME, self.USER_EMAIL) + request.user = AnonymousUser() + middleware = SessionMiddleware() + middleware.process_request(request) + request.session.save() + return request + + def setUp(self): + """Setup test case by adding primary user.""" + super(TestCase, self).setUp() + self.client = Client() + self.factory = RequestFactory() + + @unittest.skipUnless(settings.ROOT_URLCONF == 'lms.urls', 'Test only valid in lms') + def test_ssl_login_with_signup_lms(self): + """ + Validate that an SSL login creates an eamap user and + redirects them to the signup page. + """ + + response = external_auth.views.ssl_login(self._create_ssl_request('/')) + + # Response should contain template for signup form, eamap should have user, and internal + # auth should not have a user + self.assertIn('