forked from openedx/cc2olx
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
test: [FC-0063] PDF blocks processing is tested
- Loading branch information
1 parent
e5009b0
commit 9577721
Showing
11 changed files
with
272 additions
and
18 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Binary file not shown.
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
<webLink xmlns="http://www.imsglobal.org/xsd/imsccv1p3/imswl_v1p3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.imsglobal.org/xsd/imsccv1p3/imswl_v1p3 http://www.imsglobal.org/profile/cc/ccv1p3/ccv1p3_imswl_v1p3.xsd"> | ||
<title>PEP 312 – Simple Implicit Lambda</title> | ||
<url href="https://pdf.storage.com/python/proposals/PEP_312.pdf"/> | ||
</webLink> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,163 @@ | ||
from unittest.mock import Mock, patch | ||
|
||
import pytest | ||
|
||
from cc2olx.content_parsers import PdfContentParser | ||
|
||
|
||
class TestPdfContentParser: | ||
def test_parse_content_returns_none_if_idref_is_none(self): | ||
parser = PdfContentParser(Mock(), Mock()) | ||
|
||
assert parser._parse_content(None) is None | ||
|
||
def test_parse_content_returns_none_if_pdf_content_type_with_custom_block_is_not_used(self): | ||
parser = PdfContentParser(Mock(), Mock()) | ||
parser._context = Mock(is_content_type_with_custom_block_used=Mock(return_value=False)) | ||
|
||
assert parser._parse_content(Mock()) is None | ||
|
||
def test_parse_content_returns_none_if_resource_is_not_found(self): | ||
parser = PdfContentParser(Mock(), Mock()) | ||
parser._context = Mock(is_content_type_with_custom_block_used=Mock(return_value=True)) | ||
parser._cartridge = Mock(define_resource=Mock(return_value=None)) | ||
|
||
assert parser._parse_content(Mock()) is None | ||
|
||
def test_parse_content_parses_webcontent(self): | ||
parser = PdfContentParser(Mock(), Mock()) | ||
resource = {"type": "webcontent"} | ||
parse_webcontent_mock = Mock() | ||
parser._context = Mock(is_content_type_with_custom_block_used=Mock(return_value=True)) | ||
parser._cartridge = Mock(define_resource=Mock(return_value=resource)) | ||
parser._parse_webcontent = parse_webcontent_mock | ||
|
||
parsed_content = parser._parse_content(Mock()) | ||
|
||
parse_webcontent_mock.assert_called_once_with(resource) | ||
assert parsed_content == parse_webcontent_mock.return_value | ||
|
||
def test_parse_webcontent_transforms_web_link_content_to_pdf(self): | ||
parser = PdfContentParser(Mock(), Mock()) | ||
web_link_content_mock = Mock() | ||
transform_web_link_content_to_pdf_mock = Mock() | ||
parser._context = Mock(is_content_type_with_custom_block_used=Mock(return_value=True)) | ||
parser._cartridge = Mock(define_resource=Mock(return_value={"type": "imswl_xmlv1p3"})) | ||
parser._parse_web_link_content = Mock(return_value=web_link_content_mock) | ||
parser._transform_web_link_content_to_pdf = transform_web_link_content_to_pdf_mock | ||
|
||
parsed_content = parser._parse_content(Mock()) | ||
|
||
transform_web_link_content_to_pdf_mock.assert_called_once_with(web_link_content_mock) | ||
assert parsed_content == transform_web_link_content_to_pdf_mock.return_value | ||
|
||
@pytest.mark.parametrize( | ||
"file_suffix", | ||
[".docx", ".mp3", ".mp4", ".png", ".jpeg", ".ods", ".csv", ".xls", ".pptx", ".txt"], | ||
) | ||
def test_parse_webcontent_returns_none_if_resource_file_is_not_pdf(self, file_suffix): | ||
cartridge_mock = Mock() | ||
parser = PdfContentParser(Mock(), Mock()) | ||
parser._cartridge = cartridge_mock | ||
web_content_file_mock = Mock() | ||
resource = {"children": [web_content_file_mock]} | ||
|
||
with patch( | ||
"cc2olx.content_parsers.pdf.WebContent", | ||
return_value=Mock(resource_file_path=Mock(suffix=file_suffix)), | ||
) as web_content_mock: | ||
parsed_webcontent = parser._parse_webcontent(resource) | ||
|
||
web_content_mock.assert_called_once_with(cartridge_mock, web_content_file_mock) | ||
assert parsed_webcontent is None | ||
|
||
@patch( | ||
"cc2olx.content_parsers.pdf.WebContent", | ||
return_value=Mock(resource_file_path=Mock(suffix=".pdf"), is_from_web_resources_dir=Mock(return_value=True)), | ||
) | ||
def test_parse_webcontent_parses_pdf_from_web_resources_dir(self, web_content_mock): | ||
parser = PdfContentParser(Mock(), Mock()) | ||
cartridge_mock = Mock() | ||
parse_pdf_webcontent_from_web_resources_dir_mock = Mock() | ||
parser._cartridge = cartridge_mock | ||
parser._parse_pdf_webcontent_from_web_resources_dir = parse_pdf_webcontent_from_web_resources_dir_mock | ||
web_content_file_mock = Mock() | ||
resource = {"children": [web_content_file_mock]} | ||
|
||
parsed_webcontent = parser._parse_webcontent(resource) | ||
|
||
web_content_mock.assert_called_once_with(cartridge_mock, web_content_file_mock) | ||
parse_pdf_webcontent_from_web_resources_dir_mock.assert_called_once_with(web_content_mock.return_value) | ||
assert parsed_webcontent == parse_pdf_webcontent_from_web_resources_dir_mock.return_value | ||
|
||
@patch( | ||
"cc2olx.content_parsers.pdf.WebContent", | ||
return_value=Mock(resource_file_path=Mock(suffix=".pdf"), is_from_web_resources_dir=Mock(return_value=False)), | ||
) | ||
def test_parse_webcontent_parses_pdf_outside_web_resources_dir(self, web_content_mock): | ||
parser = PdfContentParser(Mock(), Mock()) | ||
cartridge_mock = Mock() | ||
parse_pdf_webcontent_outside_web_resources_dir_mock = Mock() | ||
parser._cartridge = cartridge_mock | ||
parser._parse_pdf_webcontent_outside_web_resources_dir = parse_pdf_webcontent_outside_web_resources_dir_mock | ||
web_content_file_mock = Mock() | ||
resource = {"children": [web_content_file_mock]} | ||
|
||
parsed_webcontent = parser._parse_webcontent(resource) | ||
|
||
web_content_mock.assert_called_once_with(cartridge_mock, web_content_file_mock) | ||
parse_pdf_webcontent_outside_web_resources_dir_mock.assert_called_once_with(web_content_mock.return_value) | ||
assert parsed_webcontent == parse_pdf_webcontent_outside_web_resources_dir_mock.return_value | ||
|
||
def test_pdf_webcontent_from_web_resources_dir_parsing(self): | ||
web_content_mock = Mock() | ||
cartridge_mock = Mock() | ||
parser = PdfContentParser(Mock(), Mock()) | ||
parser._cartridge = cartridge_mock | ||
expected_content = {"url": web_content_mock.olx_static_path} | ||
|
||
actual_content = parser._parse_pdf_webcontent_from_web_resources_dir(web_content_mock) | ||
|
||
cartridge_mock.olx_to_original_static_file_paths.add_web_resource_path.assert_called_once_with( | ||
web_content_mock.olx_static_path, | ||
web_content_mock.resource_file_path, | ||
) | ||
assert actual_content == expected_content | ||
|
||
def test_pdf_webcontent_outside_web_resources_dir_parsing(self): | ||
web_content_mock = Mock() | ||
cartridge_mock = Mock() | ||
parser = PdfContentParser(Mock(), Mock()) | ||
parser._cartridge = cartridge_mock | ||
expected_content = {"url": web_content_mock.olx_static_path} | ||
|
||
actual_content = parser._parse_pdf_webcontent_outside_web_resources_dir(web_content_mock) | ||
|
||
cartridge_mock.olx_to_original_static_file_paths.add_extra_path.assert_called_once_with( | ||
web_content_mock.olx_static_path, | ||
web_content_mock.resource_relative_path, | ||
) | ||
assert actual_content == expected_content | ||
|
||
@pytest.mark.parametrize( | ||
"web_link_url", | ||
["https://example.com/html_content.html", "http://example.com/video.mp4", "/path/to/audio.wav"], | ||
) | ||
def test_transform_web_link_content_to_pdf_returns_none_if_web_link_does_not_point_to_pdf_file(self, web_link_url): | ||
parser = PdfContentParser(Mock(), Mock()) | ||
web_link_content = {"href": web_link_url} | ||
|
||
assert parser._transform_web_link_content_to_pdf(web_link_content) is None | ||
|
||
@pytest.mark.parametrize( | ||
"web_link_url", | ||
["https://example.com/PEP_8.pdf", "http://example.com/imscc_profilev1p2-Overview.pdf", "/static/example.pdf"], | ||
) | ||
def test_transform_web_link_content_to_pdf_when_web_link_points_to_pdf_file(self, web_link_url): | ||
parser = PdfContentParser(Mock(), Mock()) | ||
web_link_content = {"href": web_link_url} | ||
expected_content = {"url": web_link_url} | ||
|
||
actual_content = parser._transform_web_link_content_to_pdf(web_link_content) | ||
|
||
assert actual_content == expected_content |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.