import os
import pytest
import importlib
import subprocess
mod = importlib.import_module("install-mpsd-software-environment")


def test_os_chdir():
    # create a temporary directory for testing
    temp_dir = "/tmp/test_os_chdir"
    os.mkdir(temp_dir)

    # initial current working directory
    initial_cwd = os.getcwd()

    # change to the temporary directory using os_chdir
    with mod.os_chdir(temp_dir):
        assert os.getcwd() == os.path.abspath(temp_dir)

    # current working directory should be back to initial directory
    assert os.getcwd() == initial_cwd

    # clean up the temporary directory
    os.rmdir(temp_dir)


def test_prepare_env():
    # simulate running ./install-software-environment.py --release dev-23a --target-directory /tmp/test_prepare_env
    mod.prepare_env("dev-23a", "/tmp/test_prepare_env", False)
    # check if the directory exists
    assert os.path.exists("/tmp/test_prepare_env")
    # check for spack-environments directory
    assert os.listdir("/tmp/test_prepare_env") == ["spack-environments"]
    # check if the git branch is correctl checked out
    assert (
        subprocess.run(
            "cd /tmp/test_prepare_env/spack-environments && git branch",
            shell=True,
            capture_output=True,
        ).stdout.decode("utf-8")
        == "* dev-23a\n"
    )
    # make sure running the command again raises ValueError
    with pytest.raises(ValueError):
        mod.prepare_env("dev-23a", "/tmp/test_prepare_env", False)