160 lines
4.7 KiB
Python
160 lines
4.7 KiB
Python
# Factories are self documenting
|
|
# pylint: disable=missing-docstring
|
|
import json
|
|
from functools import partial
|
|
import factory
|
|
from factory.django import DjangoModelFactory
|
|
|
|
# Imported to re-export
|
|
# pylint: disable=unused-import
|
|
from student.tests.factories import UserFactory # Imported to re-export
|
|
# pylint: enable=unused-import
|
|
|
|
from student.tests.factories import UserProfileFactory as StudentUserProfileFactory
|
|
from courseware.models import StudentModule, XModuleUserStateSummaryField
|
|
from courseware.models import XModuleStudentInfoField, XModuleStudentPrefsField
|
|
from student.roles import (
|
|
CourseInstructorRole,
|
|
CourseStaffRole,
|
|
CourseBetaTesterRole,
|
|
GlobalStaff,
|
|
OrgStaffRole,
|
|
OrgInstructorRole,
|
|
)
|
|
|
|
from opaque_keys.edx.locations import SlashSeparatedCourseKey
|
|
|
|
|
|
# TODO fix this (course_id and location are invalid names as constants, and course_id should really be COURSE_KEY)
|
|
# pylint: disable=invalid-name
|
|
course_id = SlashSeparatedCourseKey(u'edX', u'test_course', u'test')
|
|
location = partial(course_id.make_usage_key, u'problem')
|
|
|
|
|
|
class UserProfileFactory(StudentUserProfileFactory):
|
|
courseware = 'course.xml'
|
|
|
|
|
|
# For the following factories, these are disabled because we're ok ignoring the
|
|
# unused arguments create and **kwargs in the line:
|
|
# course_key(self, create, extracted, **kwargs)
|
|
# pylint: disable=unused-argument
|
|
|
|
class InstructorFactory(UserFactory):
|
|
"""
|
|
Given a course Location, returns a User object with instructor
|
|
permissions for `course`.
|
|
"""
|
|
last_name = "Instructor"
|
|
|
|
@factory.post_generation
|
|
def course_key(self, create, extracted, **kwargs):
|
|
if extracted is None:
|
|
raise ValueError("Must specify a CourseKey for a course instructor user")
|
|
CourseInstructorRole(extracted).add_users(self)
|
|
|
|
|
|
class StaffFactory(UserFactory):
|
|
"""
|
|
Given a course Location, returns a User object with staff
|
|
permissions for `course`.
|
|
"""
|
|
last_name = "Staff"
|
|
|
|
@factory.post_generation
|
|
def course_key(self, create, extracted, **kwargs):
|
|
if extracted is None:
|
|
raise ValueError("Must specify a CourseKey for a course staff user")
|
|
CourseStaffRole(extracted).add_users(self)
|
|
|
|
|
|
class BetaTesterFactory(UserFactory):
|
|
"""
|
|
Given a course Location, returns a User object with beta-tester
|
|
permissions for `course`.
|
|
"""
|
|
last_name = "Beta-Tester"
|
|
|
|
@factory.post_generation
|
|
def course_key(self, create, extracted, **kwargs):
|
|
if extracted is None:
|
|
raise ValueError("Must specify a CourseKey for a beta-tester user")
|
|
CourseBetaTesterRole(extracted).add_users(self)
|
|
|
|
|
|
class OrgStaffFactory(UserFactory):
|
|
"""
|
|
Given a course Location, returns a User object with org-staff
|
|
permissions for `course`.
|
|
"""
|
|
last_name = "Org-Staff"
|
|
|
|
@factory.post_generation
|
|
def course_key(self, create, extracted, **kwargs):
|
|
if extracted is None:
|
|
raise ValueError("Must specify a CourseKey for an org-staff user")
|
|
OrgStaffRole(extracted.org).add_users(self)
|
|
|
|
|
|
class OrgInstructorFactory(UserFactory):
|
|
"""
|
|
Given a course Location, returns a User object with org-instructor
|
|
permissions for `course`.
|
|
"""
|
|
last_name = "Org-Instructor"
|
|
|
|
@factory.post_generation
|
|
def course_key(self, create, extracted, **kwargs):
|
|
if extracted is None:
|
|
raise ValueError("Must specify a CourseKey for an org-instructor user")
|
|
OrgInstructorRole(extracted.org).add_users(self)
|
|
|
|
|
|
class GlobalStaffFactory(UserFactory):
|
|
"""
|
|
Returns a User object with global staff access
|
|
"""
|
|
last_name = "GlobalStaff"
|
|
|
|
@factory.post_generation
|
|
def set_staff(self, create, extracted, **kwargs):
|
|
GlobalStaff().add_users(self)
|
|
# pylint: enable=unused-argument
|
|
|
|
|
|
class StudentModuleFactory(DjangoModelFactory):
|
|
FACTORY_FOR = StudentModule
|
|
|
|
module_type = "problem"
|
|
student = factory.SubFactory(UserFactory)
|
|
course_id = SlashSeparatedCourseKey("MITx", "999", "Robot_Super_Course")
|
|
state = None
|
|
grade = None
|
|
max_grade = None
|
|
done = 'na'
|
|
|
|
|
|
class UserStateSummaryFactory(DjangoModelFactory):
|
|
FACTORY_FOR = XModuleUserStateSummaryField
|
|
|
|
field_name = 'existing_field'
|
|
value = json.dumps('old_value')
|
|
usage_id = location('usage_id')
|
|
|
|
|
|
class StudentPrefsFactory(DjangoModelFactory):
|
|
FACTORY_FOR = XModuleStudentPrefsField
|
|
|
|
field_name = 'existing_field'
|
|
value = json.dumps('old_value')
|
|
student = factory.SubFactory(UserFactory)
|
|
module_type = 'mock_problem'
|
|
|
|
|
|
class StudentInfoFactory(DjangoModelFactory):
|
|
FACTORY_FOR = XModuleStudentInfoField
|
|
|
|
field_name = 'existing_field'
|
|
value = json.dumps('old_value')
|
|
student = factory.SubFactory(UserFactory)
|