From 7be356b39009051e38a689d710c7ad4207195772 Mon Sep 17 00:00:00 2001 From: jsa <jsa@edx.org> Date: Tue, 25 Feb 2014 18:28:26 -0500 Subject: [PATCH] auto_auth: add ability to configure forum roles and scrape user id. --- .../student/tests/test_auto_auth.py | 41 +++++++++++++++++-- common/djangoapps/student/views.py | 4 +- .../test/acceptance/pages/studio/auto_auth.py | 11 ++++- 3 files changed, 50 insertions(+), 6 deletions(-) diff --git a/common/djangoapps/student/tests/test_auto_auth.py b/common/djangoapps/student/tests/test_auto_auth.py index 63c575fdf40..67834127431 100644 --- a/common/djangoapps/student/tests/test_auto_auth.py +++ b/common/djangoapps/student/tests/test_auto_auth.py @@ -1,10 +1,12 @@ from django.test import TestCase from django.test.client import Client from django.contrib.auth.models import User +from django_comment_common.models import ( + Role, FORUM_ROLE_ADMINISTRATOR, FORUM_ROLE_MODERATOR, FORUM_ROLE_STUDENT) +from django_comment_common.utils import seed_permissions_roles from student.models import CourseEnrollment, UserProfile from util.testing import UrlResetMixin from mock import patch -from django.core.urlresolvers import reverse, NoReverseMatch class AutoAuthEnabledTestCase(UrlResetMixin, TestCase): @@ -103,6 +105,39 @@ class AutoAuthEnabledTestCase(UrlResetMixin, TestCase): enrollment = CourseEnrollment.objects.get(course_id=course_id) self.assertEqual(enrollment.user.username, "test") + def test_set_roles(self): + + course_id = "edX/Test101/2014_Spring" + seed_permissions_roles(course_id) + course_roles = dict((r.name, r) for r in Role.objects.filter(course_id=course_id)) + self.assertEqual(len(course_roles), 4) # sanity check + + # Student role is assigned by default on course enrollment. + self._auto_auth(username='a_student', course_id=course_id) + user = User.objects.get(username='a_student') + user_roles = user.roles.all() + self.assertEqual(len(user_roles), 1) + self.assertEqual(user_roles[0], course_roles[FORUM_ROLE_STUDENT]) + + self._auto_auth(username='a_moderator', course_id=course_id, roles='Moderator') + user = User.objects.get(username='a_moderator') + user_roles = user.roles.all() + self.assertEqual( + set(user_roles), + set([course_roles[FORUM_ROLE_STUDENT], + course_roles[FORUM_ROLE_MODERATOR]])) + + # check multiple roles work. + self._auto_auth(username='an_admin', course_id=course_id, + roles='{},{}'.format(FORUM_ROLE_MODERATOR, FORUM_ROLE_ADMINISTRATOR)) + user = User.objects.get(username='an_admin') + user_roles = user.roles.all() + self.assertEqual( + set(user_roles), + set([course_roles[FORUM_ROLE_STUDENT], + course_roles[FORUM_ROLE_MODERATOR], + course_roles[FORUM_ROLE_ADMINISTRATOR]])) + def _auto_auth(self, **params): """ Make a request to the auto-auth end-point and check @@ -113,8 +148,8 @@ class AutoAuthEnabledTestCase(UrlResetMixin, TestCase): # Check that session and CSRF are set in the response for cookie in ['csrftoken', 'sessionid']: - self.assertIn(cookie, response.cookies) #pylint: disable=E1103 - self.assertTrue(response.cookies[cookie].value) #pylint: disable=E1103 + self.assertIn(cookie, response.cookies) # pylint: disable=E1103 + self.assertTrue(response.cookies[cookie].value) # pylint: disable=E1103 class AutoAuthDisabledTestCase(UrlResetMixin, TestCase): diff --git a/common/djangoapps/student/views.py b/common/djangoapps/student/views.py index 29d4ee06df2..7bf6922f652 100644 --- a/common/djangoapps/student/views.py +++ b/common/djangoapps/student/views.py @@ -1274,8 +1274,8 @@ def auto_auth(request): # Provide the user with a valid CSRF token # then return a 200 response - success_msg = u"Logged in user {0} ({1}) with password {2}".format( - username, email, password + success_msg = u"Logged in user {0} ({1}) with password {2} and user_id {3}".format( + username, email, password, user.id ) response = HttpResponse(success_msg) response.set_cookie('csrftoken', csrf(request)['csrf_token']) diff --git a/common/test/acceptance/pages/studio/auto_auth.py b/common/test/acceptance/pages/studio/auto_auth.py index 041cbb2e501..ed3b161a76d 100644 --- a/common/test/acceptance/pages/studio/auto_auth.py +++ b/common/test/acceptance/pages/studio/auto_auth.py @@ -2,6 +2,7 @@ Auto-auth page (used to automatically log in during testing). """ +import re import urllib from bok_choy.page_object import PageObject from . import BASE_URL @@ -14,7 +15,7 @@ class AutoAuthPage(PageObject): this url will create a user and log them in. """ - def __init__(self, browser, username=None, email=None, password=None, staff=None, course_id=None): + def __init__(self, browser, username=None, email=None, password=None, staff=None, course_id=None, roles=None): """ Auto-auth is an end-point for HTTP GET requests. By default, it will create accounts with random user credentials, @@ -47,6 +48,9 @@ class AutoAuthPage(PageObject): if course_id is not None: self._params['course_id'] = course_id + if roles is not None: + self._params['roles'] = roles + @property def url(self): """ @@ -62,3 +66,8 @@ class AutoAuthPage(PageObject): def is_browser_on_page(self): return True + + def get_user_id(self): + message = self.css_text('BODY')[0].strip() + match = re.search(r' user_id ([^$]+)$', message) + return match.groups()[0] if match else None -- GitLab