diff --git a/lms/djangoapps/django_comment_client/base/tests.py b/lms/djangoapps/django_comment_client/base/tests.py index 4495e648d9..8739c54edb 100644 --- a/lms/djangoapps/django_comment_client/base/tests.py +++ b/lms/djangoapps/django_comment_client/base/tests.py @@ -23,9 +23,16 @@ log = logging.getLogger(__name__) CS_PREFIX = "http://localhost:4567/api/v1" + +class MockRequestSetupMixin(object): + def _set_mock_request_data(self, mock_request, data): + mock_request.return_value.text = json.dumps(data) + mock_request.return_value.json.return_value = data + + @override_settings(MODULESTORE=TEST_DATA_MIXED_MODULESTORE) @patch('lms.lib.comment_client.utils.requests.request') -class ViewsTestCase(UrlResetMixin, ModuleStoreTestCase): +class ViewsTestCase(UrlResetMixin, ModuleStoreTestCase, MockRequestSetupMixin): @patch.dict("django.conf.settings.FEATURES", {"ENABLE_DISCUSSION_SERVICE": True}) def setUp(self): @@ -63,26 +70,35 @@ class ViewsTestCase(UrlResetMixin, ModuleStoreTestCase): def test_create_thread(self, mock_request): mock_request.return_value.status_code = 200 - mock_request.return_value.text = u'{"title":"Hello",\ - "body":"this is a post",\ - "course_id":"MITx/999/Robot_Super_Course",\ - "anonymous":false,\ - "anonymous_to_peers":false,\ - "commentable_id":"i4x-MITx-999-course-Robot_Super_Course",\ - "created_at":"2013-05-10T18:53:43Z",\ - "updated_at":"2013-05-10T18:53:43Z",\ - "at_position_list":[],\ - "closed":false,\ - "id":"518d4237b023791dca00000d",\ - "user_id":"1","username":"robot",\ - "votes":{"count":0,"up_count":0,\ - "down_count":0,"point":0},\ - "abuse_flaggers":[],\ - "type":"thread","group_id":null,\ - "pinned":false,\ - "endorsed":false,\ - "unread_comments_count":0,\ - "read":false,"comments_count":0}' + self._set_mock_request_data(mock_request, { + "title": "Hello", + "body": "this is a post", + "course_id": "MITx/999/Robot_Super_Course", + "anonymous": False, + "anonymous_to_peers": False, + "commentable_id": "i4x-MITx-999-course-Robot_Super_Course", + "created_at": "2013-05-10T18:53:43Z", + "updated_at": "2013-05-10T18:53:43Z", + "at_position_list": [], + "closed": False, + "id": "518d4237b023791dca00000d", + "user_id": "1", + "username": "robot", + "votes": { + "count": 0, + "up_count": 0, + "down_count": 0, + "point": 0 + }, + "abuse_flaggers": [], + "type": "thread", + "group_id": None, + "pinned": False, + "endorsed": False, + "unread_comments_count": 0, + "read": False, + "comments_count": 0, + }) thread = {"body": ["this is a post"], "anonymous_to_peers": ["false"], "auto_subscribe": ["false"], @@ -110,7 +126,7 @@ class ViewsTestCase(UrlResetMixin, ModuleStoreTestCase): assert_equal(response.status_code, 200) def test_delete_comment(self, mock_request): - mock_request.return_value.text = json.dumps({ + self._set_mock_request_data(mock_request, { "user_id": str(self.student.id), "closed": False, }) @@ -138,7 +154,7 @@ class ViewsTestCase(UrlResetMixin, ModuleStoreTestCase): } if include_depth: data["depth"] = 0 - mock_request.return_value.text = json.dumps(data) + self._set_mock_request_data(mock_request, data) def _test_request_error(self, view_name, view_kwargs, data, mock_request): """ @@ -290,26 +306,34 @@ class ViewsTestCase(UrlResetMixin, ModuleStoreTestCase): def test_flag_thread(self, mock_request): mock_request.return_value.status_code = 200 - mock_request.return_value.text = u'{"title":"Hello",\ - "body":"this is a post",\ - "course_id":"MITx/999/Robot_Super_Course",\ - "anonymous":false,\ - "anonymous_to_peers":false,\ - "commentable_id":"i4x-MITx-999-course-Robot_Super_Course",\ - "created_at":"2013-05-10T18:53:43Z",\ - "updated_at":"2013-05-10T18:53:43Z",\ - "at_position_list":[],\ - "closed":false,\ - "id":"518d4237b023791dca00000d",\ - "user_id":"1","username":"robot",\ - "votes":{"count":0,"up_count":0,\ - "down_count":0,"point":0},\ - "abuse_flaggers":[1],\ - "type":"thread","group_id":null,\ - "pinned":false,\ - "endorsed":false,\ - "unread_comments_count":0,\ - "read":false,"comments_count":0}' + self._set_mock_request_data(mock_request, { + "title": "Hello", + "body": "this is a post", + "course_id": "MITx/999/Robot_Super_Course", + "anonymous": False, + "anonymous_to_peers": False, + "commentable_id": "i4x-MITx-999-course-Robot_Super_Course", + "created_at": "2013-05-10T18:53:43Z", + "updated_at": "2013-05-10T18:53:43Z", + "at_position_list": [], + "closed": False, + "id": "518d4237b023791dca00000d", + "user_id": "1","username": "robot", + "votes": { + "count": 0, + "up_count": 0, + "down_count": 0, + "point": 0 + }, + "abuse_flaggers": [1], + "type": "thread", + "group_id": None, + "pinned": False, + "endorsed": False, + "unread_comments_count": 0, + "read": False, + "comments_count": 0, + }) url = reverse('flag_abuse_for_thread', kwargs={'thread_id': '518d4237b023791dca00000d', 'course_id': self.course_id}) response = self.client.post(url) assert_true(mock_request.called) @@ -350,26 +374,35 @@ class ViewsTestCase(UrlResetMixin, ModuleStoreTestCase): def test_un_flag_thread(self, mock_request): mock_request.return_value.status_code = 200 - mock_request.return_value.text = u'{"title":"Hello",\ - "body":"this is a post",\ - "course_id":"MITx/999/Robot_Super_Course",\ - "anonymous":false,\ - "anonymous_to_peers":false,\ - "commentable_id":"i4x-MITx-999-course-Robot_Super_Course",\ - "created_at":"2013-05-10T18:53:43Z",\ - "updated_at":"2013-05-10T18:53:43Z",\ - "at_position_list":[],\ - "closed":false,\ - "id":"518d4237b023791dca00000d",\ - "user_id":"1","username":"robot",\ - "votes":{"count":0,"up_count":0,\ - "down_count":0,"point":0},\ - "abuse_flaggers":[],\ - "type":"thread","group_id":null,\ - "pinned":false,\ - "endorsed":false,\ - "unread_comments_count":0,\ - "read":false,"comments_count":0}' + self._set_mock_request_data(mock_request, { + "title": "Hello", + "body": "this is a post", + "course_id": "MITx/999/Robot_Super_Course", + "anonymous": False, + "anonymous_to_peers": False, + "commentable_id": "i4x-MITx-999-course-Robot_Super_Course", + "created_at": "2013-05-10T18:53:43Z", + "updated_at": "2013-05-10T18:53:43Z", + "at_position_list": [], + "closed": False, + "id": "518d4237b023791dca00000d", + "user_id": "1", + "username": "robot", + "votes": { + "count": 0, + "up_count": 0, + "down_count": 0, + "point": 0 + }, + "abuse_flaggers": [], + "type": "thread", + "group_id": None, + "pinned": False, + "endorsed": False, + "unread_comments_count": 0, + "read": False, + "comments_count": 0 + }) url = reverse('un_flag_abuse_for_thread', kwargs={'thread_id': '518d4237b023791dca00000d', 'course_id': self.course_id}) response = self.client.post(url) assert_true(mock_request.called) @@ -410,22 +443,29 @@ class ViewsTestCase(UrlResetMixin, ModuleStoreTestCase): def test_flag_comment(self, mock_request): mock_request.return_value.status_code = 200 - mock_request.return_value.text = u'{"body":"this is a comment",\ - "course_id":"MITx/999/Robot_Super_Course",\ - "anonymous":false,\ - "anonymous_to_peers":false,\ - "commentable_id":"i4x-MITx-999-course-Robot_Super_Course",\ - "created_at":"2013-05-10T18:53:43Z",\ - "updated_at":"2013-05-10T18:53:43Z",\ - "at_position_list":[],\ - "closed":false,\ - "id":"518d4237b023791dca00000d",\ - "user_id":"1","username":"robot",\ - "votes":{"count":0,"up_count":0,\ - "down_count":0,"point":0},\ - "abuse_flaggers":[1],\ - "type":"comment",\ - "endorsed":false}' + self._set_mock_request_data(mock_request, { + "body": "this is a comment", + "course_id": "MITx/999/Robot_Super_Course", + "anonymous": False, + "anonymous_to_peers": False, + "commentable_id": "i4x-MITx-999-course-Robot_Super_Course", + "created_at": "2013-05-10T18:53:43Z", + "updated_at": "2013-05-10T18:53:43Z", + "at_position_list": [], + "closed": False, + "id": "518d4237b023791dca00000d", + "user_id": "1", + "username": "robot", + "votes": { + "count": 0, + "up_count": 0, + "down_count": 0, + "point": 0 + }, + "abuse_flaggers": [1], + "type": "comment", + "endorsed": False + }) url = reverse('flag_abuse_for_comment', kwargs={'comment_id': '518d4237b023791dca00000d', 'course_id': self.course_id}) response = self.client.post(url) assert_true(mock_request.called) @@ -466,22 +506,29 @@ class ViewsTestCase(UrlResetMixin, ModuleStoreTestCase): def test_un_flag_comment(self, mock_request): mock_request.return_value.status_code = 200 - mock_request.return_value.text = u'{"body":"this is a comment",\ - "course_id":"MITx/999/Robot_Super_Course",\ - "anonymous":false,\ - "anonymous_to_peers":false,\ - "commentable_id":"i4x-MITx-999-course-Robot_Super_Course",\ - "created_at":"2013-05-10T18:53:43Z",\ - "updated_at":"2013-05-10T18:53:43Z",\ - "at_position_list":[],\ - "closed":false,\ - "id":"518d4237b023791dca00000d",\ - "user_id":"1","username":"robot",\ - "votes":{"count":0,"up_count":0,\ - "down_count":0,"point":0},\ - "abuse_flaggers":[],\ - "type":"comment",\ - "endorsed":false}' + self._set_mock_request_data(mock_request, { + "body": "this is a comment", + "course_id": "MITx/999/Robot_Super_Course", + "anonymous": False, + "anonymous_to_peers": False, + "commentable_id": "i4x-MITx-999-course-Robot_Super_Course", + "created_at": "2013-05-10T18:53:43Z", + "updated_at": "2013-05-10T18:53:43Z", + "at_position_list": [], + "closed": False, + "id": "518d4237b023791dca00000d", + "user_id": "1", + "username": "robot", + "votes": { + "count": 0, + "up_count": 0, + "down_count": 0, + "point": 0 + }, + "abuse_flaggers": [], + "type": "comment", + "endorsed": False + }) url = reverse('un_flag_abuse_for_comment', kwargs={'comment_id': '518d4237b023791dca00000d', 'course_id': self.course_id}) response = self.client.post(url) assert_true(mock_request.called) @@ -522,7 +569,7 @@ class ViewsTestCase(UrlResetMixin, ModuleStoreTestCase): @patch("lms.lib.comment_client.utils.requests.request") @override_settings(MODULESTORE=TEST_DATA_MIXED_MODULESTORE) -class ViewPermissionsTestCase(UrlResetMixin, ModuleStoreTestCase): +class ViewPermissionsTestCase(UrlResetMixin, ModuleStoreTestCase, MockRequestSetupMixin): @patch.dict("django.conf.settings.FEATURES", {"ENABLE_DISCUSSION_SERVICE": True}) def setUp(self): super(ViewPermissionsTestCase, self).setUp() @@ -536,7 +583,7 @@ class ViewPermissionsTestCase(UrlResetMixin, ModuleStoreTestCase): self.moderator.roles.add(Role.objects.get(name="Moderator", course_id=self.course.id)) def test_pin_thread_as_student(self, mock_request): - mock_request.return_value.text = "{}" + self._set_mock_request_data(mock_request, {}) self.client.login(username=self.student.username, password=self.password) response = self.client.post( reverse("pin_thread", kwargs={"course_id": self.course.id, "thread_id": "dummy"}) @@ -544,7 +591,7 @@ class ViewPermissionsTestCase(UrlResetMixin, ModuleStoreTestCase): self.assertEqual(response.status_code, 401) def test_pin_thread_as_moderator(self, mock_request): - mock_request.return_value.text = "{}" + self._set_mock_request_data(mock_request, {}) self.client.login(username=self.moderator.username, password=self.password) response = self.client.post( reverse("pin_thread", kwargs={"course_id": self.course.id, "thread_id": "dummy"}) @@ -552,7 +599,7 @@ class ViewPermissionsTestCase(UrlResetMixin, ModuleStoreTestCase): self.assertEqual(response.status_code, 200) def test_un_pin_thread_as_student(self, mock_request): - mock_request.return_value.text = "{}" + self._set_mock_request_data(mock_request, {}) self.client.login(username=self.student.username, password=self.password) response = self.client.post( reverse("un_pin_thread", kwargs={"course_id": self.course.id, "thread_id": "dummy"}) @@ -560,7 +607,7 @@ class ViewPermissionsTestCase(UrlResetMixin, ModuleStoreTestCase): self.assertEqual(response.status_code, 401) def test_un_pin_thread_as_moderator(self, mock_request): - mock_request.return_value.text = "{}" + self._set_mock_request_data(mock_request, {}) self.client.login(username=self.moderator.username, password=self.password) response = self.client.post( reverse("un_pin_thread", kwargs={"course_id": self.course.id, "thread_id": "dummy"}) @@ -569,7 +616,7 @@ class ViewPermissionsTestCase(UrlResetMixin, ModuleStoreTestCase): @override_settings(MODULESTORE=TEST_DATA_MIXED_MODULESTORE) -class CreateThreadUnicodeTestCase(ModuleStoreTestCase, UnicodeTestMixin): +class CreateThreadUnicodeTestCase(ModuleStoreTestCase, UnicodeTestMixin, MockRequestSetupMixin): def setUp(self): self.course = CourseFactory.create() seed_permissions_roles(self.course.id) @@ -578,7 +625,7 @@ class CreateThreadUnicodeTestCase(ModuleStoreTestCase, UnicodeTestMixin): @patch('lms.lib.comment_client.utils.requests.request') def _test_unicode_data(self, text, mock_request): - mock_request.return_value.text = "{}" + self._set_mock_request_data(mock_request, {}) request = RequestFactory().post("dummy_url", {"body": text, "title": text}) request.user = self.student request.view_name = "create_thread" @@ -591,7 +638,7 @@ class CreateThreadUnicodeTestCase(ModuleStoreTestCase, UnicodeTestMixin): @override_settings(MODULESTORE=TEST_DATA_MIXED_MODULESTORE) -class UpdateThreadUnicodeTestCase(ModuleStoreTestCase, UnicodeTestMixin): +class UpdateThreadUnicodeTestCase(ModuleStoreTestCase, UnicodeTestMixin, MockRequestSetupMixin): def setUp(self): self.course = CourseFactory.create() seed_permissions_roles(self.course.id) @@ -600,7 +647,7 @@ class UpdateThreadUnicodeTestCase(ModuleStoreTestCase, UnicodeTestMixin): @patch('lms.lib.comment_client.utils.requests.request') def _test_unicode_data(self, text, mock_request): - mock_request.return_value.text = json.dumps({ + self._set_mock_request_data(mock_request, { "user_id": str(self.student.id), "closed": False, }) @@ -616,7 +663,7 @@ class UpdateThreadUnicodeTestCase(ModuleStoreTestCase, UnicodeTestMixin): @override_settings(MODULESTORE=TEST_DATA_MIXED_MODULESTORE) -class CreateCommentUnicodeTestCase(ModuleStoreTestCase, UnicodeTestMixin): +class CreateCommentUnicodeTestCase(ModuleStoreTestCase, UnicodeTestMixin, MockRequestSetupMixin): def setUp(self): self.course = CourseFactory.create() seed_permissions_roles(self.course.id) @@ -625,7 +672,7 @@ class CreateCommentUnicodeTestCase(ModuleStoreTestCase, UnicodeTestMixin): @patch('lms.lib.comment_client.utils.requests.request') def _test_unicode_data(self, text, mock_request): - mock_request.return_value.text = json.dumps({ + self._set_mock_request_data(mock_request, { "closed": False, }) request = RequestFactory().post("dummy_url", {"body": text}) @@ -639,7 +686,7 @@ class CreateCommentUnicodeTestCase(ModuleStoreTestCase, UnicodeTestMixin): @override_settings(MODULESTORE=TEST_DATA_MIXED_MODULESTORE) -class UpdateCommentUnicodeTestCase(ModuleStoreTestCase, UnicodeTestMixin): +class UpdateCommentUnicodeTestCase(ModuleStoreTestCase, UnicodeTestMixin, MockRequestSetupMixin): def setUp(self): self.course = CourseFactory.create() seed_permissions_roles(self.course.id) @@ -648,7 +695,7 @@ class UpdateCommentUnicodeTestCase(ModuleStoreTestCase, UnicodeTestMixin): @patch('lms.lib.comment_client.utils.requests.request') def _test_unicode_data(self, text, mock_request): - mock_request.return_value.text = json.dumps({ + self._set_mock_request_data(mock_request, { "user_id": str(self.student.id), "closed": False, }) @@ -663,7 +710,7 @@ class UpdateCommentUnicodeTestCase(ModuleStoreTestCase, UnicodeTestMixin): @override_settings(MODULESTORE=TEST_DATA_MIXED_MODULESTORE) -class CreateSubCommentUnicodeTestCase(ModuleStoreTestCase, UnicodeTestMixin): +class CreateSubCommentUnicodeTestCase(ModuleStoreTestCase, UnicodeTestMixin, MockRequestSetupMixin): def setUp(self): self.course = CourseFactory.create() seed_permissions_roles(self.course.id) @@ -672,7 +719,7 @@ class CreateSubCommentUnicodeTestCase(ModuleStoreTestCase, UnicodeTestMixin): @patch('lms.lib.comment_client.utils.requests.request') def _test_unicode_data(self, text, mock_request): - mock_request.return_value.text = json.dumps({ + self._set_mock_request_data(mock_request, { "closed": False, "depth": 1, }) diff --git a/lms/djangoapps/django_comment_client/forum/tests.py b/lms/djangoapps/django_comment_client/forum/tests.py index 0bfeded536..188aba479e 100644 --- a/lms/djangoapps/django_comment_client/forum/tests.py +++ b/lms/djangoapps/django_comment_client/forum/tests.py @@ -109,26 +109,18 @@ def make_mock_request_impl(text, thread_id=None): def mock_request_impl(*args, **kwargs): url = args[1] if url.endswith("threads"): - return Mock( - status_code=200, - text=json.dumps({ - "collection": [make_mock_thread_data(text, "dummy_thread_id", False)] - }) - ) + data = { + "collection": [make_mock_thread_data(text, "dummy_thread_id", False)] + } elif thread_id and url.endswith(thread_id): - return Mock( - status_code=200, - text=json.dumps(make_mock_thread_data(text, thread_id, True)) - ) + data = make_mock_thread_data(text, thread_id, True) else: # user query - return Mock( - status_code=200, - text=json.dumps({ - "upvoted_ids": [], - "downvoted_ids": [], - "subscribed_thread_ids": [], - }) - ) + data = { + "upvoted_ids": [], + "downvoted_ids": [], + "subscribed_thread_ids": [], + } + return Mock(status_code=200, text=json.dumps(data), json=Mock(return_value=data)) return mock_request_impl diff --git a/lms/lib/comment_client/utils.py b/lms/lib/comment_client/utils.py index 67c3060339..62e2500bb9 100644 --- a/lms/lib/comment_client/utils.py +++ b/lms/lib/comment_client/utils.py @@ -87,7 +87,7 @@ def perform_request(method, url, data_or_params=None, raw=False): if raw: return response.text else: - return json.loads(response.text) + return response.json() class CommentClientError(Exception):