diff --git a/common/djangoapps/student/tests/factories.py b/common/djangoapps/student/tests/factories.py index 952a8c016e..0d9621fc01 100644 --- a/common/djangoapps/student/tests/factories.py +++ b/common/djangoapps/student/tests/factories.py @@ -46,9 +46,7 @@ class UserFactory(DjangoModelFactory): date_joined = datetime(2011, 1, 1) -class AdminFactory(Factory): - FACTORY_FOR = User - +class AdminFactory(UserFactory): is_staff = True diff --git a/lms/djangoapps/courseware/tests/factories.py b/lms/djangoapps/courseware/tests/factories.py index df072c015c..af33ba1211 100644 --- a/lms/djangoapps/courseware/tests/factories.py +++ b/lms/djangoapps/courseware/tests/factories.py @@ -1,62 +1,85 @@ -import factory -from student.models import (User, UserProfile, Registration, - CourseEnrollmentAllowed) -from courseware.models import StudentModule -from django.contrib.auth.models import Group from datetime import datetime -import uuid +import json +from functools import partial + +from factory import DjangoModelFactory, SubFactory +from student.tests.factories import UserFactory as StudentUserFactory +from student.tests.factories import GroupFactory as StudentGroupFactory +from student.tests.factories import UserProfileFactory as StudentUserProfileFactory +from student.tests.factories import CourseEnrollmentAllowedFactory as StudentCourseEnrollmentAllowedFactory +from student.tests.factories import RegistrationFactory as StudentRegistrationFactory +from courseware.models import StudentModule, XModuleContentField, XModuleSettingsField +from courseware.models import XModuleStudentInfoField, XModuleStudentPrefsField + +from xmodule.modulestore import Location + +location = partial(Location, 'i4x', 'edX', 'test_course', 'problem') -class UserProfileFactory(factory.Factory): - FACTORY_FOR = UserProfile - - user = None +class UserProfileFactory(StudentUserProfileFactory): name = 'Robot Studio' courseware = 'course.xml' -class RegistrationFactory(factory.Factory): - FACTORY_FOR = Registration - - user = None - activation_key = uuid.uuid4().hex +class RegistrationFactory(StudentRegistrationFactory): + pass -class UserFactory(factory.Factory): - FACTORY_FOR = User - - username = 'robot' +class UserFactory(StudentUserFactory): email = 'robot@edx.org' - password = 'test' - first_name = 'Robot' last_name = 'Tester' - is_staff = False - is_active = True - is_superuser = False last_login = datetime.now() date_joined = datetime.now() -class GroupFactory(factory.Factory): - FACTORY_FOR = Group - +class GroupFactory(StudentGroupFactory): name = 'test_group' -class CourseEnrollmentAllowedFactory(factory.Factory): - FACTORY_FOR = CourseEnrollmentAllowed - - email = 'test@edx.org' - course_id = 'edX/test/2012_Fall' +class CourseEnrollmentAllowedFactory(StudentCourseEnrollmentAllowedFactory): + pass -class StudentModuleFactory(factory.Factory): +class StudentModuleFactory(DjangoModelFactory): FACTORY_FOR = StudentModule module_type = "problem" - student = factory.SubFactory(UserFactory) + student = SubFactory(UserFactory) course_id = "MITx/999/Robot_Super_Course" state = None grade = None max_grade = None done = 'na' + + +class ContentFactory(DjangoModelFactory): + FACTORY_FOR = XModuleContentField + + field_name = 'existing_field' + value = json.dumps('old_value') + definition_id = location('def_id').url() + + +class SettingsFactory(DjangoModelFactory): + FACTORY_FOR = XModuleSettingsField + + field_name = 'existing_field' + value = json.dumps('old_value') + usage_id = '%s-%s' % ('edX/test_course/test', location('def_id').url()) + + +class StudentPrefsFactory(DjangoModelFactory): + FACTORY_FOR = XModuleStudentPrefsField + + field_name = 'existing_field' + value = json.dumps('old_value') + student = SubFactory(UserFactory) + module_type = 'problem' + + +class StudentInfoFactory(DjangoModelFactory): + FACTORY_FOR = XModuleStudentInfoField + + field_name = 'existing_field' + value = json.dumps('old_value') + student = SubFactory(UserFactory) diff --git a/lms/djangoapps/courseware/tests/test_model_data.py b/lms/djangoapps/courseware/tests/test_model_data.py index 65eaa5a4bd..0966fb1aeb 100644 --- a/lms/djangoapps/courseware/tests/test_model_data.py +++ b/lms/djangoapps/courseware/tests/test_model_data.py @@ -1,15 +1,19 @@ -import factory import json from mock import Mock -from django.contrib.auth.models import User - from functools import partial -from courseware.model_data import LmsKeyValueStore, InvalidWriteError, InvalidScopeError, ModelDataCache -from courseware.models import StudentModule, XModuleContentField, XModuleSettingsField, XModuleStudentInfoField, XModuleStudentPrefsField +from courseware.model_data import LmsKeyValueStore, InvalidWriteError +from courseware.model_data import InvalidScopeError, ModelDataCache +from courseware.models import StudentModule, XModuleContentField, XModuleSettingsField +from courseware.models import XModuleStudentInfoField, XModuleStudentPrefsField + +from student.tests.factories import UserFactory +from courseware.tests.factories import StudentModuleFactory as cmfStudentModuleFactory +from courseware.tests.factories import ContentFactory, SettingsFactory +from courseware.tests.factories import StudentPrefsFactory, StudentInfoFactory + from xblock.core import Scope, BlockScope from xmodule.modulestore import Location - from django.test import TestCase @@ -19,6 +23,7 @@ def mock_field(scope, name): field.name = name return field + def mock_descriptor(fields=[], lms_fields=[]): descriptor = Mock() descriptor.stores_state = True @@ -37,53 +42,9 @@ prefs_key = partial(LmsKeyValueStore.Key, Scope.preferences, 'user', 'problem') user_info_key = partial(LmsKeyValueStore.Key, Scope.user_info, 'user', None) -class UserFactory(factory.Factory): - FACTORY_FOR = User - - username = 'user' - - -class StudentModuleFactory(factory.Factory): - FACTORY_FOR = StudentModule - - module_type = 'problem' +class StudentModuleFactory(cmfStudentModuleFactory): module_state_key = location('def_id').url() - student = factory.SubFactory(UserFactory) course_id = course_id - state = None - - -class ContentFactory(factory.Factory): - FACTORY_FOR = XModuleContentField - - field_name = 'existing_field' - value = json.dumps('old_value') - definition_id = location('def_id').url() - - -class SettingsFactory(factory.Factory): - FACTORY_FOR = XModuleSettingsField - - field_name = 'existing_field' - value = json.dumps('old_value') - usage_id = '%s-%s' % (course_id, location('def_id').url()) - - -class StudentPrefsFactory(factory.Factory): - FACTORY_FOR = XModuleStudentPrefsField - - field_name = 'existing_field' - value = json.dumps('old_value') - student = factory.SubFactory(UserFactory) - module_type = 'problem' - - -class StudentInfoFactory(factory.Factory): - FACTORY_FOR = XModuleStudentInfoField - - field_name = 'existing_field' - value = json.dumps('old_value') - student = factory.SubFactory(UserFactory) class TestDescriptorFallback(TestCase): @@ -114,7 +75,7 @@ class TestDescriptorFallback(TestCase): class TestInvalidScopes(TestCase): def setUp(self): self.desc_md = {} - self.user = UserFactory.create() + self.user = UserFactory.create(username='user') self.mdc = ModelDataCache([mock_descriptor([mock_field(Scope.user_state, 'a_field')])], course_id, self.user) self.kvs = LmsKeyValueStore(self.desc_md, self.mdc) @@ -180,7 +141,7 @@ class TestStudentModuleStorage(TestCase): class TestMissingStudentModule(TestCase): def setUp(self): - self.user = UserFactory.create() + self.user = UserFactory.create(username='user') self.desc_md = {} self.mdc = ModelDataCache([mock_descriptor()], course_id, self.user) self.kvs = LmsKeyValueStore(self.desc_md, self.mdc) diff --git a/lms/djangoapps/django_comment_client/tests/test_utils.py b/lms/djangoapps/django_comment_client/tests/test_utils.py index cec006e630..80b8419d5a 100644 --- a/lms/djangoapps/django_comment_client/tests/test_utils.py +++ b/lms/djangoapps/django_comment_client/tests/test_utils.py @@ -1,42 +1,18 @@ -import string -import random -import collections - from django.test import TestCase +from factory import DjangoModelFactory +from student.tests.factories import UserFactory, CourseEnrollmentFactory -import factory -from django.contrib.auth.models import User -from student.models import UserProfile, CourseEnrollment from django_comment_client.models import Role, Permission - -import django_comment_client.models as models import django_comment_client.utils as utils -import xmodule.modulestore.django as django - -class UserFactory(factory.Factory): - FACTORY_FOR = User - username = 'robot' - password = '123456' - email = 'robot@edx.org' - is_active = True - is_staff = False - - -class CourseEnrollmentFactory(factory.Factory): - FACTORY_FOR = CourseEnrollment - user = factory.SubFactory(UserFactory) - course_id = 'edX/toy/2012_Fall' - - -class RoleFactory(factory.Factory): +class RoleFactory(DjangoModelFactory): FACTORY_FOR = Role name = 'Student' course_id = 'edX/toy/2012_Fall' -class PermissionFactory(factory.Factory): +class PermissionFactory(DjangoModelFactory): FACTORY_FOR = Permission name = 'create_comment' diff --git a/lms/djangoapps/licenses/tests.py b/lms/djangoapps/licenses/tests.py index 5cf5e44dde..151a0faa9d 100644 --- a/lms/djangoapps/licenses/tests.py +++ b/lms/djangoapps/licenses/tests.py @@ -5,15 +5,19 @@ import json from uuid import uuid4 from random import shuffle from tempfile import NamedTemporaryFile -from factory import Factory, SubFactory +from factory import DjangoModelFactory, SubFactory from django.test import TestCase +from django.test.client import Client from django.test.utils import override_settings from django.core.management import call_command from django.core.urlresolvers import reverse +from nose.tools import assert_true + from courseware.tests.tests import TEST_DATA_MONGO_MODULESTORE from licenses.models import CourseSoftware, UserLicense -from courseware.tests.tests import LoginEnrollmentTestCase, get_user + +from student.tests.factories import UserFactory from xmodule.modulestore.tests.factories import CourseFactory from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase @@ -27,7 +31,7 @@ SERIAL_1 = '123456abcde' log = logging.getLogger(__name__) -class CourseSoftwareFactory(Factory): +class CourseSoftwareFactory(DjangoModelFactory): '''Factory for generating CourseSoftware objects in database''' FACTORY_FOR = CourseSoftware @@ -37,7 +41,7 @@ class CourseSoftwareFactory(Factory): course_id = COURSE_1 -class UserLicenseFactory(Factory): +class UserLicenseFactory(DjangoModelFactory): ''' Factory for generating UserLicense objects in database @@ -46,19 +50,24 @@ class UserLicenseFactory(Factory): ''' FACTORY_FOR = UserLicense + user = None software = SubFactory(CourseSoftwareFactory) serial = SERIAL_1 -class LicenseTestCase(LoginEnrollmentTestCase): +class LicenseTestCase(TestCase): '''Tests for licenses.views''' def setUp(self): '''creates a user and logs in''' - self.setup_viewtest_user() + # self.setup_viewtest_user() + self.user = UserFactory(username='test', + email='test@edx.org', password='test_password') + self.client = Client() + assert_true(self.client.login(username='test', password='test_password')) self.software = CourseSoftwareFactory() def test_get_license(self): - UserLicenseFactory(user=get_user(self.viewtest_email), software=self.software) + UserLicenseFactory(user=self.user, software=self.software) response = self.client.post(reverse('user_software_license'), {'software': SOFTWARE_1, 'generate': 'false'}, HTTP_X_REQUESTED_WITH='XMLHttpRequest', @@ -125,7 +134,7 @@ class LicenseTestCase(LoginEnrollmentTestCase): self.assertEqual(404, response.status_code) def test_get_license_without_login(self): - self.logout() + self.client.logout() response = self.client.post(reverse('user_software_license'), {'software': SOFTWARE_1, 'generate': 'false'}, HTTP_X_REQUESTED_WITH='XMLHttpRequest',