diff --git a/poethepoet/plugin.py b/poethepoet/plugin.py index 3c478c9c..f17614af 100644 --- a/poethepoet/plugin.py +++ b/poethepoet/plugin.py @@ -56,7 +56,11 @@ def get_poe(cls, application: Application, io: IO): except: # noqa: E722 poetry_env_path = None - cwd = Path().resolve() + # Get the cwd from poetry to ensure '--directory subdir' usage + try: + cwd = application.poetry.pyproject_path + except AttributeError: + cwd = Path().resolve() config = PoeConfig(cwd=cwd) if io.output.is_quiet(): diff --git a/tests/conftest.py b/tests/conftest.py index 55189de5..94112d91 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -254,7 +254,7 @@ def run_poetry(args: List[str], cwd: str, env: Optional[Dict[str, str]] = None): venv_location, [ ".[poetry_plugin]", - "./tests/fixtures/packages/poetry-1.2.1-py3-none-any.whl", + "./tests/fixtures/packages/poetry-1.8.2-py3-none-any.whl", ], require_empty=True, ): diff --git a/tests/fixtures/packages/poetry-1.2.1-py3-none-any.whl b/tests/fixtures/packages/poetry-1.2.1-py3-none-any.whl deleted file mode 100644 index d8f3d614..00000000 Binary files a/tests/fixtures/packages/poetry-1.2.1-py3-none-any.whl and /dev/null differ diff --git a/tests/fixtures/packages/poetry-1.8.2-py3-none-any.whl b/tests/fixtures/packages/poetry-1.8.2-py3-none-any.whl new file mode 100644 index 00000000..d54e3b6d Binary files /dev/null and b/tests/fixtures/packages/poetry-1.8.2-py3-none-any.whl differ diff --git a/tests/test_poetry_plugin.py b/tests/test_poetry_plugin.py index 82ed12cf..c76f3734 100644 --- a/tests/test_poetry_plugin.py +++ b/tests/test_poetry_plugin.py @@ -134,3 +134,40 @@ def test_running_poetry_command_with_hooks(run_poetry, projects): assert "THIS IS YOUR ENV!" in result.stdout assert "THAT WAS YOUR ENV!" in result.stdout # assert result.stderr == "" + + +@pytest.mark.slow() +@pytest.mark.usefixtures("_setup_poetry_project") +def test_running_poetry_command_with_hooks_with_directory(run_poetry, projects): + result = run_poetry( + ["--directory=" + str(projects["poetry_plugin"]), "env", "info"], + cwd=projects["poetry_plugin"].parent, + ) + assert "THIS IS YOUR ENV!" in result.stdout + assert "THAT WAS YOUR ENV!" in result.stdout + # assert result.stderr == "" + + +@pytest.mark.slow() +@pytest.mark.usefixtures("_setup_poetry_project") +def test_task_with_cli_dependency_with_directory(run_poetry, projects, is_windows): + result = run_poetry( + [ + "--directory=" + str(projects["poetry_plugin"]), + "poe", + "cow-greet", + "yo yo yo", + ], + cwd=projects["poetry_plugin"].parent, + ) + if is_windows: + assert result.stdout.startswith("Poe => cowpy 'yo yo yo'") + assert "< yo yo yo >" in result.stdout + else: + # On POSIX cowpy expects notices its being called as a subprocess and tries + # unproductively to take input from stdin + assert result.stdout.startswith("Poe => cowpy 'yo yo yo'") + assert ( + "< Cowacter, eyes:default, tongue:False, thoughts:False >" in result.stdout + ) + # assert result.stderr == ""