From a7e1ddf729c384dda980243b968ca23d5a757227 Mon Sep 17 00:00:00 2001 From: Ibrahim Date: Thu, 12 Apr 2018 15:51:36 +0500 Subject: [PATCH] catch duplicate course error --- .../management/commands/create_course.py | 23 +++++++++++------- .../commands/tests/test_create_course.py | 24 +++++++++++++++++++ 2 files changed, 38 insertions(+), 9 deletions(-) diff --git a/cms/djangoapps/contentstore/management/commands/create_course.py b/cms/djangoapps/contentstore/management/commands/create_course.py index 76e1947bba..68a903326f 100644 --- a/cms/djangoapps/contentstore/management/commands/create_course.py +++ b/cms/djangoapps/contentstore/management/commands/create_course.py @@ -10,6 +10,7 @@ from django.core.management.base import BaseCommand, CommandError from contentstore.management.commands.utils import user_from_str from contentstore.views.course import create_new_course_in_store from xmodule.modulestore import ModuleStoreEnum +from xmodule.modulestore.exceptions import DuplicateCourseError MODULESTORE_CHOICES = (ModuleStoreEnum.Type.mongo, ModuleStoreEnum.Type.split) @@ -75,12 +76,16 @@ class Command(BaseCommand): } if name: fields["display_name"] = name - new_course = create_new_course_in_store( - storetype, - user, - org, - number, - run, - fields - ) - self.stdout.write(u"Created {}".format(text_type(new_course.id))) + + try: + new_course = create_new_course_in_store( + storetype, + user, + org, + number, + run, + fields + ) + self.stdout.write(u"Created {}".format(text_type(new_course.id))) + except DuplicateCourseError: + self.stdout.write(u"Course already exists") diff --git a/cms/djangoapps/contentstore/management/commands/tests/test_create_course.py b/cms/djangoapps/contentstore/management/commands/tests/test_create_course.py index 8ba3b86ed3..e0fba10939 100644 --- a/cms/djangoapps/contentstore/management/commands/tests/test_create_course.py +++ b/cms/djangoapps/contentstore/management/commands/tests/test_create_course.py @@ -1,6 +1,7 @@ """ Unittests for creating a course in an chosen modulestore """ +from StringIO import StringIO import ddt from django.core.management import CommandError, call_command from django.test import TestCase @@ -59,6 +60,29 @@ class TestCreateCourse(ModuleStoreTestCase): # pylint: disable=protected-access self.assertEqual(store, modulestore()._get_modulestore_for_courselike(new_key).get_modulestore_type()) + def test_duplicate_course(self): + """ + Test that creating a duplicate course exception is properly handled + """ + call_command( + "create_course", + "split", + str(self.user.email), + "org", "course", "run", "dummy-course-name" + ) + + # create the course again + out = StringIO() + call_command( + "create_course", + "split", + str(self.user.email), + "org", "course", "run", "dummy-course-name", + stderr=out + ) + expected = u"Course already exists" + self.assertIn(out.getvalue().strip(), expected) + @ddt.data(ModuleStoreEnum.Type.split, ModuleStoreEnum.Type.mongo) def test_get_course_with_different_case(self, default_store): """