Getting Started with TestHomeEnvironment¶
The TestHomeEnvironment is designed to create a safe, isolated sandbox for
testing tools that interact with the user’s home directory and configuration
paths.
Setup the Environment¶
First, we need to define a base directory for our test. In this example, we use a directory within our documentation structure.
>>> from pathlib import Path
>>> from fitzzftw.develtool.testinfra import TestHomeEnvironment
>>> # Define the anchor for our test environment
>>> base_path = Path("doc/source/devel/testhome_tmp")
>>> env = TestHomeEnvironment(base_path)
>>> env.setup()
Understanding the Paths¶
After calling setup(), the environment has prepared three main areas.
Notice that the current working directory has automatically shifted to
the output_dir.
>>> # The current working directory is now the sandbox output
>>> Path.cwd() == env.output_dir
True
>>> # The 'testinput' directory is meant for static files from Git
>>> env.input_dir.name
'testinput'
Isolation from the System¶
The environment has redirected the HOME variable. Libraries like
platformdirs will now point into our base_path instead of your
real user folder.
>>> import os
>>> os.environ['HOME'] == str(env.base_dir)
True
Using the intuitive HOME alias
>>> env.HOME == env.base_dir
True
Deploying Configuration Files¶
You can easily “inject” files from your static testinput into the
simulated user configuration. Imagine you have a file named config_v1.toml
in your testinput folder.
(Note: For this test to run, the file must exist in the real filesystem)
>>> # This copies: testhome/testinput/config_v1.toml
>>> # to: testhome/.config/ftw/patch.toml (on Linux)
>>> # target_path = env.copy2config("ftw", "config_v1.toml", "patch.toml")
Cleaning up¶
At the end of the doctest, we restore the original system state.
>>> env.teardown()
>>> # CWD and Environment variables are now back to original values
>>> import shutil
>>> shutil.rmtree(base_path, ignore_errors=True)