90 lines
2.7 KiB
Python
90 lines
2.7 KiB
Python
from testlib.fixtures.nix import Nix
|
|
from testlib.fixtures.git import Git
|
|
from testlib.fixtures.file_helper import with_files, File
|
|
from testlib.environ import environ
|
|
from pathlib import Path
|
|
import pytest
|
|
from .common import simple_flake
|
|
|
|
system = environ.get("system")
|
|
|
|
files = simple_flake() | {"foo": {"flake.nix": File("{ outputs = _: {}; }")}, "subdir": {}}
|
|
|
|
|
|
@pytest.fixture(autouse=True)
|
|
def common_init(nix: Nix, files: Path):
|
|
nix.settings.add_xp_feature("nix-command", "flakes")
|
|
|
|
flake = files / "flake.nix"
|
|
flake.write_text(f"""
|
|
{{
|
|
inputs.foo.url = "{files}/foo";
|
|
outputs = a: {{
|
|
packages.{system} = rec {{
|
|
test = import ./simple.nix;
|
|
default = test;
|
|
}};
|
|
}};
|
|
}}
|
|
""")
|
|
|
|
|
|
good_uris: list[list[str]] = [
|
|
[],
|
|
["."],
|
|
[".#"],
|
|
[".#test"],
|
|
["../subdir"],
|
|
["../subdir#test"],
|
|
["$PWD"],
|
|
]
|
|
|
|
|
|
@with_files(files)
|
|
class TestFlakeSearchPath:
|
|
@pytest.mark.parametrize("args", good_uris)
|
|
def test_flake_search_goes_up(self, nix: Nix, files: Path, args: list[str]):
|
|
subdir = files / "subdir"
|
|
nix.nix(
|
|
["build", *[arg.replace("$PWD", str(subdir)) for arg in args]], cwd=subdir
|
|
).run().ok()
|
|
|
|
def test_flake_search_inactive_with_path_uri(self, nix: Nix, files: Path):
|
|
subdir = files / "subdir"
|
|
assert (
|
|
"does not contain a '/flake.nix' file"
|
|
in nix.nix(["build", f"path:{subdir}"], cwd=subdir).run().expect(1).stderr_s
|
|
)
|
|
|
|
def test_flake_search_goes_up_without_installable(self, nix: Nix):
|
|
nix.nix(["build", "--override-input", "foo", "."]).run().ok()
|
|
|
|
def test_flake_inputs_do_not_search(self, nix: Nix, files: Path):
|
|
flake = files / "flake.nix"
|
|
flake.write_text(flake.read_text().replace(str(files / "foo"), str(files / "foo/subdir")))
|
|
nix.nix(["build"]).run().expect(1)
|
|
|
|
@pytest.mark.parametrize("args", good_uris)
|
|
def test_flake_search_does_not_cross_git_repo(
|
|
self, git: Git, nix: Nix, files: Path, args: list[str]
|
|
):
|
|
subdir = files / "subdir"
|
|
git(subdir, "init")
|
|
assert (
|
|
"is not part of a flake"
|
|
in nix.nix(["build", *[arg.replace("$PWD", str(subdir)) for arg in args]], cwd=subdir)
|
|
.run()
|
|
.expect(1)
|
|
.stderr_s
|
|
)
|
|
|
|
def test_flake_search_does_not_cross_git_repo_with_path_ru(
|
|
self, git: Git, nix: Nix, files: Path
|
|
):
|
|
subdir = files / "subdir"
|
|
git(subdir, "init")
|
|
assert (
|
|
"does not contain a '/flake.nix' file"
|
|
in nix.nix(["build", f"path:{subdir}"], cwd=subdir).run().expect(1).stderr_s
|
|
)
|