fix: update free tier validation rule (#30932)

This commit is contained in:
Ahtisham Shahid
2022-09-06 16:59:07 +05:00
committed by GitHub
parent e46b4603e4
commit 80b654676e
3 changed files with 42 additions and 15 deletions

View File

@@ -32,7 +32,7 @@ class LtiSerializer(serializers.ModelSerializer):
"""
Validates if lti_config contains all required data i.e. custom_instructor_email
"""
additional_parameters = value.get('additional_parameters', None)
additional_parameters = value.get('additional_parameters', {})
custom_instructor_email = additional_parameters.get('custom_instructor_email', None)
requires_email = self.context.get('provider').requires_custom_email()
@@ -118,9 +118,14 @@ class CourseLiveConfigurationSerializer(serializers.ModelSerializer):
self.context['provider_type'] = self.data.get('provider_type', '')
def validate_free_tier(self, value):
if value == self.context['provider'].has_free_tier:
return value
raise serializers.ValidationError('Provider does not support free tier')
"""
Validates free_tier attribute
"""
if value:
if value == self.context['provider'].has_free_tier:
return value
raise serializers.ValidationError('Provider does not support free tier')
return value
def get_pii_sharing_allowed(self, instance):
return self.context['pii_sharing_allowed']
@@ -140,6 +145,8 @@ class CourseLiveConfigurationSerializer(serializers.ModelSerializer):
instance = self._update_course_live_instance(instance, validated_data)
if not validated_data.get('free_tier', False):
instance = self._update_lti(instance, lti_config)
else:
instance.lti_configuration = None
instance.save()
return instance
@@ -151,6 +158,8 @@ class CourseLiveConfigurationSerializer(serializers.ModelSerializer):
instance = self._update_course_live_instance(instance, validated_data)
if not validated_data.get('free_tier', False):
instance = self._update_lti(instance, lti_config)
else:
instance.lti_configuration = None
instance.save()
return instance

View File

@@ -63,6 +63,9 @@ class TestCourseLiveConfigurationView(ModuleStoreTestCase, APITestCase):
}
},
}
if not providers.get(provider).additional_parameters:
lti_config.pop('lti_config')
course_live_config_data = {
'enabled': True,
'provider_type': provider,
@@ -125,8 +128,7 @@ class TestCourseLiveConfigurationView(ModuleStoreTestCase, APITestCase):
"""
lti_config, data, response = self.create_course_live_config(provider)
course_live_configurations = CourseLiveConfiguration.get(self.course.id)
lti_configuration = CourseLiveConfiguration.get(self.course.id).lti_configuration
lti_configuration = course_live_configurations.get(self.course.id).lti_configuration
self.assertEqual(self.course.id, course_live_configurations.course_key)
self.assertEqual(data['enabled'], course_live_configurations.enabled)
self.assertEqual(data['provider_type'], course_live_configurations.provider_type)
@@ -134,10 +136,16 @@ class TestCourseLiveConfigurationView(ModuleStoreTestCase, APITestCase):
self.assertEqual(lti_config['lti_1p1_client_key'], lti_configuration.lti_1p1_client_key)
self.assertEqual(lti_config['lti_1p1_client_secret'], lti_configuration.lti_1p1_client_secret)
self.assertEqual(lti_config['lti_1p1_launch_url'], lti_configuration.lti_1p1_launch_url)
provider_instance = ProviderManager().get_enabled_providers().get(provider)
additional_param = {'additional_parameters': {}}
if provider_instance.additional_parameters:
additional_param = {'additional_parameters': {'custom_instructor_email': 'email@example.com'}}
self.assertEqual({
'pii_share_username': share_username,
'pii_share_email': share_email,
'additional_parameters': {'custom_instructor_email': 'email@example.com'}
**additional_param
}, lti_configuration.lti_config)
self.assertEqual(response.status_code, 200)
@@ -149,6 +157,12 @@ class TestCourseLiveConfigurationView(ModuleStoreTestCase, APITestCase):
Create and test POST request response data
"""
lti_config, course_live_config_data, response = self.create_course_live_config(provider)
provider_instance = ProviderManager().get_enabled_providers().get(provider)
additional_param = {'additional_parameters': {}}
if provider_instance.additional_parameters:
additional_param = {'additional_parameters': {'custom_instructor_email': 'email@example.com'}}
expected_data = {
'course_key': str(self.course.id),
'enabled': True,
@@ -163,9 +177,7 @@ class TestCourseLiveConfigurationView(ModuleStoreTestCase, APITestCase):
'lti_config': {
'pii_share_email': share_email,
'pii_share_username': share_username,
'additional_parameters': {
'custom_instructor_email': 'email@example.com'
},
**additional_param
},
},
}
@@ -198,6 +210,12 @@ class TestCourseLiveConfigurationView(ModuleStoreTestCase, APITestCase):
response = self._post(updated_data)
content = json.loads(response.content.decode('utf-8'))
self.assertEqual(response.status_code, 200)
provider_instance = ProviderManager().get_enabled_providers().get(provider)
additional_param = {'additional_parameters': {}}
if provider_instance.additional_parameters:
additional_param = {'additional_parameters': {'custom_instructor_email': 'new_email@example.com'}}
expected_data = {
'course_key': str(self.course.id),
'provider_type': provider,
@@ -211,10 +229,7 @@ class TestCourseLiveConfigurationView(ModuleStoreTestCase, APITestCase):
'lti_config': {
'pii_share_username': share_username,
'pii_share_email': share_email,
'additional_parameters': {
'custom_instructor_email':
'new_email@example.com'
}
**additional_param
}
},
'pii_sharing_allowed': share_email or share_username
@@ -271,6 +286,7 @@ class TestCourseLiveConfigurationView(ModuleStoreTestCase, APITestCase):
"""
Create and test POST request response data
"""
self.create_course_live_config()
providers = ProviderManager().get_enabled_providers()
if providers.get(provider).requires_pii_sharing():
CourseAllowPIISharingInLTIFlag.objects.create(course_id=self.course.id, enabled=True)

View File

@@ -120,7 +120,9 @@ class CourseLiveConfigurationView(APIView):
"pii_sharing_allowed": pii_sharing_allowed,
"message": "PII sharing is not allowed on this course"
})
if provider and not provider.additional_parameters and request.data.get('lti_configuration', False):
# Add empty lti config if none is provided in case additional params are not required
request.data['lti_configuration']['lti_config'] = {'additional_parameters': {}}
configuration = CourseLiveConfiguration.get(course_id)
serializer = CourseLiveConfigurationSerializer(
configuration,