Commit 6136ed2e by Carson Gee

Switch PDF Textbooks to use portable URLs

parent f1eefc11
...@@ -19,9 +19,9 @@ Feature: CMS.Textbooks ...@@ -19,9 +19,9 @@ Feature: CMS.Textbooks
And I upload the textbook "textbook.pdf" And I upload the textbook "textbook.pdf"
And I wait for "2" seconds And I wait for "2" seconds
And I save the textbook And I save the textbook
Then I should see a textbook named "Economics" with a chapter path containing "/c4x/MITx/999/asset/textbook.pdf" Then I should see a textbook named "Economics" with a chapter path containing "/static/textbook.pdf"
And I reload the page And I reload the page
Then I should see a textbook named "Economics" with a chapter path containing "/c4x/MITx/999/asset/textbook.pdf" Then I should see a textbook named "Economics" with a chapter path containing "/static/textbook.pdf"
Scenario: Create a textbook with multiple chapters Scenario: Create a textbook with multiple chapters
Given I have opened a new course in Studio Given I have opened a new course in Studio
......
...@@ -1792,10 +1792,10 @@ class ContentStoreTest(ModuleStoreTestCase): ...@@ -1792,10 +1792,10 @@ class ContentStoreTest(ModuleStoreTestCase):
# first check PDF textbooks, to make sure the url paths got updated # first check PDF textbooks, to make sure the url paths got updated
course_module = module_store.get_instance(target_course_id, target_location) course_module = module_store.get_instance(target_course_id, target_location)
self.assertEquals(len(course_module.pdf_textbooks), 1) self.assertEqual(len(course_module.pdf_textbooks), 1)
self.assertEquals(len(course_module.pdf_textbooks[0]["chapters"]), 2) self.assertEqual(len(course_module.pdf_textbooks[0]["chapters"]), 2)
self.assertEquals(course_module.pdf_textbooks[0]["chapters"][0]["url"], '/c4x/MITx/999/asset/Chapter1.pdf') self.assertEqual(course_module.pdf_textbooks[0]["chapters"][0]["url"], '/static/Chapter1.pdf')
self.assertEquals(course_module.pdf_textbooks[0]["chapters"][1]["url"], '/c4x/MITx/999/asset/Chapter2.pdf') self.assertEqual(course_module.pdf_textbooks[0]["chapters"][1]["url"], '/static/Chapter2.pdf')
def test_import_into_new_course_id_wiki_slug_renamespacing(self): def test_import_into_new_course_id_wiki_slug_renamespacing(self):
module_store = modulestore('direct') module_store = modulestore('direct')
......
...@@ -65,7 +65,7 @@ define(["js/views/baseview", "underscore", "underscore.string", "jquery", "gette ...@@ -65,7 +65,7 @@ define(["js/views/baseview", "underscore", "underscore.string", "jquery", "gette
if(!that.model.get('name')) { if(!that.model.get('name')) {
options.name = response.asset.displayname; options.name = response.asset.displayname;
} }
options.asset_path = response.asset.url; options.asset_path = response.asset.portable_url;
that.model.set(options); that.model.set(options);
} }
}); });
......
...@@ -517,12 +517,13 @@ def remap_namespace(module, target_location_namespace): ...@@ -517,12 +517,13 @@ def remap_namespace(module, target_location_namespace):
# There is more re-namespacing work we have to do when # There is more re-namespacing work we have to do when
# importing course modules # importing course modules
# remap pdf_textbook urls # remap pdf_textbook urls to portable static URLs
for entry in module.pdf_textbooks: for entry in module.pdf_textbooks:
for chapter in entry.get('chapters', []): for chapter in entry.get('chapters', []):
if StaticContent.is_c4x_path(chapter.get('url', '')): if StaticContent.is_c4x_path(chapter.get('url', '')):
chapter['url'] = StaticContent.renamespace_c4x_path( chapter_loc = StaticContent.get_location_from_path(chapter['url'])
chapter['url'], target_location_namespace chapter['url'] = StaticContent.get_static_path_from_location(
chapter_loc
) )
# Original wiki_slugs had value location.course. To make them unique this was changed to 'org.course.name'. # Original wiki_slugs had value location.course. To make them unique this was changed to 'org.course.name'.
......
...@@ -22,8 +22,17 @@ PDF_BOOK = { ...@@ -22,8 +22,17 @@ PDF_BOOK = {
"tab_title": "Textbook", "tab_title": "Textbook",
"title": "A PDF Textbook", "title": "A PDF Textbook",
"chapters": [ "chapters": [
{ "title": "Chapter 1 for PDF", "url": "https://somehost.com/the_book/chap1.pdf" }, {"title": "Chapter 1 for PDF", "url": "https://somehost.com/the_book/chap1.pdf"},
{ "title": "Chapter 2 for PDF", "url": "https://somehost.com/the_book/chap2.pdf" }, {"title": "Chapter 2 for PDF", "url": "https://somehost.com/the_book/chap2.pdf"},
],
}
PORTABLE_PDF_BOOK = {
"tab_title": "Textbook",
"title": "A PDF Textbook",
"chapters": [
{"title": "Chapter 1 for PDF", "url": "/static/chap1.pdf"},
{"title": "Chapter 2 for PDF", "url": "/static/chap2.pdf"},
], ],
} }
...@@ -31,8 +40,8 @@ HTML_BOOK = { ...@@ -31,8 +40,8 @@ HTML_BOOK = {
"tab_title": "Textbook", "tab_title": "Textbook",
"title": "An HTML Textbook", "title": "An HTML Textbook",
"chapters": [ "chapters": [
{ "title": "Chapter 1 for HTML", "url": "https://somehost.com/the_book/chap1.html" }, {"title": "Chapter 1 for HTML", "url": "https://somehost.com/the_book/chap1.html"},
{ "title": "Chapter 2 for HTML", "url": "https://somehost.com/the_book/chap2.html" }, {"title": "Chapter 2 for HTML", "url": "https://somehost.com/the_book/chap2.html"},
], ],
} }
...@@ -194,6 +203,33 @@ class StaticPdfBookTest(StaticBookTest): ...@@ -194,6 +203,33 @@ class StaticPdfBookTest(StaticBookTest):
with self.assertRaises(NoReverseMatch): with self.assertRaises(NoReverseMatch):
self.make_url('pdf_book', book_index=0, chapter='fooey', page='xyzzy') self.make_url('pdf_book', book_index=0, chapter='fooey', page='xyzzy')
def test_static_url_map_contentstore(self):
"""
This ensure static URL mapping is happening properly for
a course that uses the contentstore
"""
self.make_course(pdf_textbooks=[PORTABLE_PDF_BOOK])
url = self.make_url('pdf_book', book_index=0, chapter=1)
response = self.client.get(url)
self.assertNotContains(response, 'file={}'.format(PORTABLE_PDF_BOOK['chapters'][0]['url']))
self.assertContains(response, 'file=/c4x/{0.org}/{0.course}/asset/{1}'.format(
self.course.location,
PORTABLE_PDF_BOOK['chapters'][0]['url'].replace('/static/', '')))
def test_static_url_map_static_asset_path(self):
"""
Like above, but used when the course has set a static_asset_path
"""
self.make_course(pdf_textbooks=[PORTABLE_PDF_BOOK], static_asset_path='awesomesauce')
url = self.make_url('pdf_book', book_index=0, chapter=1)
response = self.client.get(url)
self.assertNotContains(response, 'file={}'.format(PORTABLE_PDF_BOOK['chapters'][0]['url']))
self.assertNotContains(response, 'file=/c4x/{0.org}/{0.course}/asset/{1}'.format(
self.course.location,
PORTABLE_PDF_BOOK['chapters'][0]['url'].replace('/static/', '')))
self.assertContains(response, 'file=/static/awesomesauce/{}'.format(
PORTABLE_PDF_BOOK['chapters'][0]['url'].replace('/static/', '')))
class StaticHtmlBookTest(StaticBookTest): class StaticHtmlBookTest(StaticBookTest):
""" """
......
...@@ -51,6 +51,7 @@ def remap_static_url(original_url, course): ...@@ -51,6 +51,7 @@ def remap_static_url(original_url, course):
input_url, input_url,
getattr(course, 'data_dir', None), getattr(course, 'data_dir', None),
course_id=course.location.course_id, course_id=course.location.course_id,
static_asset_path=course.static_asset_path
) )
# strip off the quotes again... # strip off the quotes again...
return output_url[1:-1] return output_url[1:-1]
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment