From d16709a418654f6cb0ddb16e4b793d2503fd0632 Mon Sep 17 00:00:00 2001 From: Andrew Marshall Date: Fri, 14 Apr 2023 10:07:26 -0400 Subject: [PATCH 1/3] Add ruff to devshell MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It’s used for linting, so should be available. --- shell.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/shell.nix b/shell.nix index 10e427a..f6f7a2c 100644 --- a/shell.nix +++ b/shell.nix @@ -7,6 +7,7 @@ mkShell { python3.pkgs.mypy python3.pkgs.black python3.pkgs.flake8 + ruff shellcheck direnv ]; From 857bcd5c4fe828c49de5a3f23342f914747b5834 Mon Sep 17 00:00:00 2001 From: Andrew Marshall Date: Fri, 14 Apr 2023 10:01:29 -0400 Subject: [PATCH 2/3] Remove unneeded shebangs from test files The files are not executable, tests should only be run via `pytest`, and some of them were incorrectly python2. --- tests/conftest.py | 2 -- tests/direnv_project.py | 2 -- tests/procs.py | 2 -- tests/root.py | 2 -- tests/test_gc.py | 2 -- tests/test_use_nix.py | 2 -- 6 files changed, 12 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index 43c8c83..8a849bf 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python3 - pytest_plugins = [ "direnv_project", "root", diff --git a/tests/direnv_project.py b/tests/direnv_project.py index 784eaaa..cf30755 100644 --- a/tests/direnv_project.py +++ b/tests/direnv_project.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python3 - import shutil import textwrap from dataclasses import dataclass diff --git a/tests/procs.py b/tests/procs.py index 7f8cf5e..ea837d4 100644 --- a/tests/procs.py +++ b/tests/procs.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python3 - import subprocess from pathlib import Path from typing import IO, Any, List, Optional, Union diff --git a/tests/root.py b/tests/root.py index 087c307..b3f0914 100644 --- a/tests/root.py +++ b/tests/root.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python3 - from pathlib import Path import pytest diff --git a/tests/test_gc.py b/tests/test_gc.py index 012ef54..bb30042 100644 --- a/tests/test_gc.py +++ b/tests/test_gc.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python2 - import subprocess import sys import unittest diff --git a/tests/test_use_nix.py b/tests/test_use_nix.py index 8144a62..5d870e4 100644 --- a/tests/test_use_nix.py +++ b/tests/test_use_nix.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python2 - import os import subprocess import sys From 92eb25521ee9c4324f013e8e13eea67e52279716 Mon Sep 17 00:00:00 2001 From: Andrew Marshall Date: Fri, 14 Apr 2023 10:02:20 -0400 Subject: [PATCH 3/3] =?UTF-8?q?Run=20tests=20with=20and=20without=20direnv?= =?UTF-8?q?=E2=80=99s=20strict=5Fenv?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It seems unlikely that the “without” case will have any errors that the “with” case doesn’t, but it’s still a common use case and easy enough to parametrize. --- tests/direnv_project.py | 3 ++- tests/test_gc.py | 16 ++++++++++------ tests/test_use_nix.py | 21 +++++++++++++-------- 3 files changed, 25 insertions(+), 15 deletions(-) diff --git a/tests/direnv_project.py b/tests/direnv_project.py index cf30755..124b7fd 100644 --- a/tests/direnv_project.py +++ b/tests/direnv_project.py @@ -18,9 +18,10 @@ class DirenvProject: def envrc(self) -> Path: return self.dir / ".envrc" - def setup_envrc(self, content: str) -> None: + def setup_envrc(self, content: str, strict_env: bool) -> None: text = textwrap.dedent( f""" + {'strict_env' if strict_env else ''} source {self.nix_direnv} {content} """ diff --git a/tests/test_gc.py b/tests/test_gc.py index bb30042..e46fcfd 100644 --- a/tests/test_gc.py +++ b/tests/test_gc.py @@ -2,6 +2,7 @@ import subprocess import sys import unittest +import pytest from direnv_project import DirenvProject from procs import run @@ -58,18 +59,21 @@ def common_test_clean(direnv_project: DirenvProject) -> None: assert len(profiles) == 1 -def test_use_nix(direnv_project: DirenvProject) -> None: - direnv_project.setup_envrc("use nix") +@pytest.mark.parametrize("strict_env", [False, True]) +def test_use_nix(direnv_project: DirenvProject, strict_env: bool) -> None: + direnv_project.setup_envrc("use nix", strict_env=strict_env) common_test(direnv_project) direnv_project.setup_envrc( - "use nix --argstr shellHook 'echo Executing hijacked shellHook.'" + "use nix --argstr shellHook 'echo Executing hijacked shellHook.'", + strict_env=strict_env, ) common_test_clean(direnv_project) -def test_use_flake(direnv_project: DirenvProject) -> None: - direnv_project.setup_envrc("use flake") +@pytest.mark.parametrize("strict_env", [False, True]) +def test_use_flake(direnv_project: DirenvProject, strict_env: bool) -> None: + direnv_project.setup_envrc("use flake", strict_env=strict_env) common_test(direnv_project) inputs = list((direnv_project.dir / ".direnv/flake-inputs").iterdir()) # should only contain our flake-utils flake @@ -80,7 +84,7 @@ def test_use_flake(direnv_project: DirenvProject) -> None: for symlink in inputs: assert symlink.is_dir() - direnv_project.setup_envrc("use flake --impure") + direnv_project.setup_envrc("use flake --impure", strict_env=strict_env) common_test_clean(direnv_project) diff --git a/tests/test_use_nix.py b/tests/test_use_nix.py index 5d870e4..0c79fa5 100644 --- a/tests/test_use_nix.py +++ b/tests/test_use_nix.py @@ -4,6 +4,7 @@ import sys import unittest from typing import Optional +import pytest from direnv_project import DirenvProject from procs import run @@ -28,25 +29,29 @@ def direnv_exec( assert "renewed cache" in out.stderr -def test_attrs(direnv_project: DirenvProject) -> None: - direnv_project.setup_envrc("use nix -A subshell") +@pytest.mark.parametrize("strict_env", [False, True]) +def test_attrs(direnv_project: DirenvProject, strict_env: bool) -> None: + direnv_project.setup_envrc("use nix -A subshell", strict_env=strict_env) direnv_exec(direnv_project, "echo $THIS_IS_A_SUBSHELL") -def test_no_nix_path(direnv_project: DirenvProject) -> None: - direnv_project.setup_envrc("use nix --argstr someArg OK") +@pytest.mark.parametrize("strict_env", [False, True]) +def test_no_nix_path(direnv_project: DirenvProject, strict_env: bool) -> None: + direnv_project.setup_envrc("use nix --argstr someArg OK", strict_env=strict_env) env = os.environ.copy() del env["NIX_PATH"] direnv_exec(direnv_project, "echo $SHOULD_BE_SET", env=env) -def test_args(direnv_project: DirenvProject) -> None: - direnv_project.setup_envrc("use nix --argstr someArg OK") +@pytest.mark.parametrize("strict_env", [False, True]) +def test_args(direnv_project: DirenvProject, strict_env: bool) -> None: + direnv_project.setup_envrc("use nix --argstr someArg OK", strict_env=strict_env) direnv_exec(direnv_project, "echo $SHOULD_BE_SET") -def test_no_files(direnv_project: DirenvProject) -> None: - direnv_project.setup_envrc("use nix -p hello") +@pytest.mark.parametrize("strict_env", [False, True]) +def test_no_files(direnv_project: DirenvProject, strict_env: bool) -> None: + direnv_project.setup_envrc("use nix -p hello", strict_env=strict_env) out = run( ["direnv", "status"], stderr=subprocess.PIPE,