diff --git a/cms/djangoapps/contentstore/tests/test_contentstore.py b/cms/djangoapps/contentstore/tests/test_contentstore.py index b4f35bb19a..ad8bd9d01b 100644 --- a/cms/djangoapps/contentstore/tests/test_contentstore.py +++ b/cms/djangoapps/contentstore/tests/test_contentstore.py @@ -1297,8 +1297,19 @@ class ContentStoreTest(ModuleStoreTestCase): def test_forum_unseeding(self): """Test new course creation and verify forum seeding """ test_course_data = self.assert_created_course(number_suffix=uuid4().hex) - unseed_permissions_roles(self._get_course_id(test_course_data)) - self.assertFalse(are_permissions_roles_seeded(self._get_course_id(test_course_data))) + course_id = self._get_course_id(test_course_data) + unseed_permissions_roles(course_id) + self.assertFalse(are_permissions_roles_seeded(course_id)) + + def test_forum_unseeding_with_different_casing(self): + """Test new course creation and verify forum seeding """ + test_course_data = self.assert_created_course(number_suffix=uuid4().hex) + # make sure we don't delete a forum permissions set with different casing + # than the passed in course_id. This is because Mongo and MySQL are using different collations + course_id = self._get_course_id(test_course_data) + unseed_permissions_roles(course_id.upper()) + # permissions should still be there! + self.assertTrue(are_permissions_roles_seeded(course_id)) def _get_course_id(self, test_course_data): """Returns the course ID (org/number/run).""" diff --git a/common/djangoapps/django_comment_common/utils.py b/common/djangoapps/django_comment_common/utils.py index b4c3f7ae29..a73dc2aadb 100644 --- a/common/djangoapps/django_comment_common/utils.py +++ b/common/djangoapps/django_comment_common/utils.py @@ -36,28 +36,40 @@ def unseed_permissions_roles(course_id): """ A utility method to clean up all forum related permissions and roles """ - administrator_role = Role.objects.get_or_create(name="Administrator", course_id=course_id)[0] - moderator_role = Role.objects.get_or_create(name="Moderator", course_id=course_id)[0] - community_ta_role = Role.objects.get_or_create(name="Community TA", course_id=course_id)[0] - student_role = Role.objects.get_or_create(name="Student", course_id=course_id)[0] + try: + administrator_role = Role.objects.get(name="Administrator", course_id=course_id) + if administrator_role.course_id == course_id: + administrator_role.delete() + except Role.DoesNotExist: + pass - # safety switches in case the casing does not match + try: + moderator_role = Role.objects.get(name="Moderator", course_id=course_id) + if moderator_role.course_id == course_id: + moderator_role.delete() + except Role.DoesNotExist: + pass - if administrator_role.course_id == course_id: - administrator_role.delete() + try: + community_ta_role = Role.objects.get(name="Community TA", course_id=course_id) + if community_ta_role.course_id == course_id: + community_ta_role.delete() + except Role.DoesNotExist: + pass - if moderator_role.course_id == course_id: - moderator_role.delete() - - if community_ta_role.course_id == course_id: - community_ta_role.delete() - - if student_role.course_id == course_id: - student_role.delete() + try: + student_role = Role.objects.get(name="Student", course_id=course_id) + if student_role.course_id == course_id: + student_role.delete() + except Role.DoesNotExist: + pass def are_permissions_roles_seeded(course_id): - + """ + Returns whether the forums permissions for a course have been provisioned in + the database + """ try: administrator_role = Role.objects.get(name="Administrator", course_id=course_id) moderator_role = Role.objects.get(name="Moderator", course_id=course_id)