Skip to content

Commit 5d4e46c

Browse files
committed
Cover dangling symlink export recovery
1 parent ef0e310 commit 5d4e46c

1 file changed

Lines changed: 19 additions & 0 deletions

File tree

‎tests/test_sav_sqlite.py‎

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import pytest
88

99
import openstatspec
10+
import openstatspec.spss.sav as sav_module
1011
from conformance import compare_sav_semantics, write_supported_semantics_fixture
1112
from openstatspec.core import UnsupportedOperationError
1213

@@ -222,3 +223,21 @@ def test_very_long_string_round_trips_through_sqlite_and_export(tmp_path, suffix
222223
frame, metadata = pyspssio.read_sav(str(destination), convert_datetimes=False)
223224
assert metadata["var_types"]["comment"] == payload_width
224225
assert frame["comment"].tolist() == [payload, "short"]
226+
227+
def test_export_recovery_preserves_dangling_destination_symlink(tmp_path) -> None:
228+
missing_target = tmp_path / "missing-target.sav"
229+
destination = tmp_path / "destination.sav"
230+
backup = tmp_path / "destination.previous"
231+
destination.symlink_to(missing_target)
232+
233+
assert sav_module._path_entry_exists(destination) is True
234+
destination.replace(backup)
235+
destination.write_bytes(b"staged export")
236+
sav_module._restore_export_destination(
237+
destination=destination,
238+
backup=backup,
239+
had_previous=True,
240+
)
241+
242+
assert destination.is_symlink()
243+
assert destination.readlink() == missing_target

0 commit comments

Comments
 (0)