diff --git a/cms/djangoapps/contentstore/tests/test_assets.py b/cms/djangoapps/contentstore/tests/test_assets.py index 9ed9650b45eb..f9e2a65e1de9 100644 --- a/cms/djangoapps/contentstore/tests/test_assets.py +++ b/cms/djangoapps/contentstore/tests/test_assets.py @@ -61,6 +61,14 @@ def test_toy_assets(self): self.assertContains(resp, "new AssetCollection([{") self.assertContains(resp, "/c4x/edX/toy/asset/handouts_sample_handout.txt") + # Test valid contentType for pdf asset (textbook.pdf) + self.assertContains(resp, "/c4x/edX/toy/asset/textbook.pdf") + asset_location = StaticContent.get_location_from_path('/c4x/edX/toy/asset/textbook.pdf') + content = contentstore().find(asset_location) + # Check after import textbook.pdf has valid contentType ('application/pdf') + # Note: Actual contentType for textbook.pdf in asset.json is 'text/pdf' + self.assertEqual(content.content_type, 'application/pdf') + class UploadTestCase(CourseTestCase): """ diff --git a/common/lib/xmodule/xmodule/modulestore/xml_importer.py b/common/lib/xmodule/xmodule/modulestore/xml_importer.py index 64392b764395..744a771e1a43 100644 --- a/common/lib/xmodule/xmodule/modulestore/xml_importer.py +++ b/common/lib/xmodule/xmodule/modulestore/xml_importer.py @@ -33,6 +33,7 @@ def import_static_content( policy = {} verbose = True + mimetypes_list = mimetypes.types_map.values() for dirname, _, filenames in os.walk(static_dir): for filename in filenames: @@ -64,10 +65,11 @@ def import_static_content( policy_ele = policy.get(content_loc.name, {}) displayname = policy_ele.get('displayname', filename) locked = policy_ele.get('locked', False) - mime_type = policy_ele.get( - 'contentType', - mimetypes.guess_type(filename)[0] - ) + mime_type = policy_ele.get('contentType') + + # Check extracted contentType in list of all valid mimetypes + if not mime_type or mime_type not in mimetypes_list: + mime_type = mimetypes.guess_type(filename)[0] # Assign guessed mimetype content = StaticContent( content_loc, displayname, mime_type, data, import_path=fullname_with_subpath, locked=locked diff --git a/common/test/data/toy/policies/assets.json b/common/test/data/toy/policies/assets.json new file mode 100644 index 000000000000..c051b44f8145 --- /dev/null +++ b/common/test/data/toy/policies/assets.json @@ -0,0 +1,10 @@ +{ + "textbook.pdf":{ + "contentType":"text/pdf", + "displayname":"textbook.pdf", + "locked":false, + "filename":"/c4x/edx/toy/asset/textbook.pdf", + "import_path":null, + "thumbnail_location":null + } +} diff --git a/common/test/data/toy/static/textbook.pdf b/common/test/data/toy/static/textbook.pdf new file mode 100644 index 000000000000..e6e7a031ce59 Binary files /dev/null and b/common/test/data/toy/static/textbook.pdf differ