69 lines
2.1 KiB
Python
69 lines
2.1 KiB
Python
"""
|
|
Provider state views needed by pact to setup Provider state for pact verification.
|
|
"""
|
|
import json
|
|
|
|
from django.http import JsonResponse
|
|
from django.views.decorators.csrf import csrf_exempt
|
|
from django.views.decorators.http import require_POST
|
|
from opaque_keys.edx.keys import CourseKey
|
|
from xmodule.modulestore.tests.django_utils import TEST_DATA_SPLIT_MODULESTORE, ModuleStoreIsolationMixin
|
|
from xmodule.modulestore.tests.factories import CourseFactory
|
|
|
|
from common.djangoapps.student.models import CourseEnrollment
|
|
from common.djangoapps.student.tests.factories import CourseEnrollmentFactory
|
|
|
|
|
|
class ProviderState(ModuleStoreIsolationMixin):
|
|
""" Provider State Setup """
|
|
|
|
MODULESTORE = TEST_DATA_SPLIT_MODULESTORE
|
|
|
|
def clean_db(self, user, course_key):
|
|
""" Delete objects from SQL DB and clean mongodb instance """
|
|
|
|
CourseEnrollment.objects.filter(course_id=course_key, user=user).delete()
|
|
|
|
try:
|
|
self.end_modulestore_isolation()
|
|
except IndexError:
|
|
pass
|
|
|
|
def course_setup(self, request):
|
|
""" Setup course data """
|
|
|
|
course_key = CourseKey.from_string('course-v1:edX+DemoX+Demo_Course')
|
|
|
|
self.clean_db(request.user, course_key)
|
|
self.start_modulestore_isolation()
|
|
|
|
demo_course = CourseFactory.create(
|
|
org=course_key.org,
|
|
course=course_key.course,
|
|
run=course_key.run,
|
|
display_name="Demonstration Course",
|
|
modulestore=self.store
|
|
)
|
|
|
|
CourseEnrollmentFactory.create(user=request.user, course_id=demo_course.id)
|
|
|
|
|
|
@csrf_exempt
|
|
@require_POST
|
|
def provider_state(request):
|
|
"""
|
|
Provider state setup view needed by pact verifier.
|
|
"""
|
|
|
|
state_setup_mapping = {
|
|
'Blocks data exists for course_id course-v1:edX+DemoX+Demo_Course': ProviderState().course_setup,
|
|
}
|
|
request_body = json.loads(request.body)
|
|
state = request_body.get('state')
|
|
|
|
if state in state_setup_mapping:
|
|
print('Setting up provider state for state value: {}'.format(state))
|
|
state_setup_mapping[state](request)
|
|
|
|
return JsonResponse({'result': state})
|