AA-133 mfe dates banner
- add serializer mixin to expose date banner info - add endpoint to reset deadlines for a sepcific course
This commit is contained in:
0
openedx/features/course_experience/api/__init__.py
Normal file
0
openedx/features/course_experience/api/__init__.py
Normal file
@@ -0,0 +1,31 @@
|
||||
"""
|
||||
Tests for reset deadlines endpoint.
|
||||
"""
|
||||
import ddt
|
||||
|
||||
from django.urls import reverse
|
||||
|
||||
from course_modes.models import CourseMode
|
||||
from lms.djangoapps.course_home_api.tests.utils import BaseCourseHomeTests
|
||||
from student.models import CourseEnrollment
|
||||
|
||||
|
||||
@ddt.ddt
|
||||
class ResetCourseDeadlinesViewTests(BaseCourseHomeTests):
|
||||
"""
|
||||
Tests for reset deadlines endpoint.
|
||||
"""
|
||||
@ddt.data(CourseMode.VERIFIED)
|
||||
def test_reset_deadlines(self, enrollment_mode):
|
||||
CourseEnrollment.enroll(self.user, self.course.id, enrollment_mode)
|
||||
# Test correct post body
|
||||
response = self.client.post(reverse('course-experience-reset-course-deadlines'), {'course_key': self.course.id})
|
||||
self.assertEqual(response.status_code, 200)
|
||||
# Test body with incorrect body param
|
||||
response = self.client.post(reverse('course-experience-reset-course-deadlines'), {'course': self.course.id})
|
||||
self.assertEqual(response.status_code, 400)
|
||||
# Test body with additional incorrect body param
|
||||
response = self.client.post(
|
||||
reverse('course-experience-reset-course-deadlines'), {'course_key': self.course.id, 'invalid': 'value'}
|
||||
)
|
||||
self.assertEqual(response.status_code, 400)
|
||||
19
openedx/features/course_experience/api/v1/urls.py
Normal file
19
openedx/features/course_experience/api/v1/urls.py
Normal file
@@ -0,0 +1,19 @@
|
||||
"""
|
||||
Contains URLs for the Course Experience API
|
||||
"""
|
||||
|
||||
|
||||
from django.urls import re_path
|
||||
|
||||
from openedx.features.course_experience.api.v1.views import reset_course_deadlines
|
||||
|
||||
urlpatterns = []
|
||||
|
||||
# URL for resetting course deadlines
|
||||
urlpatterns += [
|
||||
re_path(
|
||||
r'v1/reset_course_deadlines',
|
||||
reset_course_deadlines,
|
||||
name='course-experience-reset-course-deadlines'
|
||||
),
|
||||
]
|
||||
32
openedx/features/course_experience/api/v1/views.py
Normal file
32
openedx/features/course_experience/api/v1/views.py
Normal file
@@ -0,0 +1,32 @@
|
||||
from rest_framework.decorators import api_view, permission_classes
|
||||
from rest_framework.exceptions import APIException, ParseError
|
||||
from rest_framework.permissions import IsAuthenticated
|
||||
from rest_framework.response import Response
|
||||
|
||||
from openedx.core.djangoapps.schedules.utils import reset_self_paced_schedule
|
||||
|
||||
|
||||
class UnableToResetDeadlines(APIException):
|
||||
status_code = 400
|
||||
default_detail = 'Unable to reset deadlines.'
|
||||
default_code = 'unable_to_reset_deadlines'
|
||||
|
||||
|
||||
@permission_classes((IsAuthenticated,))
|
||||
@api_view(['POST'])
|
||||
def reset_course_deadlines(request):
|
||||
course_key = request.data.get('course_key', None)
|
||||
|
||||
# If body doesnt contain 'course_key', return 400 to client.
|
||||
if not course_key:
|
||||
raise ParseError("'course_key' is required.")
|
||||
|
||||
# If body contains params other than 'course_key', return 400 to client.
|
||||
if len(request.data) > 1:
|
||||
raise ParseError("Only 'course_key' is expected.")
|
||||
|
||||
try:
|
||||
reset_self_paced_schedule(request.user, course_key)
|
||||
return Response({'message': 'Deadlines successfully reset.'})
|
||||
except Exception:
|
||||
raise UnableToResetDeadlines
|
||||
Reference in New Issue
Block a user