import json from contextlib import contextmanager from pathlib import Path from shutil import rmtree from tempfile import TemporaryDirectory from transpose import version ENTRY_NAME = "MyName" SECOND_ENTRY_NAME = "SecondEntry" TESTS_PATH = Path("tests-temp") STORE_PATH = TESTS_PATH.joinpath("store") TARGET_PATH = TESTS_PATH.joinpath("source") SECOND_TARGET_PATH = TESTS_PATH.joinpath("second_source") SYMLINK_TEST_PATH = TESTS_PATH.joinpath("symlink_test") ENTRY_STORE_PATH = STORE_PATH.joinpath(ENTRY_NAME) TRANSPOSE_CONFIG_PATH = STORE_PATH.joinpath("transpose.json") TRANSPOSE_CONFIG = { "version": version, "entries": { ENTRY_NAME: { "name": ENTRY_NAME, "path": str(TARGET_PATH), "created": "2023-01-21 01:02:03.1234567", }, SECOND_ENTRY_NAME: { "name": SECOND_ENTRY_NAME, "path": str(SECOND_TARGET_PATH), "created": "2023-02-23 01:02:03.1234567", }, }, } @contextmanager def setup_apply(): """ Create the following directory structure: tests-temp/ ├── store/ │ ├── transpose.json │ ├── MyName/ │ └── SecondEntry/ ├── second_source/ └── symlink_test/ -> source/ """ try: with TemporaryDirectory(str(TESTS_PATH)): STORE_PATH.mkdir(parents=True, exist_ok=True) ENTRY_STORE_PATH.mkdir(parents=True, exist_ok=True) STORE_PATH.joinpath(SECOND_ENTRY_NAME).mkdir() SECOND_TARGET_PATH.mkdir() SYMLINK_TEST_PATH.symlink_to(TARGET_PATH.resolve()) with open(str(TRANSPOSE_CONFIG_PATH), "w") as f: json.dump(TRANSPOSE_CONFIG, f) yield finally: # This shouldn't be necessary but is for some reason rmtree(TESTS_PATH) @contextmanager def setup_restore(): """ Create the following directory structure: tests-temp/ ├── store/ │ ├── MyName/ │ └── transpose.json └── symlink_test -> store/MyName """ try: with TemporaryDirectory(str(TESTS_PATH)): ENTRY_STORE_PATH.mkdir(parents=True, exist_ok=True) SYMLINK_TEST_PATH.symlink_to(TARGET_PATH) with open(str(TRANSPOSE_CONFIG_PATH), "w") as f: json.dump(TRANSPOSE_CONFIG, f) yield finally: # This shouldn't be necessary but is for some reason rmtree(TESTS_PATH) @contextmanager def setup_store(): """ Create the following directory structure: tests-temp/ ├── source/ └── store/ ├── transpose-bad.json ├── transpose-invalid.json └── transpose.json """ try: with TemporaryDirectory(str(TESTS_PATH)): TARGET_PATH.mkdir(parents=True, exist_ok=True) STORE_PATH.mkdir(parents=True, exist_ok=True) with open(str(TRANSPOSE_CONFIG_PATH), "w") as f: json.dump(TRANSPOSE_CONFIG, f) bad_config_path = STORE_PATH.joinpath("transpose-bad.json") bad_config = '{"version": "1.0.0"}' # Missing entries with open(str(bad_config_path), "w") as f: f.write(bad_config) invalid_config_path = STORE_PATH.joinpath("transpose-invalid.json") invalid_config = "[{'invalidJSONFormat'}]" with open(str(invalid_config_path), "w") as f: f.write(invalid_config) yield finally: # This shouldn't be necessary but is for some reason rmtree(TESTS_PATH)