Skip to content

Commit 797197e

Browse files
Test exceptions for Outlook msg blobs and filenames
1 parent 650f2a4 commit 797197e

File tree

2 files changed

+41
-9
lines changed

2 files changed

+41
-9
lines changed

cardinal_pythonlib/extract_text.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1336,10 +1336,19 @@ def convert_msg_to_text(
13361336
) -> str:
13371337
message_content_list: list[str] = []
13381338

1339+
if not filename and blob is None:
1340+
raise ValueError("convert_msg_to_text: no filename and no blob")
1341+
if filename and blob:
1342+
raise ValueError(
1343+
"convert_msg_to_text: specify either filename or blob"
1344+
)
1345+
13391346
if blob is not None:
1340-
raise ValueError("Blob not currently supported for Outlook msg format")
1347+
filename_or_blob = blob
1348+
else:
1349+
filename_or_blob = filename
13411350

1342-
message = openMsg(filename, delayAttachments=False)
1351+
message = openMsg(filename_or_blob, delayAttachments=False)
13431352
for message_content in _gen_msg_content(message, config=config):
13441353
if message_content_list is not None:
13451354
message_content_list.append(message_content)

cardinal_pythonlib/tests/extract_text_tests.py

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -602,14 +602,21 @@ class ConvertMsgToTextTests(ExtractTextTestCase):
602602
def setUp(self) -> None:
603603
super().setUp()
604604
self.dummy_filename = "dummy_filename.msg"
605+
self.dummy_blob = b"dummy blob"
605606

606-
def test_blob_not_supported(self) -> None:
607+
def test_raises_when_no_filename_or_blob(self) -> None:
608+
with self.assertRaises(ValueError) as cm:
609+
convert_msg_to_text()
610+
611+
self.assertIn("no filename and no blob", str(cm.exception))
612+
613+
def test_raises_when_filename_and_blob(self) -> None:
607614
with self.assertRaises(ValueError) as cm:
608-
convert_msg_to_text(blob=b"foo")
615+
convert_msg_to_text(filename="foo", blob=b"bar")
609616

610-
self.assertIn("Blob not currently supported", str(cm.exception))
617+
self.assertIn("specify either filename or blob", str(cm.exception))
611618

612-
def test_file_opened_with_attachments(self) -> None:
619+
def test_blob_passed_to_openmsg(self) -> None:
613620
content = self.fake.paragraph(nb_sentences=10)
614621

615622
mock_msgfile = mock.Mock(body=content, htmlBody=None, attachments=[])
@@ -618,7 +625,23 @@ def test_file_opened_with_attachments(self) -> None:
618625
"cardinal_pythonlib.extract_text",
619626
openMsg=mock_openmsg,
620627
):
621-
convert_msg_to_text(self.dummy_filename, config=self.config)
628+
convert_msg_to_text(blob=self.dummy_blob, config=self.config)
629+
630+
expected_calls = [mock.call(self.dummy_blob, delayAttachments=False)]
631+
mock_openmsg.assert_has_calls(expected_calls)
632+
633+
def test_file_passed_to_openmsg(self) -> None:
634+
content = self.fake.paragraph(nb_sentences=10)
635+
636+
mock_msgfile = mock.Mock(body=content, htmlBody=None, attachments=[])
637+
mock_openmsg = mock.Mock(return_value=mock_msgfile)
638+
with mock.patch.multiple(
639+
"cardinal_pythonlib.extract_text",
640+
openMsg=mock_openmsg,
641+
):
642+
convert_msg_to_text(
643+
filename=self.dummy_filename, config=self.config
644+
)
622645

623646
expected_calls = [
624647
mock.call(self.dummy_filename, delayAttachments=False)
@@ -635,7 +658,7 @@ def test_text_body_converted(self) -> None:
635658
openMsg=mock_openmsg,
636659
):
637660
converted = convert_msg_to_text(
638-
self.dummy_filename, config=self.config
661+
filename=self.dummy_filename, config=self.config
639662
)
640663

641664
self.assertEqual(converted, content)
@@ -662,7 +685,7 @@ def test_html_body_converted(self) -> None:
662685
openMsg=mock_openmsg,
663686
):
664687
converted = convert_msg_to_text(
665-
self.dummy_filename, config=self.config
688+
filename=self.dummy_filename, config=self.config
666689
)
667690

668691
self.assertEqual(converted.strip(), content)

0 commit comments

Comments
 (0)