"""The command line, and the one ordering it depends on.""" import subprocess import sys from pathlib import Path from fluksio.cli import load_or_create_secret_key def test_importing_the_cli_does_not_build_the_settings() -> None: """`_configure_environment` has to run before anything reads a setting. The settings are built on the first import of `fluksio.core.config`, and every engine module reaches it within an import or two. If importing the CLI pulled it in, `DATA_DIR` would be fixed at whatever directory the command was run from — which is how the database ends up in the cwd. """ leaked = subprocess.run( [ sys.executable, "-c", "import fluksio.cli, sys; print('fluksio.core.config' in sys.modules)", ], capture_output=True, text=True, check=True, ) assert leaked.stdout.strip() == "False", leaked.stdout def test_the_secret_key_is_kept_rather_than_regenerated(tmp_path: Path) -> None: """A new key each start would sign out every session and orphan secrets.enc.""" path = tmp_path / "secret_key" first = load_or_create_secret_key(path) assert load_or_create_secret_key(path) == first assert path.stat().st_mode & 0o777 == 0o600 def test_the_store_works_without_git(tmp_path: Path, monkeypatch) -> None: """A pip install on a locked-down host may have no git. Flows are files, and that is what the store is for; the history is the part that needs git. Losing it must not be a refusal to start. """ import subprocess as sp from fluksio.flow.store import FlowStore real_run = sp.run def no_git(cmd, *args, **kwargs): if cmd and cmd[0] == "git": raise FileNotFoundError(2, "No such file or directory", "git") return real_run(cmd, *args, **kwargs) monkeypatch.setattr(sp, "run", no_git) monkeypatch.setattr(FlowStore, "_warned_no_git", False) store = FlowStore(tmp_path / "flows") assert store.head() == "" store.write_requirements("numpy\n") assert store.read_requirements() == "numpy\n"