def test_extract_subtitles_from_video_dom(input_filename,output_filename,subtitle_language, video_id): video_dom = json.loads(slurp_fixture('json/%s' % input_filename)) expected_output = json.loads(slurp_fixture('json/%s' % output_filename)) course = api.CourseraOnDemand( session=Mock(cookies={}), course_id='0', course_name='test_course') actual_output = course._extract_subtitles_from_video_dom(video_dom, subtitle_language, video_id) actual_output = json.loads(json.dumps(actual_output)) assert actual_output == expected_output
def test_ondemand_programming_supplement_one_asset(get_page, course): one_asset_tag = slurp_fixture("json/supplement-programming-one-asset.json") one_asset_url = slurp_fixture("json/asset-urls-one.json") asset_json = json.loads(one_asset_url) get_page.side_effect = [one_asset_tag, one_asset_url] expected_output = {"pdf": [(asset_json["elements"][0]["url"], "statement-pca")]} output = course.extract_links_from_programming("0") assert expected_output == output
def test_ondemand_programming_supplement_three_assets(get_page, course): three_assets_tag = slurp_fixture('json/supplement-programming-three-assets.json') three_assets_url = slurp_fixture('json/asset-urls-three.json') get_page.side_effect = [three_assets_tag, three_assets_url] expected_output = json.loads(slurp_fixture('json/supplement-three-assets-output.json')) output = course.extract_links_from_programming('0') output = json.loads(json.dumps(output)) assert expected_output == output
def test_quiz_exam_to_markup_converter(input_filename, output_filename): quiz_json = json.loads(slurp_fixture('json/quiz-to-markup/%s' % input_filename)) expected_output = slurp_fixture('json/quiz-to-markup/%s' % output_filename).strip() converter = api.QuizExamToMarkupConverter(session=None) actual_output = converter(quiz_json).strip() # print('>%s<' % expected_output) # print('>%s<' % actual_output) assert actual_output == expected_output
def test_extract_links_from_lecture_assets_typename_asset(get_page, course): open_course_assets_reply = slurp_fixture('json/supplement-open-course-assets-reply.json') api_assets_v1_reply = slurp_fixture('json/supplement-api-assets-v1-reply.json') get_page.side_effect = [open_course_assets_reply, api_assets_v1_reply] expected_output = json.loads(slurp_fixture('json/supplement-extract-links-from-lectures-output.json')) assets = ['giAxucdaEeWJTQ5WTi8YJQ'] output = course._extract_links_from_lecture_assets(assets) output = json.loads(json.dumps(output)) assert expected_output == output
def test_ondemand_programming_supplement_one_asset(get_page, course): one_asset_tag = slurp_fixture('json/supplement-programming-one-asset.json') one_asset_url = slurp_fixture('json/asset-urls-one.json') asset_json = json.loads(one_asset_url) get_page.side_effect = [one_asset_tag, one_asset_url] expected_output = {'pdf': [(asset_json['elements'][0]['url'], 'statement-pca')]} output = course.extract_links_from_programming('0') assert expected_output == output
def test_extract_supplement_links(input, output): page_text = slurp_fixture(input) expected_output = json.loads(slurp_fixture(output)) course = api.CourseraOnDemand(session=None, course_id="0") output = course._extract_links_from_text(page_text) # This is the easiest way to convert nested tuples to lists output = json.loads(json.dumps(output)) assert expected_output == output
def test_extract_references_poll(get_page, course): """ Test extracting course references. """ get_page.side_effect = [ json.loads(slurp_fixture('json/references-poll-reply.json')) ] expected_output = json.loads( slurp_fixture('json/references-poll-output.json')) output = course.extract_references_poll() assert expected_output == output
def test_list_courses(get_page, course): """ Test course listing method. """ get_page.side_effect = [ json.loads(slurp_fixture('json/list-courses-input.json')) ] expected_output = json.loads(slurp_fixture('json/list-courses-output.json')) expected_output = expected_output['courses'] output = course.list_courses() assert expected_output == output
def test_ondemand_programming_supplement_no_instructions(get_page, course): no_instructions = slurp_fixture( 'json/supplement-programming-no-instructions.json') get_page.return_value = json.loads(no_instructions) output = course.extract_links_from_programming('0') assert {} == output
def test_asset_retriever(get_reply, get_page): reply = json.loads(slurp_fixture('json/asset-retriever/assets-reply.json')) get_page.side_effect = [reply] get_reply.side_effect = [Mock(status_code=200, content='<...>', headers=Mock(get=Mock(return_value='image/png')))] * 4 asset_ids = ['bWTK9sYwEeW7AxLLCrgDQQ', 'VceKeChKEeaOMw70NkE3iw', 'VcmGXShKEea4ehL5RXz3EQ', 'vdqUTz61Eea_CQ5dfWSAjQ'] expected_output = [ api.Asset(id="bWTK9sYwEeW7AxLLCrgDQQ", name="M111.mp3", type_name="audio", url="url4", content_type="image/png", data="<...>"), api.Asset(id="VceKeChKEeaOMw70NkE3iw", name="09_graph_decomposition_problems_1.pdf", type_name="pdf", url="url7", content_type="image/png", data="<...>"), api.Asset(id="VcmGXShKEea4ehL5RXz3EQ", name="09_graph_decomposition_starter_files_1.zip", type_name="generic", url="url2", content_type="image/png", data="<...>"), api.Asset(id="vdqUTz61Eea_CQ5dfWSAjQ", name="Capture.PNG", type_name="image", url="url9", content_type="image/png", data="<...>"), ] retriever = api.AssetRetriever(session=None) actual_output = retriever(asset_ids) assert expected_output == actual_output
def test_ondemand_from_peer_assignment_instructions( get_page, course, input_filename, expected_output): instructions = slurp_fixture('json/%s' % input_filename) get_page.return_value = json.loads(instructions) output = course.extract_links_from_peer_assignment('0') assert expected_output == links_to_plain_text(output)
def test_ondemand_programming_supplement_three_assets(get_page, course): three_assets_tag = slurp_fixture('json/supplement-programming-three-assets.json') three_assets_url = slurp_fixture('json/asset-urls-three.json') get_page.side_effect = [json.loads(three_assets_tag), json.loads(three_assets_url)] expected_output = json.loads(slurp_fixture('json/supplement-three-assets-output.json')) output = course.extract_links_from_programming('0') output = json.loads(json.dumps(output)) # Make sure that SOME html content has been extracted, but remove # it immeditely because it's a hassle to properly prepare test input # for it. FIXME later. assert 'html' in output del output['html'] assert expected_output == output
def test_ondemand_programming_immediate_instructions_one_asset(get_page, course): one_asset_tag = slurp_fixture('json/supplement-programming-immediate-instructions-one-asset.json') one_asset_url = slurp_fixture('json/asset-urls-one.json') asset_json = json.loads(one_asset_url) get_page.side_effect = [json.loads(one_asset_tag), json.loads(one_asset_url)] expected_output = {'pdf': [(asset_json['elements'][0]['url'], 'statement-pca')]} output = course.extract_links_from_programming_immediate_instructions('0') # Make sure that SOME html content has been extracted, but remove # it immeditely because it's a hassle to properly prepare test input # for it. FIXME later. assert 'html' in output del output['html'] assert expected_output == output
def test_ondemand_programming_supplement_empty_instructions(get_page, course): empty_instructions = slurp_fixture('json/supplement-programming-empty-instructions.json') get_page.return_value = json.loads(empty_instructions) output = course.extract_links_from_programming('0') # Make sure that SOME html content has been extracted, but remove # it immeditely because it's a hassle to properly prepare test input # for it. FIXME later. assert 'html' in output del output['html'] assert {} == output
def test_extract_links_from_lecture_assets_typname_url_and_asset(get_page, course): """ This test makes sure that _extract_links_from_lecture_assets grabs url links both from typename == 'asset' and == 'url'. """ get_page.side_effect = [ json.loads(slurp_fixture( 'json/supplement-open-course-assets-typename-url-reply-1.json')), json.loads(slurp_fixture( 'json/supplement-open-course-assets-typename-url-reply-2.json')), json.loads(slurp_fixture( 'json/supplement-open-course-assets-typename-url-reply-3.json')), json.loads(slurp_fixture( 'json/supplement-open-course-assets-typename-url-reply-4.json')), json.loads(slurp_fixture( 'json/supplement-open-course-assets-typename-url-reply-5.json')), ] expected_output = json.loads(slurp_fixture( 'json/supplement-extract-links-from-lectures-url-asset-output.json')) assets = ['Yry0spSKEeW8oA5fR3afVQ', 'kMQyUZSLEeWj-hLVp2Pm8w', 'xkAloZmJEeWjYA4jOOgP8Q'] output = course._extract_links_from_lecture_assets(assets) output = json.loads(json.dumps(output)) assert expected_output == output
def test_ondemand_programming_supplement_empty_instructions( get_page_json, course): empty_instructions = slurp_fixture( 'json/supplement-programming-empty-instructions.json') get_page_json.return_value = json.loads(empty_instructions) output = course.extract_links_from_programming('0') # Make sure that SOME html content has been extracted, but remove # it immeditely because it's a hassle to properly prepare test input # for it. FIXME later. assert 'html' in output del output['html'] assert {} == output
def test_asset_retriever(get_reply, get_page): reply = json.loads(slurp_fixture('json/asset-retriever/assets-reply.json')) get_page.side_effect = [reply] get_reply.side_effect = [ Mock(status_code=200, content='<...>', headers=Mock(get=Mock(return_value='image/png'))) ] * 4 asset_ids = [ 'bWTK9sYwEeW7AxLLCrgDQQ', 'VceKeChKEeaOMw70NkE3iw', 'VcmGXShKEea4ehL5RXz3EQ', 'vdqUTz61Eea_CQ5dfWSAjQ' ] expected_output = [ api.Asset(id="bWTK9sYwEeW7AxLLCrgDQQ", name="M111.mp3", type_name="audio", url="url4", content_type="image/png", data="<...>"), api.Asset(id="VceKeChKEeaOMw70NkE3iw", name="09_graph_decomposition_problems_1.pdf", type_name="pdf", url="url7", content_type="image/png", data="<...>"), api.Asset(id="VcmGXShKEea4ehL5RXz3EQ", name="09_graph_decomposition_starter_files_1.zip", type_name="generic", url="url2", content_type="image/png", data="<...>"), api.Asset(id="vdqUTz61Eea_CQ5dfWSAjQ", name="Capture.PNG", type_name="image", url="url9", content_type="image/png", data="<...>"), ] retriever = api.AssetRetriever(session=None) actual_output = retriever(asset_ids) assert expected_output == actual_output
def test_extract_links_from_lecture_assets_typname_url_and_asset(get_page, course): """ This test makes sure that _extract_links_from_lecture_assets grabs url links both from typename == 'asset' and == 'url'. """ get_page.side_effect = [ json.loads(slurp_fixture('json/supplement-open-course-assets-typename-url-reply-1.json')), json.loads(slurp_fixture('json/supplement-open-course-assets-typename-url-reply-2.json')), json.loads(slurp_fixture('json/supplement-open-course-assets-typename-url-reply-3.json')), json.loads(slurp_fixture('json/supplement-open-course-assets-typename-url-reply-4.json')), json.loads(slurp_fixture('json/supplement-open-course-assets-typename-url-reply-5.json')), ] expected_output = json.loads(slurp_fixture('json/supplement-extract-links-from-lectures-url-asset-output.json')) assets = ['Yry0spSKEeW8oA5fR3afVQ', 'kMQyUZSLEeWj-hLVp2Pm8w', 'xkAloZmJEeWjYA4jOOgP8Q'] output = course._extract_links_from_lecture_assets(assets) output = json.loads(json.dumps(output)) assert expected_output == output
def test_ondemand_programming_supplement_no_instructions(get_page, course): no_instructions = slurp_fixture("json/supplement-programming-no-instructions.json") get_page.return_value = no_instructions output = course.extract_links_from_programming("0") assert {} == output
def test_ondemand_programming_supplement_empty_instructions(get_page, course): empty_instructions = slurp_fixture('json/supplement-programming-empty-instructions.json') get_page.return_value = empty_instructions output = course.extract_links_from_programming('0') assert {} == output
def test_ondemand_programming_supplement_no_instructions(get_page, course): no_instructions = slurp_fixture('json/supplement-programming-no-instructions.json') get_page.return_value = json.loads(no_instructions) output = course.extract_links_from_programming('0') assert {} == output