Commit 411f1f79 by Calen Pennington

Use the Django TestClient for forum unit tests, so that middleware is cleaned up properly

parent 57f7271b
...@@ -8,7 +8,6 @@ from django.test.client import Client, RequestFactory ...@@ -8,7 +8,6 @@ from django.test.client import Client, RequestFactory
from django.test.utils import override_settings from django.test.utils import override_settings
from django.utils import translation from django.utils import translation
from lms.lib.comment_client.utils import CommentClientPaginatedResult from lms.lib.comment_client.utils import CommentClientPaginatedResult
from edxmako.tests import mako_middleware_process_request
from django_comment_common.utils import ThreadContext from django_comment_common.utils import ThreadContext
from django_comment_client.forum import views from django_comment_client.forum import views
...@@ -441,14 +440,13 @@ class SingleCohortedThreadTestCase(CohortedTestCase): ...@@ -441,14 +440,13 @@ class SingleCohortedThreadTestCase(CohortedTestCase):
def test_html(self, mock_request): def test_html(self, mock_request):
self._create_mock_cohorted_thread(mock_request) self._create_mock_cohorted_thread(mock_request)
request = RequestFactory().get("dummy_url") self.client.login(username=self.student.username, password='test')
request.user = self.student response = self.client.get(
mako_middleware_process_request(request) reverse('single_thread', kwargs={
response = views.single_thread( 'course_id': unicode(self.course.id),
request, 'discussion_id': "cohorted_topic",
self.course.id.to_deprecated_string(), 'thread_id': self.mock_thread_id,
"cohorted_topic", })
self.mock_thread_id
) )
self.assertEquals(response.status_code, 200) self.assertEquals(response.status_code, 200)
...@@ -561,19 +559,14 @@ class SingleThreadGroupIdTestCase(CohortedTestCase, CohortedTopicGroupIdTestMixi ...@@ -561,19 +559,14 @@ class SingleThreadGroupIdTestCase(CohortedTestCase, CohortedTopicGroupIdTestMixi
headers = {} headers = {}
if is_ajax: if is_ajax:
headers['HTTP_X_REQUESTED_WITH'] = "XMLHttpRequest" headers['HTTP_X_REQUESTED_WITH'] = "XMLHttpRequest"
request = RequestFactory().get(
"dummy_url", self.client.login(username=user.username, password='test')
return self.client.get(
reverse('single_thread', args=[unicode(self.course.id), commentable_id, "dummy_thread_id"]),
data=request_data, data=request_data,
**headers **headers
) )
request.user = user
mako_middleware_process_request(request)
return views.single_thread(
request,
self.course.id.to_deprecated_string(),
commentable_id,
"dummy_thread_id"
)
def test_group_info_in_html_response(self, mock_request): def test_group_info_in_html_response(self, mock_request):
response = self.call_view( response = self.call_view(
...@@ -599,30 +592,28 @@ class SingleThreadGroupIdTestCase(CohortedTestCase, CohortedTopicGroupIdTestMixi ...@@ -599,30 +592,28 @@ class SingleThreadGroupIdTestCase(CohortedTestCase, CohortedTopicGroupIdTestMixi
@patch('requests.request', autospec=True) @patch('requests.request', autospec=True)
class SingleThreadContentGroupTestCase(ContentGroupTestCase): class SingleThreadContentGroupTestCase(UrlResetMixin, ContentGroupTestCase):
@patch.dict("django.conf.settings.FEATURES", {"ENABLE_DISCUSSION_SERVICE": True})
def setUp(self):
super(SingleThreadContentGroupTestCase, self).setUp()
def assert_can_access(self, user, discussion_id, thread_id, should_have_access): def assert_can_access(self, user, discussion_id, thread_id, should_have_access):
""" """
Verify that a user has access to a thread within a given Verify that a user has access to a thread within a given
discussion_id when should_have_access is True, otherwise discussion_id when should_have_access is True, otherwise
verify that the user does not have access to that thread. verify that the user does not have access to that thread.
""" """
request = RequestFactory().get("dummy_url")
request.user = user
mako_middleware_process_request(request)
def call_single_thread(): def call_single_thread():
return views.single_thread( self.client.login(username=user.username, password='test')
request, return self.client.get(
unicode(self.course.id), reverse('single_thread', args=[unicode(self.course.id), discussion_id, thread_id])
discussion_id,
thread_id
) )
if should_have_access: if should_have_access:
self.assertEqual(call_single_thread().status_code, 200) self.assertEqual(call_single_thread().status_code, 200)
else: else:
with self.assertRaises(Http404): self.assertEqual(call_single_thread().status_code, 404)
call_single_thread()
def test_staff_user(self, mock_request): def test_staff_user(self, mock_request):
""" """
...@@ -813,17 +804,13 @@ class ForumFormDiscussionGroupIdTestCase(CohortedTestCase, CohortedTopicGroupIdT ...@@ -813,17 +804,13 @@ class ForumFormDiscussionGroupIdTestCase(CohortedTestCase, CohortedTopicGroupIdT
headers = {} headers = {}
if is_ajax: if is_ajax:
headers['HTTP_X_REQUESTED_WITH'] = "XMLHttpRequest" headers['HTTP_X_REQUESTED_WITH'] = "XMLHttpRequest"
request = RequestFactory().get(
"dummy_url", self.client.login(username=user.username, password='test')
return self.client.get(
reverse(views.forum_form_discussion, args=[unicode(self.course.id)]),
data=request_data, data=request_data,
**headers **headers
) )
request.user = user
mako_middleware_process_request(request)
return views.forum_form_discussion(
request,
self.course.id.to_deprecated_string()
)
def test_group_info_in_html_response(self, mock_request): def test_group_info_in_html_response(self, mock_request):
response = self.call_view( response = self.call_view(
...@@ -869,18 +856,13 @@ class UserProfileDiscussionGroupIdTestCase(CohortedTestCase, CohortedTopicGroupI ...@@ -869,18 +856,13 @@ class UserProfileDiscussionGroupIdTestCase(CohortedTestCase, CohortedTopicGroupI
headers = {} headers = {}
if is_ajax: if is_ajax:
headers['HTTP_X_REQUESTED_WITH'] = "XMLHttpRequest" headers['HTTP_X_REQUESTED_WITH'] = "XMLHttpRequest"
request = RequestFactory().get(
"dummy_url", self.client.login(username=requesting_user.username, password='test')
return self.client.get(
reverse('user_profile', args=[unicode(self.course.id), profiled_user.id]),
data=request_data, data=request_data,
**headers **headers
) )
request.user = requesting_user
mako_middleware_process_request(request)
return views.user_profile(
request,
self.course.id.to_deprecated_string(),
profiled_user.id
)
def call_view(self, mock_request, _commentable_id, user, group_id, pass_group_id=True, is_ajax=False): def call_view(self, mock_request, _commentable_id, user, group_id, pass_group_id=True, is_ajax=False):
return self.call_view_for_profiled_user( return self.call_view_for_profiled_user(
...@@ -1109,11 +1091,12 @@ class InlineDiscussionTestCase(ModuleStoreTestCase): ...@@ -1109,11 +1091,12 @@ class InlineDiscussionTestCase(ModuleStoreTestCase):
@patch('requests.request', autospec=True) @patch('requests.request', autospec=True)
class UserProfileTestCase(ModuleStoreTestCase): class UserProfileTestCase(UrlResetMixin, ModuleStoreTestCase):
TEST_THREAD_TEXT = 'userprofile-test-text' TEST_THREAD_TEXT = 'userprofile-test-text'
TEST_THREAD_ID = 'userprofile-test-thread-id' TEST_THREAD_ID = 'userprofile-test-thread-id'
@patch.dict("django.conf.settings.FEATURES", {"ENABLE_DISCUSSION_SERVICE": True})
def setUp(self): def setUp(self):
super(UserProfileTestCase, self).setUp() super(UserProfileTestCase, self).setUp()
...@@ -1126,14 +1109,15 @@ class UserProfileTestCase(ModuleStoreTestCase): ...@@ -1126,14 +1109,15 @@ class UserProfileTestCase(ModuleStoreTestCase):
mock_request.side_effect = make_mock_request_impl( mock_request.side_effect = make_mock_request_impl(
course=self.course, text=self.TEST_THREAD_TEXT, thread_id=self.TEST_THREAD_ID course=self.course, text=self.TEST_THREAD_TEXT, thread_id=self.TEST_THREAD_ID
) )
request = RequestFactory().get("dummy_url", data=params, **headers) self.client.login(username=self.student.username, password='test')
request.user = self.student
mako_middleware_process_request(request) response = self.client.get(
response = views.user_profile( reverse('user_profile', kwargs={
request, 'course_id': unicode(self.course.id),
self.course.id.to_deprecated_string(), 'user_id': self.profiled_user.id,
self.profiled_user.id }),
data=params,
**headers
) )
mock_request.assert_any_call( mock_request.assert_any_call(
"get", "get",
......
...@@ -7,11 +7,12 @@ from openedx.core.djangoapps.course_groups.tests.helpers import CohortFactory ...@@ -7,11 +7,12 @@ from openedx.core.djangoapps.course_groups.tests.helpers import CohortFactory
from django_comment_common.models import Role from django_comment_common.models import Role
from django_comment_common.utils import seed_permissions_roles from django_comment_common.utils import seed_permissions_roles
from student.tests.factories import CourseEnrollmentFactory, UserFactory from student.tests.factories import CourseEnrollmentFactory, UserFactory
from util.testing import UrlResetMixin
from xmodule.modulestore.tests.factories import CourseFactory from xmodule.modulestore.tests.factories import CourseFactory
from xmodule.modulestore.tests.django_utils import SharedModuleStoreTestCase from xmodule.modulestore.tests.django_utils import SharedModuleStoreTestCase
class CohortedTestCase(SharedModuleStoreTestCase): class CohortedTestCase(UrlResetMixin, SharedModuleStoreTestCase):
""" """
Sets up a course with a student, a moderator and their cohorts. Sets up a course with a student, a moderator and their cohorts.
""" """
......
...@@ -2,6 +2,7 @@ import json ...@@ -2,6 +2,7 @@ import json
from django.contrib.auth.models import AnonymousUser from django.contrib.auth.models import AnonymousUser
from django.core.exceptions import PermissionDenied from django.core.exceptions import PermissionDenied
from django.core.urlresolvers import reverse
from django.http import Http404 from django.http import Http404
from django.test import TestCase from django.test import TestCase
from django.test.client import RequestFactory from django.test.client import RequestFactory
...@@ -11,7 +12,6 @@ from mock import Mock, patch ...@@ -11,7 +12,6 @@ from mock import Mock, patch
from notification_prefs import NOTIFICATION_PREF_KEY from notification_prefs import NOTIFICATION_PREF_KEY
from notification_prefs.views import ajax_enable, ajax_disable, ajax_status, set_subscription, UsernameCipher from notification_prefs.views import ajax_enable, ajax_disable, ajax_status, set_subscription, UsernameCipher
from student.tests.factories import UserFactory from student.tests.factories import UserFactory
from edxmako.tests import mako_middleware_process_request
from openedx.core.djangoapps.user_api.models import UserPreference from openedx.core.djangoapps.user_api.models import UserPreference
from util.testing import UrlResetMixin from util.testing import UrlResetMixin
...@@ -214,11 +214,9 @@ class NotificationPrefViewTest(UrlResetMixin, TestCase): ...@@ -214,11 +214,9 @@ class NotificationPrefViewTest(UrlResetMixin, TestCase):
self.create_prefs() self.create_prefs()
def test_user(user): def test_user(user):
request = self.request_factory.get("dummy") url = reverse('unsubscribe_forum_update', args=[self.tokens[user]])
request.user = AnonymousUser()
mako_middleware_process_request(request) response = self.client.get(url)
response = set_subscription(request, self.tokens[user], subscribe=False)
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
self.assertNotPrefExists(user) self.assertNotPrefExists(user)
...@@ -227,12 +225,10 @@ class NotificationPrefViewTest(UrlResetMixin, TestCase): ...@@ -227,12 +225,10 @@ class NotificationPrefViewTest(UrlResetMixin, TestCase):
def test_unsubscribe_twice(self): def test_unsubscribe_twice(self):
self.create_prefs() self.create_prefs()
request = self.request_factory.get("dummy")
request.user = AnonymousUser()
mako_middleware_process_request(request) url = reverse('unsubscribe_forum_update', args=[self.tokens[self.user]])
set_subscription(request, self.tokens[self.user], False) self.client.get(url)
response = set_subscription(request, self.tokens[self.user], subscribe=False) response = self.client.get(url)
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
self.assertNotPrefExists(self.user) self.assertNotPrefExists(self.user)
...@@ -240,11 +236,8 @@ class NotificationPrefViewTest(UrlResetMixin, TestCase): ...@@ -240,11 +236,8 @@ class NotificationPrefViewTest(UrlResetMixin, TestCase):
def test_user(user): def test_user(user):
# start without a pref key # start without a pref key
self.assertFalse(UserPreference.objects.filter(user=user, key=NOTIFICATION_PREF_KEY)) self.assertFalse(UserPreference.objects.filter(user=user, key=NOTIFICATION_PREF_KEY))
request = self.request_factory.get("dummy") url = reverse('resubscribe_forum_update', args=[self.tokens[user]])
request.user = AnonymousUser() response = self.client.get(url)
mako_middleware_process_request(request)
response = set_subscription(request, self.tokens[user], subscribe=True)
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
self.assertPrefValid(user) self.assertPrefValid(user)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment