Skip to content

Commit 8d3cf77

Browse files
committed
better test coverage
1 parent 6f59ec6 commit 8d3cf77

File tree

2 files changed

+39
-6
lines changed

2 files changed

+39
-6
lines changed

tests/base.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ class BaseTestClass:
1818

1919
@classmethod
2020
def setup_class(cls):
21-
cls.mode = "mupdf"
2221
cls.cams_file_name = os.getenv("CAMS_CAS_FILE")
2322
cls.new_cams_file_name = os.getenv("CAMS_CAS_FILE_NEW")
2423
cls.cams_summary_file_name = os.getenv("CAMS_CAS_SUMMARY")
@@ -37,8 +36,7 @@ def setup_class(cls):
3736
]
3837

3938
def read_pdf(self, filename, password, output="dict"):
40-
use_pdfminer = self.mode == "pdfminer"
41-
return read_cas_pdf(filename, password, output=output, force_pdfminer=use_pdfminer)
39+
return read_cas_pdf(filename, password, output=output)
4240

4341
def test_output_json(self):
4442
for filename, password, num_folios, _ in self.pdf_files:
@@ -81,8 +79,6 @@ def test_read_dict(self):
8179

8280
for pdf_file, pdf_password, _, num_schemes in self.pdf_files:
8381
args = [pdf_file, "-p", pdf_password, "-a"]
84-
if self.mode != "mupdf":
85-
args.append("--force-pdfminer")
8682
result = runner.invoke(cli, args)
8783
assert result.exit_code == 0
8884
clean_output = self.ansi_cleaner.sub("", result.output)

tests/test_pdfminer.py

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,50 @@
1+
import sys
2+
13
import pytest
24
from pdfminer.layout import LTTextBoxHorizontal
35

6+
from casparser import read_cas_pdf
47
from casparser.exceptions import CASParseError
58

69
from .base import BaseTestClass
710

11+
try:
12+
import builtins
13+
except ImportError:
14+
import __builtin__ as builtins
15+
16+
realimport = builtins.__import__
17+
18+
19+
def mockimport(name, *args):
20+
"""Force ImportError on fitz and/or mupdf import and make casparser fallback to pdfminer"""
21+
if name in ("fitz", "mupdf"):
22+
raise ImportError
23+
return realimport(name, *args)
24+
25+
26+
@pytest.fixture(scope="class")
27+
def monkeyclass():
28+
with pytest.MonkeyPatch.context() as mp:
29+
yield mp
830

31+
32+
@pytest.fixture(scope="class")
33+
def use_pdfminer(monkeyclass):
34+
if "fitz" in sys.modules:
35+
del sys.modules["fitz"]
36+
monkeyclass.setattr(builtins, "__import__", mockimport)
37+
yield
38+
monkeyclass.setattr(builtins, "__import__", realimport)
39+
40+
41+
@pytest.mark.usefixtures("use_pdfminer")
942
class TestPDFMiner(BaseTestClass):
1043
"""Test pdfminer parser."""
1144

1245
@classmethod
1346
def setup_class(cls):
1447
BaseTestClass.setup_class()
15-
cls.mode = "pdfminer"
1648

1749
def test_bad_investor_info(self):
1850
from casparser.parsers.pdfminer import parse_investor_info
@@ -22,3 +54,8 @@ def test_bad_investor_info(self):
2254
box.get_text()
2355
parse_investor_info([], 0, 0)
2456
assert "Unable to parse investor data" in str(exc_info)
57+
58+
def test_invalid_file_type(self):
59+
with pytest.raises(CASParseError) as exc_info:
60+
read_cas_pdf(1, "", force_pdfminer=True)
61+
assert "Invalid input" in str(exc_info)

0 commit comments

Comments
 (0)