From 62a32cda2147782054692ae256893f0734b1effb Mon Sep 17 00:00:00 2001 From: zubiar-arbi Date: Tue, 18 Feb 2014 17:55:39 +0500 Subject: [PATCH 1/2] add course updates location to loc_mapper on accessing course_info_update_handler STUD-1248 --- cms/djangoapps/contentstore/views/course.py | 10 +++- .../views/tests/test_course_updates.py | 47 ++++++++++++++++++- 2 files changed, 54 insertions(+), 3 deletions(-) diff --git a/cms/djangoapps/contentstore/views/course.py b/cms/djangoapps/contentstore/views/course.py index f73c1ef983..8188e75dbd 100644 --- a/cms/djangoapps/contentstore/views/course.py +++ b/cms/djangoapps/contentstore/views/course.py @@ -466,7 +466,15 @@ def course_info_update_handler(request, tag=None, package_id=None, branch=None, """ if 'application/json' not in request.META.get('HTTP_ACCEPT', 'application/json'): return HttpResponseBadRequest("Only supports json requests") - updates_locator = BlockUsageLocator(package_id=package_id, branch=branch, version_guid=version_guid, block_id=block) + + course_location = loc_mapper().translate_locator_to_location( + CourseLocator(package_id=package_id), get_course=True + ) + # add location to loc_mapper + updates_locator = loc_mapper().translate_location( + course_location.course_id, course_location.replace(category='course_info', name='updates'), + False, True + ) updates_location = loc_mapper().translate_locator_to_location(updates_locator) if provided_id == '': provided_id = None diff --git a/cms/djangoapps/contentstore/views/tests/test_course_updates.py b/cms/djangoapps/contentstore/views/tests/test_course_updates.py index bc3075668a..1997f0de33 100644 --- a/cms/djangoapps/contentstore/views/tests/test_course_updates.py +++ b/cms/djangoapps/contentstore/views/tests/test_course_updates.py @@ -1,7 +1,12 @@ -'''unit tests for course_info views and models.''' -from contentstore.tests.test_course_settings import CourseTestCase +""" +unit tests for course_info views and models. +""" import json + +from contentstore.tests.test_course_settings import CourseTestCase +from xmodule.modulestore import Location from xmodule.modulestore.django import modulestore, loc_mapper +from xmodule.modulestore.locator import BlockUsageLocator class CourseUpdateTest(CourseTestCase): @@ -142,3 +147,41 @@ class CourseUpdateTest(CourseTestCase): resp = self.client.get_json(course_update_url) payload = json.loads(resp.content) self.assertTrue(len(payload) == 2) + + def test_post_course_update(self): + """ + Test posting a course update through api on a newly created course updates location map with course_updates + """ + # create a course via the view handler + course_location = Location(['i4x', 'Org_1', 'Course_1', 'course', 'Run_1']) + course_locator = loc_mapper().translate_location( + course_location.course_id, course_location, False, True + ) + self.client.ajax_post( + course_locator.url_reverse('course'), + { + 'org': course_location.org, + 'number': course_location.course, + 'display_name': 'test course', + 'run': course_location.name, + } + ) + + branch = u'draft' + version = None + block = u'updates' + updates_locator = BlockUsageLocator( + package_id=course_location.course_id.replace('/', '.'), branch=branch, version_guid=version, block_id=block + ) + + # test that user can successfully post on course updates whose location in not added in loc_mapper + content = u"Sample update" + payload = {'content': content, 'date': 'January 8, 2013'} + course_update_url = updates_locator.url_reverse('course_info_update') + resp = self.client.ajax_post(course_update_url, payload) + + # check that response status is 200 not 400 + self.assertEqual(resp.status_code, 200) + + payload = json.loads(resp.content) + self.assertHTMLEqual(payload['content'], content) From 6b3c5e7d60f72169dd7cb494fdaceab3cb9eb50a Mon Sep 17 00:00:00 2001 From: zubiar-arbi Date: Thu, 20 Feb 2014 15:05:18 +0500 Subject: [PATCH 2/2] get updates_location from course_location directly + update tests STUD-1248 --- cms/djangoapps/contentstore/views/course.py | 7 +------ .../contentstore/views/tests/test_course_updates.py | 9 +++++++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/cms/djangoapps/contentstore/views/course.py b/cms/djangoapps/contentstore/views/course.py index 8188e75dbd..ad8b239fd7 100644 --- a/cms/djangoapps/contentstore/views/course.py +++ b/cms/djangoapps/contentstore/views/course.py @@ -470,12 +470,7 @@ def course_info_update_handler(request, tag=None, package_id=None, branch=None, course_location = loc_mapper().translate_locator_to_location( CourseLocator(package_id=package_id), get_course=True ) - # add location to loc_mapper - updates_locator = loc_mapper().translate_location( - course_location.course_id, course_location.replace(category='course_info', name='updates'), - False, True - ) - updates_location = loc_mapper().translate_locator_to_location(updates_locator) + updates_location = course_location.replace(category='course_info', name=block) if provided_id == '': provided_id = None diff --git a/cms/djangoapps/contentstore/views/tests/test_course_updates.py b/cms/djangoapps/contentstore/views/tests/test_course_updates.py index 1997f0de33..447cfab75f 100644 --- a/cms/djangoapps/contentstore/views/tests/test_course_updates.py +++ b/cms/djangoapps/contentstore/views/tests/test_course_updates.py @@ -150,7 +150,7 @@ class CourseUpdateTest(CourseTestCase): def test_post_course_update(self): """ - Test posting a course update through api on a newly created course updates location map with course_updates + Test that a user can successfully post on course updates of a course whose location in not in loc_mapper """ # create a course via the view handler course_location = Location(['i4x', 'Org_1', 'Course_1', 'course', 'Run_1']) @@ -174,7 +174,6 @@ class CourseUpdateTest(CourseTestCase): package_id=course_location.course_id.replace('/', '.'), branch=branch, version_guid=version, block_id=block ) - # test that user can successfully post on course updates whose location in not added in loc_mapper content = u"Sample update" payload = {'content': content, 'date': 'January 8, 2013'} course_update_url = updates_locator.url_reverse('course_info_update') @@ -185,3 +184,9 @@ class CourseUpdateTest(CourseTestCase): payload = json.loads(resp.content) self.assertHTMLEqual(payload['content'], content) + + # now test that calling translate_location returns a locator whose block_id is 'updates' + updates_location = course_location.replace(category='course_info', name=block) + updates_locator = loc_mapper().translate_location(course_location.course_id, updates_location) + self.assertTrue(isinstance(updates_locator, BlockUsageLocator)) + self.assertEqual(updates_locator.block_id, block)