Files
edx-platform/lms/djangoapps/course_api/blocks/tests/pacts/views.py
2021-08-24 14:59:46 +05:00

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})