from pathlib import Path
import pytest
import mrrc
_REPO_ROOT = Path(__file__).resolve().parents[2]
_FIXTURES = _REPO_ROOT / "tests" / "data" / "error_fixtures"
def _bad_record_bytes() -> bytes:
return (_FIXTURES / "e101_directory_non_digit_length.bin").read_bytes()
def test_max_errors_caps_lenient_iteration_with_fatal_reader_error() -> None:
bad = _bad_record_bytes()
stream = bad * 3 reader = mrrc.MARCReader(stream, recovery_mode="lenient", max_errors=1)
with pytest.raises(mrrc.FatalReaderError) as excinfo:
list(reader)
assert excinfo.value.code == "E099"
assert excinfo.value.slug == "fatal_reader_error"
def test_max_errors_zero_disables_cap() -> None:
bad = _bad_record_bytes()
stream = bad * 3
reader = mrrc.MARCReader(stream, recovery_mode="lenient", max_errors=0)
records = list(reader)
assert len(records) == 3
for record in records:
assert record is not None
codes = [e.code for e in record.errors]
assert "E101" in codes
def test_max_errors_inert_in_strict_mode() -> None:
bad = _bad_record_bytes()
reader = mrrc.MARCReader(bad, recovery_mode="strict", max_errors=1)
with pytest.raises(mrrc.MrrcException) as excinfo:
list(reader)
assert excinfo.value.code == "E101"