Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
edx-platform
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
edx
edx-platform
Commits
9e0dcb72
Commit
9e0dcb72
authored
May 29, 2015
by
Daniel Friedman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add JSON response to auto_auth with anonymous_id
parent
69e27415
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
64 additions
and
23 deletions
+64
-23
common/djangoapps/student/tests/test_auto_auth.py
+48
-18
common/djangoapps/student/views.py
+16
-5
No files found.
common/djangoapps/student/tests/test_auto_auth.py
View file @
9e0dcb72
...
...
@@ -4,12 +4,13 @@ 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
student.models
import
anonymous_id_for_user
,
CourseEnrollment
,
UserProfile
from
util.testing
import
UrlResetMixin
from
opaque_keys.edx.locations
import
SlashSeparatedCourseKey
from
opaque_keys.edx.locator
import
CourseLocator
from
mock
import
patch
import
ddt
import
json
@ddt.ddt
...
...
@@ -48,8 +49,8 @@ class AutoAuthEnabledTestCase(UrlResetMixin, TestCase):
self
.
assertFalse
(
user
.
profile
.
requires_parental_consent
())
def
test_create_same_user
(
self
):
self
.
_auto_auth
(
username
=
'test'
)
self
.
_auto_auth
(
username
=
'test'
)
self
.
_auto_auth
(
{
'username'
:
'test'
}
)
self
.
_auto_auth
(
{
'username'
:
'test'
}
)
self
.
assertEqual
(
User
.
objects
.
count
(),
1
)
def
test_create_multiple_users
(
self
):
...
...
@@ -65,10 +66,10 @@ class AutoAuthEnabledTestCase(UrlResetMixin, TestCase):
Test that the user gets created with the correct attributes
when they are passed as parameters on the auto-auth page.
"""
self
.
_auto_auth
(
username
=
'robot'
,
password
=
'test'
,
email
=
'robot@edx.org'
,
full_name
=
"Robot Name"
)
self
.
_auto_auth
(
{
'username'
:
'robot'
,
'password'
:
'test'
,
'email'
:
'robot@edx.org'
,
'full_name'
:
"Robot Name"
}
)
# Check that the user has the correct info
user
=
User
.
objects
.
get
(
username
=
'robot'
)
...
...
@@ -86,12 +87,12 @@ class AutoAuthEnabledTestCase(UrlResetMixin, TestCase):
def
test_create_staff_user
(
self
):
# Create a staff user
self
.
_auto_auth
(
username
=
'test'
,
staff
=
'true'
)
self
.
_auto_auth
(
{
'username'
:
'test'
,
'staff'
:
'true'
}
)
user
=
User
.
objects
.
get
(
username
=
'test'
)
self
.
assertTrue
(
user
.
is_staff
)
# Revoke staff privileges
self
.
_auto_auth
(
username
=
'test'
,
staff
=
'false'
)
self
.
_auto_auth
(
{
'username'
:
'test'
,
'staff'
:
'false'
}
)
user
=
User
.
objects
.
get
(
username
=
'test'
)
self
.
assertFalse
(
user
.
is_staff
)
...
...
@@ -100,7 +101,7 @@ class AutoAuthEnabledTestCase(UrlResetMixin, TestCase):
def
test_course_enrollment
(
self
,
course_id
,
course_key
):
# Create a user and enroll in a course
self
.
_auto_auth
(
username
=
'test'
,
course_id
=
course_id
)
self
.
_auto_auth
(
{
'username'
:
'test'
,
'course_id'
:
course_id
}
)
# Check that a course enrollment was created for the user
self
.
assertEqual
(
CourseEnrollment
.
objects
.
count
(),
1
)
...
...
@@ -112,10 +113,10 @@ class AutoAuthEnabledTestCase(UrlResetMixin, TestCase):
def
test_double_enrollment
(
self
,
course_id
,
course_key
):
# Create a user and enroll in a course
self
.
_auto_auth
(
username
=
'test'
,
course_id
=
course_id
)
self
.
_auto_auth
(
{
'username'
:
'test'
,
'course_id'
:
course_id
}
)
# Make the same call again, re-enrolling the student in the same course
self
.
_auto_auth
(
username
=
'test'
,
course_id
=
course_id
)
self
.
_auto_auth
(
{
'username'
:
'test'
,
'course_id'
:
course_id
}
)
# Check that only one course enrollment was created for the user
self
.
assertEqual
(
CourseEnrollment
.
objects
.
count
(),
1
)
...
...
@@ -130,13 +131,13 @@ class AutoAuthEnabledTestCase(UrlResetMixin, TestCase):
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
)
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'
)
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
(
...
...
@@ -145,8 +146,10 @@ class AutoAuthEnabledTestCase(UrlResetMixin, TestCase):
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
))
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
(
...
...
@@ -155,12 +158,37 @@ class AutoAuthEnabledTestCase(UrlResetMixin, TestCase):
course_roles
[
FORUM_ROLE_MODERATOR
],
course_roles
[
FORUM_ROLE_ADMINISTRATOR
]]))
def
_auto_auth
(
self
,
**
params
):
@ddt.data
(
*
COURSE_IDS_DDT
)
@ddt.unpack
def
test_json_response
(
self
,
course_id
,
course_key
):
# pylint: disable=unused-argument
"""Verify that we can get JSON back from the auto_auth page."""
response
=
self
.
_auto_auth
(
HTTP_ACCEPT
=
'application/json'
)
response_data
=
json
.
loads
(
response
.
content
)
for
key
in
[
'created_status'
,
'username'
,
'email'
,
'password'
,
'user_id'
,
'anonymous_id'
]:
self
.
assertIn
(
key
,
response_data
)
user
=
User
.
objects
.
get
(
username
=
response_data
[
'username'
])
self
.
assertDictContainsSubset
(
{
'created_status'
:
"Logged in"
,
'anonymous_id'
:
anonymous_id_for_user
(
user
,
None
),
},
response_data
)
def
_auto_auth
(
self
,
params
=
None
,
**
kwargs
):
"""
Make a request to the auto-auth end-point and check
that the response is successful.
Arguments:
params (dict): Dict of params to pass to the auto_auth view
kwargs: Passed directly to the test client's get method.
Returns
response: The response object for the auto_auth page.
"""
response
=
self
.
client
.
get
(
self
.
url
,
params
)
params
=
params
or
{}
response
=
self
.
client
.
get
(
self
.
url
,
params
,
**
kwargs
)
self
.
assertEqual
(
response
.
status_code
,
200
)
# Check that session and CSRF are set in the response
...
...
@@ -168,6 +196,8 @@ class AutoAuthEnabledTestCase(UrlResetMixin, TestCase):
self
.
assertIn
(
cookie
,
response
.
cookies
)
# pylint: disable=maybe-no-member
self
.
assertTrue
(
response
.
cookies
[
cookie
]
.
value
)
# pylint: disable=maybe-no-member
return
response
class
AutoAuthDisabledTestCase
(
UrlResetMixin
,
TestCase
):
"""
...
...
common/djangoapps/student/views.py
View file @
9e0dcb72
...
...
@@ -109,6 +109,7 @@ from student.helpers import (
auth_pipeline_urls
,
set_logged_in_cookie
,
check_verify_status_by_course
)
from
student.models
import
anonymous_id_for_user
from
xmodule.error_module
import
ErrorDescriptor
from
shoppingcart.models
import
DonationConfiguration
,
CourseRegistrationCode
...
...
@@ -1733,11 +1734,21 @@ def auto_auth(request):
# Provide the user with a valid CSRF token
# then return a 200 response
success_msg
=
u"{} user {} ({}) with password {} and user_id {}"
.
format
(
u"Logged in"
if
login_when_done
else
"Created"
,
username
,
email
,
password
,
user
.
id
)
response
=
HttpResponse
(
success_msg
)
if
request
.
META
.
get
(
'HTTP_ACCEPT'
)
==
'application/json'
:
response
=
JsonResponse
({
'created_status'
:
u"Logged in"
if
login_when_done
else
"Created"
,
'username'
:
username
,
'email'
:
email
,
'password'
:
password
,
'user_id'
:
user
.
id
,
# pylint: disable=no-member
'anonymous_id'
:
anonymous_id_for_user
(
user
,
None
),
})
else
:
success_msg
=
u"{} user {} ({}) with password {} and user_id {}"
.
format
(
u"Logged in"
if
login_when_done
else
"Created"
,
username
,
email
,
password
,
user
.
id
# pylint: disable=no-member
)
response
=
HttpResponse
(
success_msg
)
response
.
set_cookie
(
'csrftoken'
,
csrf
(
request
)[
'csrf_token'
])
return
response
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment