87 lines
2.8 KiB
Python
87 lines
2.8 KiB
Python
# pylint: disable=C0111
|
|
# pylint: disable=W0621
|
|
|
|
from lettuce import world
|
|
from .factories import *
|
|
from django.conf import settings
|
|
from django.http import HttpRequest
|
|
from django.contrib.auth.models import User
|
|
from django.contrib.auth import authenticate, login
|
|
from django.contrib.auth.middleware import AuthenticationMiddleware
|
|
from django.contrib.sessions.middleware import SessionMiddleware
|
|
from student.models import CourseEnrollment
|
|
from xmodule.modulestore.django import modulestore
|
|
from xmodule.contentstore.django import contentstore
|
|
from urllib import quote_plus
|
|
|
|
|
|
@world.absorb
|
|
def create_user(uname, password):
|
|
|
|
# If the user already exists, don't try to create it again
|
|
if len(User.objects.filter(username=uname)) > 0:
|
|
return
|
|
|
|
portal_user = UserFactory.build(username=uname, email=uname + '@edx.org')
|
|
portal_user.set_password(password)
|
|
portal_user.save()
|
|
|
|
registration = world.RegistrationFactory(user=portal_user)
|
|
registration.register(portal_user)
|
|
registration.activate()
|
|
|
|
user_profile = world.UserProfileFactory(user=portal_user)
|
|
|
|
|
|
@world.absorb
|
|
def log_in(username, password):
|
|
"""
|
|
Log the user in programatically.
|
|
This will delete any existing cookies to ensure that the user
|
|
logs in to the correct session.
|
|
"""
|
|
|
|
# Authenticate the user
|
|
world.scenario_dict['USER'] = authenticate(username=username, password=password)
|
|
assert(world.scenario_dict['USER'] is not None and world.scenario_dict['USER'].is_active)
|
|
|
|
# Send a fake HttpRequest to log the user in
|
|
# We need to process the request using
|
|
# Session middleware and Authentication middleware
|
|
# to ensure that session state can be stored
|
|
request = HttpRequest()
|
|
SessionMiddleware().process_request(request)
|
|
AuthenticationMiddleware().process_request(request)
|
|
login(request, world.scenario_dict['USER'])
|
|
|
|
# Save the session
|
|
request.session.save()
|
|
|
|
# Retrieve the sessionid and add it to the browser's cookies
|
|
cookie_dict = {settings.SESSION_COOKIE_NAME: request.session.session_key}
|
|
world.browser.cookies.delete()
|
|
world.browser.cookies.add(cookie_dict)
|
|
|
|
|
|
@world.absorb
|
|
def register_by_course_id(course_id, is_staff=False):
|
|
create_user('robot', 'password')
|
|
u = User.objects.get(username='robot')
|
|
if is_staff:
|
|
u.is_staff = True
|
|
u.save()
|
|
CourseEnrollment.objects.get_or_create(user=u, course_id=course_id)
|
|
|
|
|
|
@world.absorb
|
|
def clear_courses():
|
|
# Flush and initialize the module store
|
|
# It needs the templates because it creates new records
|
|
# by cloning from the template.
|
|
# Note that if your test module gets in some weird state
|
|
# (though it shouldn't), do this manually
|
|
# from the bash shell to drop it:
|
|
# $ mongo test_xmodule --eval "db.dropDatabase()"
|
|
modulestore().collection.drop()
|
|
contentstore().fs_files.drop()
|