Commit 9366c43a by J. Cliff Dyer

Fix issues with RequestFactory used as Request.

* Centralize creation of quick request objects.
* Isolate caches to individual tests to prevent test ordering
  dependencies.

TNL-5811
parent 4319a828
...@@ -14,21 +14,6 @@ from openedx.core.djangoapps.content.course_overviews.models import CourseOvervi ...@@ -14,21 +14,6 @@ from openedx.core.djangoapps.content.course_overviews.models import CourseOvervi
from student.models import Registration from student.models import Registration
def get_request_for_user(user):
"""Create a request object for user."""
request = RequestFactory()
request.user = user
request.COOKIES = {}
request.META = {}
request.is_secure = lambda: True
request.get_host = lambda: "edx.org"
request.method = 'GET'
request.GET = {}
request.POST = {}
crum.set_current_request(request)
return request
class LoginEnrollmentTestCase(TestCase): class LoginEnrollmentTestCase(TestCase):
""" """
Provides support for user creation, Provides support for user creation,
......
...@@ -23,9 +23,9 @@ from courseware.courses import ( ...@@ -23,9 +23,9 @@ from courseware.courses import (
get_course_with_access, get_course_with_access,
) )
from courseware.module_render import get_module_for_descriptor from courseware.module_render import get_module_for_descriptor
from courseware.tests.helpers import get_request_for_user
from courseware.model_data import FieldDataCache from courseware.model_data import FieldDataCache
from lms.djangoapps.courseware.courseware_access_exception import CoursewareAccessException from lms.djangoapps.courseware.courseware_access_exception import CoursewareAccessException
from openedx.core.djangolib.testing.utils import get_mock_request
from openedx.core.lib.courses import course_image_url from openedx.core.lib.courses import course_image_url
from student.tests.factories import UserFactory from student.tests.factories import UserFactory
from xmodule.modulestore.django import _get_modulestore_branch_setting, modulestore from xmodule.modulestore.django import _get_modulestore_branch_setting, modulestore
...@@ -276,7 +276,7 @@ class CoursesRenderTest(ModuleStoreTestCase): ...@@ -276,7 +276,7 @@ class CoursesRenderTest(ModuleStoreTestCase):
course_items = import_course_from_xml(store, self.user.id, TEST_DATA_DIR, ['toy']) course_items = import_course_from_xml(store, self.user.id, TEST_DATA_DIR, ['toy'])
course_key = course_items[0].id course_key = course_items[0].id
self.course = get_course_by_id(course_key) self.course = get_course_by_id(course_key)
self.request = get_request_for_user(UserFactory.create()) self.request = get_mock_request(UserFactory.create())
def test_get_course_info_section_render(self): def test_get_course_info_section_render(self):
# Test render works okay # Test render works okay
......
...@@ -13,7 +13,6 @@ from courseware.module_render import toc_for_course, get_module, handle_xblock_c ...@@ -13,7 +13,6 @@ from courseware.module_render import toc_for_course, get_module, handle_xblock_c
from courseware.tests.factories import UserFactory, InstructorFactory, StaffFactory from courseware.tests.factories import UserFactory, InstructorFactory, StaffFactory
from courseware.tests.helpers import ( from courseware.tests.helpers import (
LoginEnrollmentTestCase, LoginEnrollmentTestCase,
get_request_for_user
) )
from courseware.entrance_exams import ( from courseware.entrance_exams import (
course_has_entrance_exam, course_has_entrance_exam,
...@@ -22,6 +21,7 @@ from courseware.entrance_exams import ( ...@@ -22,6 +21,7 @@ from courseware.entrance_exams import (
user_can_skip_entrance_exam, user_can_skip_entrance_exam,
user_has_passed_entrance_exam, user_has_passed_entrance_exam,
) )
from openedx.core.djangolib.testing.utils import get_mock_request
from student.models import CourseEnrollment from student.models import CourseEnrollment
from student.tests.factories import CourseEnrollmentFactory, AnonymousUserFactory from student.tests.factories import CourseEnrollmentFactory, AnonymousUserFactory
from util.milestones_helpers import ( from util.milestones_helpers import (
...@@ -141,7 +141,7 @@ class EntranceExamTestCases(LoginEnrollmentTestCase, ModuleStoreTestCase, Milest ...@@ -141,7 +141,7 @@ class EntranceExamTestCases(LoginEnrollmentTestCase, ModuleStoreTestCase, Milest
self.course.entrance_exam_id = unicode(self.entrance_exam.scope_ids.usage_id) self.course.entrance_exam_id = unicode(self.entrance_exam.scope_ids.usage_id)
self.anonymous_user = AnonymousUserFactory() self.anonymous_user = AnonymousUserFactory()
self.request = get_request_for_user(UserFactory()) self.request = get_mock_request(UserFactory())
modulestore().update_item(self.course, self.request.user.id) # pylint: disable=no-member modulestore().update_item(self.course, self.request.user.id) # pylint: disable=no-member
self.client.login(username=self.request.user.username, password="test") self.client.login(username=self.request.user.username, password="test")
......
...@@ -8,7 +8,7 @@ from nose.plugins.attrib import attr ...@@ -8,7 +8,7 @@ from nose.plugins.attrib import attr
from datetime import datetime from datetime import datetime
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.test import TestCase from django.test import TestCase, RequestFactory
from django.utils.timezone import UTC from django.utils.timezone import UTC
from capa.tests.response_xml_factory import OptionResponseXMLFactory from capa.tests.response_xml_factory import OptionResponseXMLFactory
...@@ -20,7 +20,7 @@ from courseware.masquerade import ( ...@@ -20,7 +20,7 @@ from courseware.masquerade import (
get_masquerading_group_info get_masquerading_group_info
) )
from courseware.tests.factories import StaffFactory from courseware.tests.factories import StaffFactory
from courseware.tests.helpers import LoginEnrollmentTestCase, get_request_for_user from courseware.tests.helpers import LoginEnrollmentTestCase
from courseware.tests.test_submitting_problems import ProblemSubmissionTestMixin from courseware.tests.test_submitting_problems import ProblemSubmissionTestMixin
from student.tests.factories import UserFactory from student.tests.factories import UserFactory
from xblock.runtime import DictKeyValueStore from xblock.runtime import DictKeyValueStore
...@@ -107,14 +107,13 @@ class MasqueradeTestCase(SharedModuleStoreTestCase, LoginEnrollmentTestCase): ...@@ -107,14 +107,13 @@ class MasqueradeTestCase(SharedModuleStoreTestCase, LoginEnrollmentTestCase):
) )
return self.client.get(url) return self.client.get(url)
def _create_mock_json_request(self, user, body, method='POST', session=None): def _create_mock_json_request(self, user, data, method='POST', session=None):
""" """
Returns a mock JSON request for the specified user Returns a mock JSON request for the specified user
""" """
request = get_request_for_user(user) factory = RequestFactory()
request.method = method request = factory.generic(method, '/', content_type='application/json', data=json.dumps(data))
request.META = {'CONTENT_TYPE': ['application/json']} request.user = user
request.body = body
request.session = session or {} request.session = session or {}
return request return request
...@@ -408,10 +407,11 @@ class TestGetMasqueradingGroupId(StaffMasqueradeTestCase): ...@@ -408,10 +407,11 @@ class TestGetMasqueradingGroupId(StaffMasqueradeTestCase):
# Install a masquerading group # Install a masquerading group
request = self._create_mock_json_request( request = self._create_mock_json_request(
self.test_user, self.test_user,
body='{"role": "student", "user_partition_id": 0, "group_id": 1}' data={"role": "student", "user_partition_id": 0, "group_id": 1}
) )
handle_ajax(request, unicode(self.course.id)) response = handle_ajax(request, unicode(self.course.id))
setup_masquerade(request, self.test_user, True) self.assertEquals(response.status_code, 200)
setup_masquerade(request, self.course.id, True)
# Verify that the masquerading group is returned # Verify that the masquerading group is returned
group_id, user_partition_id = get_masquerading_group_info(self.test_user, self.course.id) group_id, user_partition_id = get_masquerading_group_info(self.test_user, self.course.id)
......
...@@ -12,9 +12,10 @@ from courseware.tabs import ( ...@@ -12,9 +12,10 @@ from courseware.tabs import (
get_course_tab_list, CoursewareTab, CourseInfoTab, ProgressTab, get_course_tab_list, CoursewareTab, CourseInfoTab, ProgressTab,
ExternalDiscussionCourseTab, ExternalLinkCourseTab ExternalDiscussionCourseTab, ExternalLinkCourseTab
) )
from courseware.tests.helpers import get_request_for_user, LoginEnrollmentTestCase from courseware.tests.helpers import LoginEnrollmentTestCase
from courseware.tests.factories import InstructorFactory, StaffFactory from courseware.tests.factories import InstructorFactory, StaffFactory
from courseware.views.views import get_static_tab_contents, static_tab from courseware.views.views import get_static_tab_contents, static_tab
from openedx.core.djangolib.testing.utils import get_mock_request
from student.models import CourseEnrollment from student.models import CourseEnrollment
from student.tests.factories import UserFactory from student.tests.factories import UserFactory
from util.milestones_helpers import ( from util.milestones_helpers import (
...@@ -255,14 +256,14 @@ class StaticTabDateTestCase(LoginEnrollmentTestCase, SharedModuleStoreTestCase): ...@@ -255,14 +256,14 @@ class StaticTabDateTestCase(LoginEnrollmentTestCase, SharedModuleStoreTestCase):
def test_invalid_course_key(self): def test_invalid_course_key(self):
self.setup_user() self.setup_user()
request = get_request_for_user(self.user) request = get_mock_request(self.user)
with self.assertRaises(Http404): with self.assertRaises(Http404):
static_tab(request, course_id='edX/toy', tab_slug='new_tab') static_tab(request, course_id='edX/toy', tab_slug='new_tab')
def test_get_static_tab_contents(self): def test_get_static_tab_contents(self):
self.setup_user() self.setup_user()
course = get_course_by_id(self.course.id) course = get_course_by_id(self.course.id)
request = get_request_for_user(self.user) request = get_mock_request(self.user)
tab = xmodule_tabs.CourseTabList.get_tab_by_slug(course.tabs, 'new_tab') tab = xmodule_tabs.CourseTabList.get_tab_by_slug(course.tabs, 'new_tab')
# Test render works okay # Test render works okay
...@@ -379,7 +380,7 @@ class EntranceExamsTabsTestCase(LoginEnrollmentTestCase, ModuleStoreTestCase, Mi ...@@ -379,7 +380,7 @@ class EntranceExamsTabsTestCase(LoginEnrollmentTestCase, ModuleStoreTestCase, Mi
'description': 'Testing Courseware Tabs' 'description': 'Testing Courseware Tabs'
} }
self.user.is_staff = False self.user.is_staff = False
request = get_request_for_user(self.user) request = get_mock_request(self.user)
self.course.entrance_exam_enabled = True self.course.entrance_exam_enabled = True
self.course.entrance_exam_id = unicode(entrance_exam.location) self.course.entrance_exam_id = unicode(entrance_exam.location)
milestone = add_milestone(milestone) milestone = add_milestone(milestone)
...@@ -419,7 +420,7 @@ class EntranceExamsTabsTestCase(LoginEnrollmentTestCase, ModuleStoreTestCase, Mi ...@@ -419,7 +420,7 @@ class EntranceExamsTabsTestCase(LoginEnrollmentTestCase, ModuleStoreTestCase, Mi
# log in again as student # log in again as student
self.client.logout() self.client.logout()
self.login(self.email, self.password) self.login(self.email, self.password)
request = get_request_for_user(self.user) request = get_mock_request(self.user)
course_tab_list = get_course_tab_list(request, self.course) course_tab_list = get_course_tab_list(request, self.course)
self.assertEqual(len(course_tab_list), 5) self.assertEqual(len(course_tab_list), 5)
...@@ -432,7 +433,7 @@ class EntranceExamsTabsTestCase(LoginEnrollmentTestCase, ModuleStoreTestCase, Mi ...@@ -432,7 +433,7 @@ class EntranceExamsTabsTestCase(LoginEnrollmentTestCase, ModuleStoreTestCase, Mi
self.client.logout() self.client.logout()
staff_user = StaffFactory(course_key=self.course.id) staff_user = StaffFactory(course_key=self.course.id)
self.client.login(username=staff_user.username, password='test') self.client.login(username=staff_user.username, password='test')
request = get_request_for_user(staff_user) request = get_mock_request(staff_user)
course_tab_list = get_course_tab_list(request, self.course) course_tab_list = get_course_tab_list(request, self.course)
self.assertEqual(len(course_tab_list), 5) self.assertEqual(len(course_tab_list), 5)
...@@ -474,7 +475,7 @@ class TextBookCourseViewsTestCase(LoginEnrollmentTestCase, SharedModuleStoreTest ...@@ -474,7 +475,7 @@ class TextBookCourseViewsTestCase(LoginEnrollmentTestCase, SharedModuleStoreTest
Test that all textbooks tab links generating correctly. Test that all textbooks tab links generating correctly.
""" """
type_to_reverse_name = {'textbook': 'book', 'pdftextbook': 'pdf_book', 'htmltextbook': 'html_book'} type_to_reverse_name = {'textbook': 'book', 'pdftextbook': 'pdf_book', 'htmltextbook': 'html_book'}
request = get_request_for_user(self.user) request = get_mock_request(self.user)
course_tab_list = get_course_tab_list(request, self.course) course_tab_list = get_course_tab_list(request, self.course)
num_of_textbooks_found = 0 num_of_textbooks_found = 0
for tab in course_tab_list: for tab in course_tab_list:
...@@ -699,7 +700,7 @@ class CourseTabListTestCase(TabListTestCase): ...@@ -699,7 +700,7 @@ class CourseTabListTestCase(TabListTestCase):
self.course.save() self.course.save()
user = self.create_mock_user(is_authenticated=True, is_staff=False, is_enrolled=True) user = self.create_mock_user(is_authenticated=True, is_staff=False, is_enrolled=True)
request = get_request_for_user(user) request = get_mock_request(user)
course_tab_list = get_course_tab_list(request, self.course) course_tab_list = get_course_tab_list(request, self.course)
name_list = [x.name for x in course_tab_list] name_list = [x.name for x in course_tab_list]
self.assertIn('Static Tab Free', name_list) self.assertIn('Static Tab Free', name_list)
...@@ -709,7 +710,7 @@ class CourseTabListTestCase(TabListTestCase): ...@@ -709,7 +710,7 @@ class CourseTabListTestCase(TabListTestCase):
self.client.logout() self.client.logout()
staff_user = StaffFactory(course_key=self.course.id) staff_user = StaffFactory(course_key=self.course.id)
self.client.login(username=staff_user.username, password='test') self.client.login(username=staff_user.username, password='test')
request = get_request_for_user(staff_user) request = get_mock_request(staff_user)
course_tab_list_staff = get_course_tab_list(request, self.course) course_tab_list_staff = get_course_tab_list(request, self.course)
name_list_staff = [x.name for x in course_tab_list_staff] name_list_staff = [x.name for x in course_tab_list_staff]
self.assertIn('Static Tab Free', name_list_staff) self.assertIn('Static Tab Free', name_list_staff)
......
...@@ -91,7 +91,6 @@ class TestGetXBlockParent(GatingTestCase): ...@@ -91,7 +91,6 @@ class TestGetXBlockParent(GatingTestCase):
def test_get_parent_with_category(self): def test_get_parent_with_category(self):
""" Test test_get_parent_of_category """ """ Test test_get_parent_of_category """
result = _get_xblock_parent(self.vert1, 'sequential') result = _get_xblock_parent(self.vert1, 'sequential')
self.assertEqual(result.location, self.seq1.location) self.assertEqual(result.location, self.seq1.location)
result = _get_xblock_parent(self.vert1, 'chapter') result = _get_xblock_parent(self.vert1, 'chapter')
......
...@@ -11,11 +11,10 @@ from opaque_keys.edx.locations import SlashSeparatedCourseKey ...@@ -11,11 +11,10 @@ from opaque_keys.edx.locations import SlashSeparatedCourseKey
from capa.tests.response_xml_factory import MultipleChoiceResponseXMLFactory from capa.tests.response_xml_factory import MultipleChoiceResponseXMLFactory
from courseware.model_data import set_score from courseware.model_data import set_score
from courseware.tests.helpers import ( from courseware.tests.helpers import LoginEnrollmentTestCase
LoginEnrollmentTestCase,
get_request_for_user
)
from lms.djangoapps.course_blocks.api import get_course_blocks from lms.djangoapps.course_blocks.api import get_course_blocks
from openedx.core.djangolib.testing.utils import get_mock_request
from student.tests.factories import UserFactory from student.tests.factories import UserFactory
from student.models import CourseEnrollment from student.models import CourseEnrollment
from xmodule.block_metadata_utils import display_name_with_default_escaped from xmodule.block_metadata_utils import display_name_with_default_escaped
...@@ -185,7 +184,7 @@ class TestWeightedProblems(SharedModuleStoreTestCase): ...@@ -185,7 +184,7 @@ class TestWeightedProblems(SharedModuleStoreTestCase):
def setUp(self): def setUp(self):
super(TestWeightedProblems, self).setUp() super(TestWeightedProblems, self).setUp()
self.user = UserFactory() self.user = UserFactory()
self.request = get_request_for_user(self.user) self.request = get_mock_request(self.user)
def _verify_grades(self, raw_earned, raw_possible, weight, expected_score): def _verify_grades(self, raw_earned, raw_possible, weight, expected_score):
""" """
...@@ -287,7 +286,7 @@ class TestScoreForModule(SharedModuleStoreTestCase): ...@@ -287,7 +286,7 @@ class TestScoreForModule(SharedModuleStoreTestCase):
cls.m = ItemFactory.create(parent=cls.f, category="html", display_name="m") cls.m = ItemFactory.create(parent=cls.f, category="html", display_name="m")
cls.n = ItemFactory.create(parent=cls.g, category="problem", display_name="n") cls.n = ItemFactory.create(parent=cls.g, category="problem", display_name="n")
cls.request = get_request_for_user(UserFactory()) cls.request = get_mock_request(UserFactory())
CourseEnrollment.enroll(cls.request.user, cls.course.id) CourseEnrollment.enroll(cls.request.user, cls.course.id)
answer_problem(cls.course, cls.request, cls.h, score=2, max_value=5) answer_problem(cls.course, cls.request, cls.h, score=2, max_value=5)
...@@ -449,7 +448,7 @@ class TestGetModuleScore(LoginEnrollmentTestCase, SharedModuleStoreTestCase): ...@@ -449,7 +448,7 @@ class TestGetModuleScore(LoginEnrollmentTestCase, SharedModuleStoreTestCase):
""" """
super(TestGetModuleScore, self).setUp() super(TestGetModuleScore, self).setUp()
self.request = get_request_for_user(UserFactory()) self.request = get_mock_request(UserFactory())
self.client.login(username=self.request.user.username, password="test") self.client.login(username=self.request.user.username, password="test")
CourseEnrollment.enroll(self.request.user, self.course.id) CourseEnrollment.enroll(self.request.user, self.course.id)
......
...@@ -14,10 +14,10 @@ from mock import patch ...@@ -14,10 +14,10 @@ from mock import patch
import pytz import pytz
from capa.tests.response_xml_factory import MultipleChoiceResponseXMLFactory from capa.tests.response_xml_factory import MultipleChoiceResponseXMLFactory
from courseware.tests.helpers import get_request_for_user
from courseware.tests.test_submitting_problems import ProblemSubmissionTestMixin from courseware.tests.test_submitting_problems import ProblemSubmissionTestMixin
from lms.djangoapps.course_blocks.api import get_course_blocks from lms.djangoapps.course_blocks.api import get_course_blocks
from lms.djangoapps.grades.config.tests.utils import persistent_grades_feature_flags from lms.djangoapps.grades.config.tests.utils import persistent_grades_feature_flags
from openedx.core.djangolib.testing.utils import get_mock_request
from student.models import CourseEnrollment from student.models import CourseEnrollment
from student.tests.factories import UserFactory from student.tests.factories import UserFactory
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase, SharedModuleStoreTestCase from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase, SharedModuleStoreTestCase
...@@ -70,7 +70,7 @@ class GradeTestBase(SharedModuleStoreTestCase): ...@@ -70,7 +70,7 @@ class GradeTestBase(SharedModuleStoreTestCase):
def setUp(self): def setUp(self):
super(GradeTestBase, self).setUp() super(GradeTestBase, self).setUp()
self.request = get_request_for_user(UserFactory()) self.request = get_mock_request(UserFactory())
self.client.login(username=self.request.user.username, password="test") self.client.login(username=self.request.user.username, password="test")
self.course_structure = get_course_blocks(self.request.user, self.course.location) self.course_structure = get_course_blocks(self.request.user, self.course.location)
self.subsection_grade_factory = SubsectionGradeFactory(self.request.user, self.course, self.course_structure) self.subsection_grade_factory = SubsectionGradeFactory(self.request.user, self.course, self.course_structure)
...@@ -321,7 +321,7 @@ class TestMultipleProblemTypesSubsectionScores(SharedModuleStoreTestCase): ...@@ -321,7 +321,7 @@ class TestMultipleProblemTypesSubsectionScores(SharedModuleStoreTestCase):
password = u'test' password = u'test'
self.student = UserFactory.create(is_staff=False, username=u'test_student', password=password) self.student = UserFactory.create(is_staff=False, username=u'test_student', password=password)
self.client.login(username=self.student.username, password=password) self.client.login(username=self.student.username, password=password)
self.request = get_request_for_user(self.student) self.request = get_mock_request(self.student)
self.course_structure = get_course_blocks(self.student, self.course.location) self.course_structure = get_course_blocks(self.student, self.course.location)
@classmethod @classmethod
...@@ -411,7 +411,7 @@ class TestVariedMetadata(ProblemSubmissionTestMixin, ModuleStoreTestCase): ...@@ -411,7 +411,7 @@ class TestVariedMetadata(ProblemSubmissionTestMixin, ModuleStoreTestCase):
</optionresponse> </optionresponse>
</problem> </problem>
''' '''
self.request = get_request_for_user(UserFactory()) self.request = get_mock_request(UserFactory())
self.client.login(username=self.request.user.username, password="test") self.client.login(username=self.request.user.username, password="test")
CourseEnrollment.enroll(self.request.user, self.course.id) CourseEnrollment.enroll(self.request.user, self.course.id)
course_structure = get_course_blocks(self.request.user, self.course.location) course_structure = get_course_blocks(self.request.user, self.course.location)
...@@ -549,7 +549,7 @@ class TestCourseGradeLogging(ProblemSubmissionTestMixin, SharedModuleStoreTestCa ...@@ -549,7 +549,7 @@ class TestCourseGradeLogging(ProblemSubmissionTestMixin, SharedModuleStoreTestCa
display_name="test_problem_3", display_name="test_problem_3",
data=problem_xml data=problem_xml
) )
self.request = get_request_for_user(UserFactory()) self.request = get_mock_request(UserFactory())
self.client.login(username=self.request.user.username, password="test") self.client.login(username=self.request.user.username, password="test")
self.course_structure = get_course_blocks(self.request.user, self.course.location) self.course_structure = get_course_blocks(self.request.user, self.course.location)
self.subsection_grade_factory = SubsectionGradeFactory(self.request.user, self.course, self.course_structure) self.subsection_grade_factory = SubsectionGradeFactory(self.request.user, self.course, self.course_structure)
......
...@@ -3,31 +3,24 @@ ...@@ -3,31 +3,24 @@
Unit tests for instructor.enrollment methods. Unit tests for instructor.enrollment methods.
""" """
import json
import mock
from mock import patch
from abc import ABCMeta from abc import ABCMeta
from courseware.models import StudentModule import json
from courseware.tests.helpers import get_request_for_user
from django.conf import settings from django.conf import settings
from django.utils.translation import get_language from django.utils.translation import get_language
from django.utils.translation import override as override_language from django.utils.translation import override as override_language
import mock
from mock import patch
from nose.plugins.attrib import attr from nose.plugins.attrib import attr
from ccx_keys.locator import CCXLocator from opaque_keys.edx.locations import SlashSeparatedCourseKey
from student.tests.factories import UserFactory
from xmodule.modulestore.tests.factories import CourseFactory, ItemFactory
from capa.tests.response_xml_factory import MultipleChoiceResponseXMLFactory from capa.tests.response_xml_factory import MultipleChoiceResponseXMLFactory
from ccx_keys.locator import CCXLocator
from courseware.models import StudentModule
from grades.new.subsection_grade import SubsectionGradeFactory from grades.new.subsection_grade import SubsectionGradeFactory
from grades.tests.utils import answer_problem from grades.tests.utils import answer_problem
from lms.djangoapps.ccx.tests.factories import CcxFactory from lms.djangoapps.ccx.tests.factories import CcxFactory
from lms.djangoapps.course_blocks.api import get_course_blocks from lms.djangoapps.course_blocks.api import get_course_blocks
from openedx.core.djangolib.testing.utils import CacheIsolationTestCase
from student.models import CourseEnrollment, CourseEnrollmentAllowed
from student.roles import CourseCcxCoachRole
from student.tests.factories import (
AdminFactory
)
from lms.djangoapps.instructor.enrollment import ( from lms.djangoapps.instructor.enrollment import (
EmailEnrollmentState, EmailEnrollmentState,
enroll_email, enroll_email,
...@@ -37,11 +30,14 @@ from lms.djangoapps.instructor.enrollment import ( ...@@ -37,11 +30,14 @@ from lms.djangoapps.instructor.enrollment import (
unenroll_email, unenroll_email,
render_message_to_string, render_message_to_string,
) )
from opaque_keys.edx.locations import SlashSeparatedCourseKey from openedx.core.djangolib.testing.utils import CacheIsolationTestCase, get_mock_request
from student.models import CourseEnrollment, CourseEnrollmentAllowed
from student.roles import CourseCcxCoachRole
from student.tests.factories import AdminFactory, UserFactory
from submissions import api as sub_api from submissions import api as sub_api
from student.models import anonymous_id_for_user from student.models import anonymous_id_for_user
from xmodule.modulestore.tests.django_utils import SharedModuleStoreTestCase, TEST_DATA_SPLIT_MODULESTORE from xmodule.modulestore.tests.django_utils import SharedModuleStoreTestCase, TEST_DATA_SPLIT_MODULESTORE
from xmodule.modulestore.tests.factories import CourseFactory, ItemFactory
@attr(shard=1) @attr(shard=1)
...@@ -536,7 +532,7 @@ class TestStudentModuleGrading(SharedModuleStoreTestCase): ...@@ -536,7 +532,7 @@ class TestStudentModuleGrading(SharedModuleStoreTestCase):
display_name="Test Problem", display_name="Test Problem",
data=problem_xml data=problem_xml
) )
cls.request = get_request_for_user(UserFactory()) cls.request = get_mock_request(UserFactory())
cls.user = cls.request.user cls.user = cls.request.user
def _get_subsection_grade_and_verify(self, all_earned, all_possible, graded_earned, graded_possible): def _get_subsection_grade_and_verify(self, all_earned, all_possible, graded_earned, graded_possible):
......
...@@ -19,6 +19,7 @@ from capa.tests.response_xml_factory import OptionResponseXMLFactory ...@@ -19,6 +19,7 @@ from capa.tests.response_xml_factory import OptionResponseXMLFactory
from courseware.model_data import StudentModule from courseware.model_data import StudentModule
from courseware.tests.tests import LoginEnrollmentTestCase from courseware.tests.tests import LoginEnrollmentTestCase
from opaque_keys.edx.locations import Location, SlashSeparatedCourseKey from opaque_keys.edx.locations import Location, SlashSeparatedCourseKey
from openedx.core.djangolib.testing.utils import CacheIsolationTestCase
from openedx.core.lib.url_utils import quote_slashes from openedx.core.lib.url_utils import quote_slashes
from student.tests.factories import CourseEnrollmentFactory, UserFactory from student.tests.factories import CourseEnrollmentFactory, UserFactory
from xmodule.modulestore import ModuleStoreEnum from xmodule.modulestore import ModuleStoreEnum
...@@ -45,7 +46,7 @@ OPTION_1 = 'Option 1' ...@@ -45,7 +46,7 @@ OPTION_1 = 'Option 1'
OPTION_2 = 'Option 2' OPTION_2 = 'Option 2'
class InstructorTaskTestCase(TestCase): class InstructorTaskTestCase(CacheIsolationTestCase):
""" """
Tests API and view methods that involve the reporting of status for background tasks. Tests API and view methods that involve the reporting of status for background tasks.
""" """
......
...@@ -5,8 +5,8 @@ from django.conf import settings ...@@ -5,8 +5,8 @@ from django.conf import settings
from mock import patch from mock import patch
from courseware.access_response import MilestoneError from courseware.access_response import MilestoneError
from courseware.tests.helpers import get_request_for_user
from courseware.tests.test_entrance_exam import answer_entrance_exam_problem, add_entrance_exam_milestone from courseware.tests.test_entrance_exam import answer_entrance_exam_problem, add_entrance_exam_milestone
from openedx.core.djangolib.testing.utils import get_mock_request
from util.milestones_helpers import ( from util.milestones_helpers import (
add_prerequisite_course, add_prerequisite_course,
fulfill_course_milestone, fulfill_course_milestone,
...@@ -115,7 +115,7 @@ class MobileAPIMilestonesMixin(object): ...@@ -115,7 +115,7 @@ class MobileAPIMilestonesMixin(object):
def _pass_entrance_exam(self): def _pass_entrance_exam(self):
""" Helper function to pass the entrance exam """ """ Helper function to pass the entrance exam """
request = get_request_for_user(self.user) request = get_mock_request(self.user)
answer_entrance_exam_problem(self.course, request, self.problem_1) answer_entrance_exam_problem(self.course, request, self.problem_1)
def _verify_unfulfilled_milestone_response(self): def _verify_unfulfilled_milestone_response(self):
......
...@@ -359,13 +359,15 @@ class TestMasqueradedGroup(StaffMasqueradeTestCase): ...@@ -359,13 +359,15 @@ class TestMasqueradedGroup(StaffMasqueradeTestCase):
} }
request = self._create_mock_json_request( request = self._create_mock_json_request(
self.test_user, self.test_user,
body=json.dumps(request_json), data=request_json,
session=self.session session=self.session
) )
handle_ajax(request, unicode(self.course.id)) response = handle_ajax(request, unicode(self.course.id))
# pylint has issues analyzing this class (maybe due to circular imports?)
self.assertEquals(response.status_code, 200) # pylint: disable=no-member
# Now setup the masquerade for the test user # Now setup the masquerade for the test user
setup_masquerade(request, self.test_user, True) setup_masquerade(request, self.course.id, True)
scheme = self.user_partition.scheme scheme = self.user_partition.scheme
self.assertEqual( self.assertEqual(
scheme.get_group_for_user(self.course.id, self.test_user, self.user_partition), scheme.get_group_for_user(self.course.id, self.test_user, self.user_partition),
......
...@@ -14,23 +14,14 @@ from django.test.utils import override_settings ...@@ -14,23 +14,14 @@ from django.test.utils import override_settings
from mock import patch from mock import patch
from nose.plugins.attrib import attr from nose.plugins.attrib import attr
from openedx.core.djangolib.testing.utils import get_mock_request
from student.tests.factories import UserFactory from student.tests.factories import UserFactory
from ..middleware import SafeSessionMiddleware, SafeCookieData from ..middleware import SafeSessionMiddleware, SafeCookieData
from .test_utils import TestSafeSessionsLogMixin from .test_utils import TestSafeSessionsLogMixin
def create_mock_request():
"""
Creates and returns a mock request object for testing.
"""
request = RequestFactory()
request.COOKIES = {}
request.META = {}
request.path = '/'
return request
@attr(shard=2) @attr(shard=2)
class TestSafeSessionProcessRequest(TestSafeSessionsLogMixin, TestCase): class TestSafeSessionProcessRequest(TestSafeSessionsLogMixin, TestCase):
""" """
...@@ -39,7 +30,7 @@ class TestSafeSessionProcessRequest(TestSafeSessionsLogMixin, TestCase): ...@@ -39,7 +30,7 @@ class TestSafeSessionProcessRequest(TestSafeSessionsLogMixin, TestCase):
def setUp(self): def setUp(self):
super(TestSafeSessionProcessRequest, self).setUp() super(TestSafeSessionProcessRequest, self).setUp()
self.user = UserFactory.create() self.user = UserFactory.create()
self.request = create_mock_request() self.request = get_mock_request()
def assert_response(self, safe_cookie_data=None, success=True): def assert_response(self, safe_cookie_data=None, success=True):
""" """
...@@ -141,7 +132,7 @@ class TestSafeSessionProcessResponse(TestSafeSessionsLogMixin, TestCase): ...@@ -141,7 +132,7 @@ class TestSafeSessionProcessResponse(TestSafeSessionsLogMixin, TestCase):
def setUp(self): def setUp(self):
super(TestSafeSessionProcessResponse, self).setUp() super(TestSafeSessionProcessResponse, self).setUp()
self.user = UserFactory.create() self.user = UserFactory.create()
self.request = create_mock_request() self.request = get_mock_request()
self.request.session = {} self.request.session = {}
self.client.response = HttpResponse() self.client.response = HttpResponse()
self.client.response.cookies = SimpleCookie() self.client.response.cookies = SimpleCookie()
...@@ -245,7 +236,7 @@ class TestSafeSessionMiddleware(TestSafeSessionsLogMixin, TestCase): ...@@ -245,7 +236,7 @@ class TestSafeSessionMiddleware(TestSafeSessionsLogMixin, TestCase):
def setUp(self): def setUp(self):
super(TestSafeSessionMiddleware, self).setUp() super(TestSafeSessionMiddleware, self).setUp()
self.user = UserFactory.create() self.user = UserFactory.create()
self.request = create_mock_request() self.request = get_mock_request()
self.client.response = HttpResponse() self.client.response = HttpResponse()
self.client.response.cookies = SimpleCookie() self.client.response.cookies = SimpleCookie()
......
...@@ -11,10 +11,10 @@ from pytz import common_timezones, utc ...@@ -11,10 +11,10 @@ from pytz import common_timezones, utc
from django.conf import settings from django.conf import settings
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.test import TestCase
from django.test.utils import override_settings from django.test.utils import override_settings
from dateutil.parser import parse as parse_datetime from dateutil.parser import parse as parse_datetime
from openedx.core.djangolib.testing.utils import CacheIsolationTestCase
from openedx.core.lib.time_zone_utils import get_display_time_zone from openedx.core.lib.time_zone_utils import get_display_time_zone
from student.tests.factories import UserFactory from student.tests.factories import UserFactory
...@@ -43,7 +43,7 @@ from ...preferences.api import ( ...@@ -43,7 +43,7 @@ from ...preferences.api import (
@attr(shard=2) @attr(shard=2)
@unittest.skipUnless(settings.ROOT_URLCONF == 'lms.urls', 'Account APIs are only supported in LMS') @unittest.skipUnless(settings.ROOT_URLCONF == 'lms.urls', 'Account APIs are only supported in LMS')
class TestPreferenceAPI(TestCase): class TestPreferenceAPI(CacheIsolationTestCase):
""" """
These tests specifically cover the parts of the API methods that are not covered by test_views.py. These tests specifically cover the parts of the API methods that are not covered by test_views.py.
This includes the specific types of error raised, and default behavior when optional arguments This includes the specific types of error raised, and default behavior when optional arguments
...@@ -441,7 +441,7 @@ class UpdateEmailOptInTests(ModuleStoreTestCase): ...@@ -441,7 +441,7 @@ class UpdateEmailOptInTests(ModuleStoreTestCase):
@ddt.ddt @ddt.ddt
class CountryTimeZoneTest(TestCase): class CountryTimeZoneTest(CacheIsolationTestCase):
""" """
Test cases to validate country code api functionality Test cases to validate country code api functionality
""" """
......
"""
Test that testing utils do what they say.
"""
from django.contrib.auth import get_user_model
from django.contrib.auth.models import AnonymousUser
from django.http.request import HttpRequest
from django.test import TestCase
from ..utils import get_mock_request
USER_MODEL = get_user_model()
class TestGetMockRequest(TestCase):
"""
Validate the behavior of get_mock_request
"""
def test_mock_request_is_request(self):
request = get_mock_request(USER_MODEL())
self.assertIsInstance(request, HttpRequest)
def test_user_is_attached_to_mock_request(self):
user = USER_MODEL()
request = get_mock_request(user)
self.assertIs(request.user, user)
def test_mock_request_without_user(self):
request = get_mock_request()
self.assertIsInstance(request.user, AnonymousUser)
...@@ -10,9 +10,11 @@ Utility classes for testing django applications. ...@@ -10,9 +10,11 @@ Utility classes for testing django applications.
import copy import copy
import crum
from django import db from django import db
from django.contrib.auth.models import AnonymousUser
from django.core.cache import caches from django.core.cache import caches
from django.test import TestCase, override_settings from django.test import RequestFactory, TestCase, override_settings
from django.conf import settings from django.conf import settings
from django.contrib import sites from django.contrib import sites
...@@ -158,3 +160,18 @@ class NoseDatabaseIsolation(Plugin): ...@@ -158,3 +160,18 @@ class NoseDatabaseIsolation(Plugin):
""" """
for db_ in db.connections.all(): for db_ in db.connections.all():
db_.close() db_.close()
def get_mock_request(user=None):
"""
Create a request object for the user, if specified.
"""
request = RequestFactory().get('/')
if user is not None:
request.user = user
else:
request.user = AnonymousUser()
request.is_secure = lambda: True
request.get_host = lambda: "edx.org"
crum.set_current_request(request)
return request
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