fix: update free tier validation rule (#30932)
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user