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
0738b6c3
Commit
0738b6c3
authored
Apr 14, 2014
by
jsa
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
django_comment_client/forum: add test coverage for user_profile view
JIRA: FOR-496
parent
ada5cb4a
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
118 additions
and
3 deletions
+118
-3
lms/djangoapps/django_comment_client/forum/tests.py
+117
-2
lms/djangoapps/django_comment_client/forum/views.py
+1
-1
No files found.
lms/djangoapps/django_comment_client/forum/tests.py
View file @
0738b6c3
...
...
@@ -106,13 +106,13 @@ def make_mock_thread_data(text, thread_id, include_children):
return
thread_data
def
make_mock_request_impl
(
text
,
thread_id
=
None
):
def
make_mock_request_impl
(
text
,
thread_id
=
"dummy_thread_id"
):
def
mock_request_impl
(
*
args
,
**
kwargs
):
url
=
args
[
1
]
data
=
None
if
url
.
endswith
(
"threads"
):
data
=
{
"collection"
:
[
make_mock_thread_data
(
text
,
"dummy_thread_id"
,
False
)]
"collection"
:
[
make_mock_thread_data
(
text
,
thread_id
,
False
)]
}
elif
thread_id
and
url
.
endswith
(
thread_id
):
data
=
make_mock_thread_data
(
text
,
thread_id
,
True
)
...
...
@@ -122,6 +122,12 @@ def make_mock_request_impl(text, thread_id=None):
"downvoted_ids"
:
[],
"subscribed_thread_ids"
:
[],
}
# comments service adds these attributes when course_id param is present
if
kwargs
.
get
(
'params'
,
{})
.
get
(
'course_id'
):
data
.
update
({
"threads_count"
:
1
,
"comments_count"
:
2
})
if
data
:
return
Mock
(
status_code
=
200
,
text
=
json
.
dumps
(
data
),
json
=
Mock
(
return_value
=
data
))
return
Mock
(
status_code
=
404
)
...
...
@@ -254,6 +260,115 @@ class SingleThreadTestCase(ModuleStoreTestCase):
@override_settings
(
MODULESTORE
=
TEST_DATA_MIXED_MODULESTORE
)
@patch
(
'requests.request'
)
class
UserProfileTestCase
(
ModuleStoreTestCase
):
TEST_THREAD_TEXT
=
'userprofile-test-text'
TEST_THREAD_ID
=
'userprofile-test-thread-id'
def
setUp
(
self
):
self
.
course
=
CourseFactory
.
create
()
self
.
student
=
UserFactory
.
create
()
self
.
profiled_user
=
UserFactory
.
create
()
CourseEnrollmentFactory
.
create
(
user
=
self
.
student
,
course_id
=
self
.
course
.
id
)
def
get_response
(
self
,
mock_request
,
params
,
**
headers
):
mock_request
.
side_effect
=
make_mock_request_impl
(
self
.
TEST_THREAD_TEXT
,
self
.
TEST_THREAD_ID
)
request
=
RequestFactory
()
.
get
(
"dummy_url"
,
data
=
params
,
**
headers
)
request
.
user
=
self
.
student
response
=
views
.
user_profile
(
request
,
self
.
course
.
id
,
self
.
profiled_user
.
id
)
mock_request
.
assert_any_call
(
"get"
,
StringEndsWithMatcher
(
'/users/{}/active_threads'
.
format
(
self
.
profiled_user
.
id
)),
data
=
None
,
params
=
PartialDictMatcher
({
"course_id"
:
self
.
course
.
id
,
"page"
:
params
.
get
(
"page"
,
1
),
"per_page"
:
views
.
THREADS_PER_PAGE
}),
headers
=
ANY
,
timeout
=
ANY
)
return
response
def
check_html
(
self
,
mock_request
,
**
params
):
response
=
self
.
get_response
(
mock_request
,
params
)
self
.
assertEqual
(
response
.
status_code
,
200
)
self
.
assertEqual
(
response
[
'Content-Type'
],
'text/html; charset=utf-8'
)
html
=
response
.
content
self
.
assertRegexpMatches
(
html
,
r'var \$\$course_id = \"{}\"'
.
format
(
self
.
course
.
id
))
self
.
assertRegexpMatches
(
html
,
r'var \$\$profiled_user_id = \"{}\"'
.
format
(
self
.
profiled_user
.
id
))
self
.
assertRegexpMatches
(
html
,
r'<span>1</span> discussion started'
)
self
.
assertRegexpMatches
(
html
,
r'<span>2</span> comments'
)
self
.
assertRegexpMatches
(
html
,
r'"id": "{}"'
.
format
(
self
.
TEST_THREAD_ID
))
self
.
assertRegexpMatches
(
html
,
r'"title": "{}"'
.
format
(
self
.
TEST_THREAD_TEXT
))
self
.
assertRegexpMatches
(
html
,
r'"body": "{}"'
.
format
(
self
.
TEST_THREAD_TEXT
))
self
.
assertRegexpMatches
(
html
,
r'"username": "{}"'
.
format
(
self
.
student
.
username
))
def
check_ajax
(
self
,
mock_request
,
**
params
):
response
=
self
.
get_response
(
mock_request
,
params
,
HTTP_X_REQUESTED_WITH
=
"XMLHttpRequest"
)
self
.
assertEqual
(
response
.
status_code
,
200
)
self
.
assertEqual
(
response
[
'Content-Type'
],
'application/json; charset=utf-8'
)
response_data
=
json
.
loads
(
response
.
content
)
self
.
assertEqual
(
sorted
(
response_data
.
keys
()),
[
"annotated_content_info"
,
"discussion_data"
,
"num_pages"
,
"page"
]
)
self
.
assertEqual
(
len
(
response_data
[
'discussion_data'
]),
1
)
self
.
assertEqual
(
response_data
[
"page"
],
1
)
self
.
assertEqual
(
response_data
[
"num_pages"
],
1
)
self
.
assertEqual
(
response_data
[
'discussion_data'
][
0
][
'id'
],
self
.
TEST_THREAD_ID
)
self
.
assertEqual
(
response_data
[
'discussion_data'
][
0
][
'title'
],
self
.
TEST_THREAD_TEXT
)
self
.
assertEqual
(
response_data
[
'discussion_data'
][
0
][
'body'
],
self
.
TEST_THREAD_TEXT
)
def
test_html
(
self
,
mock_request
):
self
.
check_html
(
mock_request
)
def
test_html_p2
(
self
,
mock_request
):
self
.
check_html
(
mock_request
,
page
=
"2"
)
def
test_ajax
(
self
,
mock_request
):
self
.
check_ajax
(
mock_request
)
def
test_ajax_p2
(
self
,
mock_request
):
self
.
check_ajax
(
mock_request
,
page
=
"2"
)
def
test_404_profiled_user
(
self
,
mock_request
):
request
=
RequestFactory
()
.
get
(
"dummy_url"
)
request
.
user
=
self
.
student
with
self
.
assertRaises
(
Http404
):
response
=
views
.
user_profile
(
request
,
self
.
course
.
id
,
-
999
)
def
test_404_course
(
self
,
mock_request
):
request
=
RequestFactory
()
.
get
(
"dummy_url"
)
request
.
user
=
self
.
student
with
self
.
assertRaises
(
Http404
):
response
=
views
.
user_profile
(
request
,
"non/existent/course"
,
self
.
profiled_user
.
id
)
def
test_post
(
self
,
mock_request
):
mock_request
.
side_effect
=
make_mock_request_impl
(
self
.
TEST_THREAD_TEXT
,
self
.
TEST_THREAD_ID
)
request
=
RequestFactory
()
.
post
(
"dummy_url"
)
request
.
user
=
self
.
student
response
=
views
.
user_profile
(
request
,
self
.
course
.
id
,
self
.
profiled_user
.
id
)
self
.
assertEqual
(
response
.
status_code
,
405
)
@override_settings
(
MODULESTORE
=
TEST_DATA_MIXED_MODULESTORE
)
@patch
(
'requests.request'
)
class
CommentsServiceRequestHeadersTestCase
(
UrlResetMixin
,
ModuleStoreTestCase
):
@patch.dict
(
"django.conf.settings.FEATURES"
,
{
"ENABLE_DISCUSSION_SERVICE"
:
True
})
def
setUp
(
self
):
...
...
lms/djangoapps/django_comment_client/forum/views.py
View file @
0738b6c3
...
...
@@ -314,7 +314,7 @@ def single_thread(request, course_id, discussion_id, thread_id):
return
render_to_response
(
'discussion/index.html'
,
context
)
@require_GET
@login_required
def
user_profile
(
request
,
course_id
,
user_id
):
nr_transaction
=
newrelic
.
agent
.
current_transaction
()
...
...
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