aboutsummaryrefslogtreecommitdiff
path: root/tests/bootstrap
diff options
context:
space:
mode:
Diffstat (limited to 'tests/bootstrap')
-rw-r--r--tests/bootstrap/test_new_instance.py70
1 files changed, 70 insertions, 0 deletions
diff --git a/tests/bootstrap/test_new_instance.py b/tests/bootstrap/test_new_instance.py
new file mode 100644
index 0000000..e136579
--- /dev/null
+++ b/tests/bootstrap/test_new_instance.py
@@ -0,0 +1,70 @@
+"""Test to ensure that bootstrapping a new instance works with the fietsupdate
+script, as described in the documentation.
+"""
+
+import contextlib
+import logging
+import os
+import shutil
+import subprocess
+import venv
+from pathlib import Path
+
+LOGGER = logging.getLogger(__name__)
+REPO_BASE = Path(__file__).parent.parent.parent
+
+
+@contextlib.contextmanager
+def chdir(path: Path):
+ """Change path as context manager.
+
+ Changes back to the previous path on ``__exit__``.
+ """
+ cwd = Path.cwd()
+ os.chdir(path)
+ try:
+ yield
+ finally:
+ os.chdir(cwd)
+
+
+def install_fietsboek(venv_path: Path) -> Path:
+ """Creates a virtual env in the given path and installs fietsboek.
+
+ :param venv_path: Path in which the virtual environment should be created.
+ :return: The path to the ``bin`` directory in which all scripts reside.
+ """
+ venv.create(venv_path, with_pip=True)
+ subprocess.check_call([venv_path / "bin" / "pip", "install", str(REPO_BASE)])
+ return venv_path / "bin"
+
+
+def test_setup_via_fietsupdate(tmpdir):
+ with chdir(tmpdir):
+ # We create a new temporary virtual environment with a fresh install, just
+ # to be sure there's as little interference as possible.
+ LOGGER.info("Installing Fietsboek into clean env")
+ binaries_path = install_fietsboek(tmpdir / "venv")
+
+ LOGGER.info("Creating a test configuration")
+ shutil.copy(REPO_BASE / "testing.ini", "testing.ini")
+ Path("data").mkdir()
+
+ # Try to run the migrations
+ subprocess.check_call(
+ [binaries_path / "fietsupdate", "update", "-c", "testing.ini", "-f"]
+ )
+
+ # Also try to add an administrator
+ subprocess.check_call([
+ binaries_path / "fietsctl",
+ "user",
+ "add",
+ "-c", "testing.ini",
+ "--email", "foobar@example.com",
+ "--name", "Foo Bar",
+ "--password", "raboof",
+ "--admin",
+ ])
+
+ assert True