import os import pytest from unlimited_ocr_rdna4.errors import InferenceError from unlimited_ocr_rdna4.infer import _publish_text, _validated_output_path def test_output_must_not_alias_input(tmp_path) -> None: source = tmp_path / "page.png" source.write_bytes(b"source") alias = tmp_path / "alias.md" os.link(source, alias) with pytest.raises(InferenceError, match="same file"): _validated_output_path(source.resolve(), alias, force=True) def test_output_symlink_is_rejected_even_with_force(tmp_path) -> None: source = tmp_path / "page.png" source.write_bytes(b"source") output = tmp_path / "output.md" output.symlink_to(source) with pytest.raises(InferenceError, match="symlink"): _validated_output_path(source.resolve(), output, force=True) assert source.read_bytes() == b"source" def test_non_force_publish_never_overwrites(tmp_path) -> None: output = tmp_path / "output.md" output.write_text("existing\n", encoding="utf-8") with pytest.raises(InferenceError, match="created while inference"): _publish_text(output, "new", force=False) assert output.read_text(encoding="utf-8") == "existing\n" def test_force_publish_replaces_regular_file(tmp_path) -> None: output = tmp_path / "output.md" output.write_text("old\n", encoding="utf-8") _publish_text(output, "new", force=True) assert output.read_text(encoding="utf-8") == "new\n"