Browse Source

Restructuring tests

pull/2/head
Ryan Reed 2 years ago
parent
commit
1b2428341e
4 changed files with 194 additions and 179 deletions
  1. +0
    -179
      tests/test_project.py
  2. +73
    -0
      tests/test_transpose.py
  3. +86
    -0
      tests/test_utils.py
  4. +35
    -0
      tests/utils.py

+ 0
- 179
tests/test_project.py View File

@ -1,179 +0,0 @@
import json
import os
import pytest
from pathlib import Path
from contextlib import contextmanager
from tempfile import TemporaryDirectory
from transpose import Transpose, version, DEFAULT_CACHE_FILENAME
from transpose.exceptions import TransposeError
from transpose.utils import check_path, create_cache, get_cache, move, remove, symlink
TARGET_DIR = "source"
STORE_DIR = "store"
SYMLINK_DIR = "symlink_test"
CACHE_FILE_CONTENTS = {"version": version, "original_path": TARGET_DIR}
@contextmanager
def setup():
old_dir = os.getcwd()
with TemporaryDirectory("tests-temp") as td:
try:
os.chdir(td)
os.mkdir(TARGET_DIR)
os.mkdir(STORE_DIR)
os.symlink(TARGET_DIR, SYMLINK_DIR)
cache_path = Path(TARGET_DIR).joinpath(DEFAULT_CACHE_FILENAME)
with open(str(cache_path), "w") as f:
json.dump(CACHE_FILE_CONTENTS, f)
yield
finally:
os.chdir(old_dir)
@setup()
def test_check_path():
existing_dir = Path(TARGET_DIR)
nonexisting_dir = Path("nonexistent")
symlink_dir = Path(SYMLINK_DIR)
cache_path = Path(TARGET_DIR).joinpath(DEFAULT_CACHE_FILENAME)
assert check_path(existing_dir) is True
assert check_path(nonexisting_dir) is False
assert check_path(symlink_dir, is_symlink=True) is True
assert check_path(cache_path) is False
@setup()
def test_cache_create():
cache_file = "test_cache_file.json"
cache_path = Path(TARGET_DIR).joinpath(cache_file)
original_path = Path("/tmp/some/random/path")
create_cache(cache_path=cache_path, original_path=original_path)
cache = json.load(open(cache_path, "r"))
assert cache_path.exists()
assert cache["original_path"] == str(original_path)
assert cache["version"] == version
@setup()
def test_cache_get():
cache_path = Path(TARGET_DIR).joinpath(DEFAULT_CACHE_FILENAME)
cache = get_cache(cache_path)
assert cache["version"] == CACHE_FILE_CONTENTS["version"]
assert cache["original_path"] == CACHE_FILE_CONTENTS["original_path"]
@setup()
def test_file_move():
source_path = Path(TARGET_DIR)
destination_path = Path(STORE_DIR)
move(source=source_path.absolute(), destination=destination_path.absolute())
assert not source_path.exists()
assert destination_path.exists()
@setup()
def test_file_remove():
cache_path = Path(TARGET_DIR).joinpath(DEFAULT_CACHE_FILENAME)
symlink_filepath = Path(TARGET_DIR).joinpath(SYMLINK_DIR)
target_filepath = Path(TARGET_DIR)
remove(path=cache_path)
remove(path=symlink_filepath)
remove(path=target_filepath)
assert not cache_path.exists() # Should be able to remove files
assert not symlink_filepath.exists() # Should be able to remove symlinks
assert target_filepath.exists() # Should not be able to remove directories
@setup()
def test_file_symlink():
symlink_name = "test_link"
symlink_filepath = Path(symlink_name)
target_filepath = Path(TARGET_DIR)
symlink(target_path=target_filepath, symlink_path=symlink_filepath)
assert target_filepath.exists()
assert symlink_filepath.is_symlink()
assert symlink_filepath.readlink() == target_filepath
@setup()
def test_transpose_init():
t = Transpose(
target_path=TARGET_DIR,
store_path=STORE_DIR,
)
assert t.cache_filename == ".transpose.json"
assert t.cache_path == Path(TARGET_DIR).joinpath(".transpose.json")
t = Transpose(
target_path=TARGET_DIR, store_path=STORE_DIR, cache_filename=".transpose.txt"
)
assert t.cache_filename == ".transpose.txt"
assert t.cache_path == Path(TARGET_DIR).joinpath(".transpose.txt")
@setup()
def test_transpose_store_restore():
t = Transpose(
target_path=TARGET_DIR,
store_path=STORE_DIR,
)
t.store("TestStore")
target_path = Path(TARGET_DIR)
store_path = Path(STORE_DIR).joinpath("TestStore")
assert store_path.is_dir() and not store_path.is_symlink()
assert target_path.is_dir() and target_path.is_symlink()
assert t.cache_path.is_file()
t = Transpose(
target_path=str(store_path),
store_path=STORE_DIR,
)
t.restore()
assert not store_path.exists()
assert target_path.is_dir() and not target_path.is_symlink()
assert not t.cache_path.exists()
@setup()
def test_transpose_restore_force():
nonexistent_path = Path(STORE_DIR).joinpath("long/path")
# Overwrite cache file with nonexistent directory
cache_path = Path(TARGET_DIR).joinpath(DEFAULT_CACHE_FILENAME)
cache = {"version": version, "original_path": str(nonexistent_path)}
with open(str(cache_path), "w") as f:
json.dump(cache, f)
# Force not enabled, should raise exception
t = Transpose(target_path=TARGET_DIR, store_path=STORE_DIR)
with pytest.raises(TransposeError):
t.restore()
assert not nonexistent_path.exists()
# Force enabled, should create directory tree
t = Transpose(target_path=TARGET_DIR, store_path=STORE_DIR, force=True)
t.restore()
assert nonexistent_path.exists()

+ 73
- 0
tests/test_transpose.py View File

@ -0,0 +1,73 @@
import json
import pytest
from pathlib import Path
from transpose import Transpose, version, DEFAULT_CACHE_FILENAME
from transpose.exceptions import TransposeError
from .utils import STORE_DIR, TARGET_DIR, setup_env
@setup_env()
def test_transpose_init():
t = Transpose(
target_path=TARGET_DIR,
store_path=STORE_DIR,
)
assert t.cache_filename == ".transpose.json"
assert t.cache_path == Path(TARGET_DIR).joinpath(".transpose.json")
t = Transpose(
target_path=TARGET_DIR, store_path=STORE_DIR, cache_filename=".transpose.txt"
)
assert t.cache_filename == ".transpose.txt"
assert t.cache_path == Path(TARGET_DIR).joinpath(".transpose.txt")
@setup_env()
def test_transpose_store_restore():
t = Transpose(
target_path=TARGET_DIR,
store_path=STORE_DIR,
)
t.store("TestStore")
target_path = Path(TARGET_DIR)
store_path = Path(STORE_DIR).joinpath("TestStore")
assert store_path.is_dir() and not store_path.is_symlink()
assert target_path.is_dir() and target_path.is_symlink()
assert t.cache_path.is_file()
t = Transpose(
target_path=str(store_path),
store_path=STORE_DIR,
)
t.restore()
assert not store_path.exists()
assert target_path.is_dir() and not target_path.is_symlink()
assert not t.cache_path.exists()
@setup_env()
def test_transpose_restore_force():
nonexistent_path = Path(STORE_DIR).joinpath("long/path")
# Overwrite cache file with nonexistent directory
cache_path = Path(TARGET_DIR).joinpath(DEFAULT_CACHE_FILENAME)
cache = {"version": version, "original_path": str(nonexistent_path)}
with open(str(cache_path), "w") as f:
json.dump(cache, f)
# Force not enabled, should raise exception
t = Transpose(target_path=TARGET_DIR, store_path=STORE_DIR)
with pytest.raises(TransposeError):
t.restore()
assert not nonexistent_path.exists()
# Force enabled, should create directory tree
t = Transpose(target_path=TARGET_DIR, store_path=STORE_DIR, force=True)
t.restore()
assert nonexistent_path.exists()

+ 86
- 0
tests/test_utils.py View File

@ -0,0 +1,86 @@
import json
from pathlib import Path
from transpose import version, DEFAULT_CACHE_FILENAME
from transpose.utils import check_path, create_cache, get_cache, move, remove, symlink
from .utils import CACHE_FILE_CONTENTS, STORE_DIR, SYMLINK_DIR, TARGET_DIR, setup_env
@setup_env()
def test_check_path():
existing_dir = Path(TARGET_DIR)
nonexisting_dir = Path("nonexistent")
symlink_dir = Path(SYMLINK_DIR)
cache_path = Path(TARGET_DIR).joinpath(DEFAULT_CACHE_FILENAME)
assert check_path(existing_dir) is True
assert check_path(nonexisting_dir) is False
assert check_path(symlink_dir, is_symlink=True) is True
assert check_path(cache_path) is False
@setup_env()
def test_cache_create():
cache_file = "test_cache_file.json"
cache_path = Path(TARGET_DIR).joinpath(cache_file)
original_path = Path("/tmp/some/random/path")
create_cache(cache_path=cache_path, original_path=original_path)
cache = json.load(open(cache_path, "r"))
assert cache_path.exists()
assert cache["original_path"] == str(original_path)
assert cache["version"] == version
@setup_env()
def test_cache_get():
cache_path = Path(TARGET_DIR).joinpath(DEFAULT_CACHE_FILENAME)
cache = get_cache(cache_path)
assert cache["version"] == CACHE_FILE_CONTENTS["version"]
assert cache["original_path"] == CACHE_FILE_CONTENTS["original_path"]
@setup_env()
def test_file_move():
source_path = Path(TARGET_DIR)
destination_path = Path(STORE_DIR)
move(source=source_path.absolute(), destination=destination_path.absolute())
assert not source_path.exists()
assert destination_path.exists()
@setup_env()
def test_file_remove():
cache_path = Path(TARGET_DIR).joinpath(DEFAULT_CACHE_FILENAME)
symlink_filepath = Path(TARGET_DIR).joinpath(SYMLINK_DIR)
target_filepath = Path(TARGET_DIR)
remove(path=cache_path)
remove(path=symlink_filepath)
remove(path=target_filepath)
assert not cache_path.exists() # Should be able to remove files
assert not symlink_filepath.exists() # Should be able to remove symlinks
assert target_filepath.exists() # Should not be able to remove directories
@setup_env()
def test_file_symlink():
symlink_name = "test_link"
symlink_filepath = Path(symlink_name)
target_filepath = Path(TARGET_DIR)
symlink(target_path=target_filepath, symlink_path=symlink_filepath)
assert target_filepath.exists()
assert symlink_filepath.is_symlink()
assert symlink_filepath.readlink() == target_filepath

+ 35
- 0
tests/utils.py View File

@ -0,0 +1,35 @@
import os
import json
from contextlib import contextmanager
from pathlib import Path
from tempfile import TemporaryDirectory
from transpose import DEFAULT_CACHE_FILENAME, version
from transpose.exceptions import TransposeError
TARGET_DIR = "source"
STORE_DIR = "store"
SYMLINK_DIR = "symlink_test"
CACHE_FILE_CONTENTS = {"version": version, "original_path": TARGET_DIR}
@contextmanager
def setup_env():
old_dir = os.getcwd()
with TemporaryDirectory("tests-temp") as td:
try:
os.chdir(td)
os.mkdir(TARGET_DIR)
os.mkdir(STORE_DIR)
os.symlink(TARGET_DIR, SYMLINK_DIR)
cache_path = Path(TARGET_DIR).joinpath(DEFAULT_CACHE_FILENAME)
with open(str(cache_path), "w") as f:
json.dump(CACHE_FILE_CONTENTS, f)
yield
finally:
os.chdir(old_dir)

Loading…
Cancel
Save