diff --git a/conftest.py b/conftest.py new file mode 100644 index 00000000..7972d82a --- /dev/null +++ b/conftest.py @@ -0,0 +1,10 @@ +import os +from pathlib import Path +import pytest + + +@pytest.fixture +def temp_output_dir(tmp_path: Path) -> str: + # Append path separator so that value is recognized as a directory when + # passed to `output_prefix` + return str(tmp_path) + os.sep diff --git a/test/test_execution.py b/test/test_execution.py index 85d28ac0..55ecd35b 100644 --- a/test/test_execution.py +++ b/test/test_execution.py @@ -1,21 +1,12 @@ from __future__ import annotations -import os from pathlib import Path from unittest import mock -import pytest from utils import assert_files from duct.__main__ import Arguments, Outputs, RecordTypes, execute TEST_SCRIPT = str(Path(__file__).with_name("data") / "test_script.py") -@pytest.fixture -def temp_output_dir(tmp_path: Path) -> str: - # Append path separator so that value is recognized as a directory when - # passed to `output_prefix` - return str(tmp_path) + os.sep - - def test_sanity_green(temp_output_dir: str) -> None: args = Arguments( command="echo", diff --git a/test/test_prepare_outputs.py b/test/test_prepare_outputs.py index 08455ea5..67f041da 100644 --- a/test/test_prepare_outputs.py +++ b/test/test_prepare_outputs.py @@ -6,67 +6,66 @@ @patch("sys.stdout", new_callable=MockStream) -def test_prepare_outputs_all_stdout(mock_stdout: MockStream) -> None: - output_prefix = "test_outputs_" +def test_prepare_outputs_all_stdout( + mock_stdout: MockStream, temp_output_dir: str +) -> None: with patch("duct.__main__.TailPipe") as mock_tee_stream, patch( "builtins.open", new_callable=MagicMock ) as mock_open: mock_tee_stream.return_value.start = MagicMock() stdout, stderr = prepare_outputs( - Outputs.ALL, Outputs.STDOUT, output_prefix, clobber=True + Outputs.ALL, Outputs.STDOUT, temp_output_dir, clobber=True ) mock_tee_stream.assert_called_with( - f"{output_prefix}stdout", buffer=mock_stdout.buffer + f"{temp_output_dir}stdout", buffer=mock_stdout.buffer ) assert stdout == mock_tee_stream.return_value assert stderr == mock_open.return_value @patch("sys.stderr", new_callable=MockStream) -def test_prepare_outputs_all_stderr(mock_stderr: MockStream) -> None: - output_prefix = "test_outputs_" +def test_prepare_outputs_all_stderr( + mock_stderr: MockStream, temp_output_dir: str +) -> None: with patch("duct.__main__.TailPipe") as mock_tee_stream, patch( "builtins.open", new_callable=MagicMock ) as mock_open: mock_tee_stream.return_value.start = MagicMock() stdout, stderr = prepare_outputs( - Outputs.ALL, Outputs.STDERR, output_prefix, clobber=True + Outputs.ALL, Outputs.STDERR, temp_output_dir, clobber=True ) mock_tee_stream.assert_called_with( - f"{output_prefix}stderr", buffer=mock_stderr.buffer + f"{temp_output_dir}stderr", buffer=mock_stderr.buffer ) assert stdout == mock_open.return_value assert stderr == mock_tee_stream.return_value -def test_prepare_outputs_all_none() -> None: - output_prefix = "test_outputs_" +def test_prepare_outputs_all_none(temp_output_dir: str) -> None: with patch("builtins.open", new_callable=MagicMock) as mock_open: stdout, stderr = prepare_outputs( - Outputs.ALL, Outputs.NONE, output_prefix, clobber=True + Outputs.ALL, Outputs.NONE, temp_output_dir, clobber=True ) calls = [ - call(f"{output_prefix}stdout", "w"), - call(f"{output_prefix}stderr", "w"), + call(f"{temp_output_dir}stdout", "w"), + call(f"{temp_output_dir}stderr", "w"), ] mock_open.assert_has_calls(calls, any_order=True) assert stdout == mock_open.return_value assert stderr == mock_open.return_value -def test_prepare_outputs_none_stdout() -> None: - output_prefix = "test_outputs_" +def test_prepare_outputs_none_stdout(temp_output_dir: str) -> None: stdout, stderr = prepare_outputs( - Outputs.NONE, Outputs.STDOUT, output_prefix, clobber=True + Outputs.NONE, Outputs.STDOUT, temp_output_dir, clobber=True ) assert stdout is None assert stderr == subprocess.DEVNULL -def test_prepare_outputs_none_stderr() -> None: - output_prefix = "test_outputs_" +def test_prepare_outputs_none_stderr(temp_output_dir: str) -> None: stdout, stderr = prepare_outputs( - Outputs.NONE, Outputs.STDERR, output_prefix, clobber=True + Outputs.NONE, Outputs.STDERR, temp_output_dir, clobber=True ) assert stderr is None assert stdout == subprocess.DEVNULL @@ -75,18 +74,19 @@ def test_prepare_outputs_none_stderr() -> None: @patch("sys.stderr", new_callable=MockStream) @patch("sys.stdout", new_callable=MockStream) def test_prepare_outputs_all_all( - mock_stdout: MockStream, mock_stderr: MockStream + mock_stdout: MockStream, + mock_stderr: MockStream, + temp_output_dir: str, ) -> None: - output_prefix = "test_outputs_" with patch("duct.__main__.TailPipe") as mock_tee_stream: mock_tee_stream.return_value.start = MagicMock() stdout, stderr = prepare_outputs( - Outputs.ALL, Outputs.ALL, output_prefix, clobber=True + Outputs.ALL, Outputs.ALL, temp_output_dir, clobber=True ) assert stdout == mock_tee_stream.return_value assert stderr == mock_tee_stream.return_value calls = [ - call(f"{output_prefix}stdout", buffer=mock_stdout.buffer), - call(f"{output_prefix}stderr", buffer=mock_stderr.buffer), + call(f"{temp_output_dir}stdout", buffer=mock_stdout.buffer), + call(f"{temp_output_dir}stderr", buffer=mock_stderr.buffer), ] mock_tee_stream.assert_has_calls(calls, any_order=True)