django_comment_client/forum: add test coverage for user_profile view
JIRA: FOR-496
This commit is contained in:
@@ -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)
|
||||
@@ -252,6 +258,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):
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user