diff --git a/docs/changelog.rst b/docs/changelog.rst index 9b2c5f2a..bc3d800b 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -6,6 +6,13 @@ Versions follow `Semantic Versioning`_ (``..``). Version History --------------- +4.0.2 (2023-09-12) +~~~~~~~~~~~~~~~~~~ + +* Use absolute path to the report file. + + * Thanks to `@adrien-berchet `_ for reporting and for the PR. + 4.0.1 (2023-09-10) ~~~~~~~~~~~~~~~~~~ diff --git a/src/pytest_html/basereport.py b/src/pytest_html/basereport.py index 1cccc939..b160e910 100644 --- a/src/pytest_html/basereport.py +++ b/src/pytest_html/basereport.py @@ -18,7 +18,9 @@ class BaseReport: def __init__(self, report_path, config, report_data, template, css): - self._report_path = Path(os.path.expandvars(report_path)).expanduser() + self._report_path = ( + Path.cwd() / Path(os.path.expandvars(report_path)).expanduser() + ) self._report_path.parent.mkdir(parents=True, exist_ok=True) self._config = config self._template = template @@ -186,7 +188,7 @@ def pytest_sessionfinish(self, session): def pytest_terminal_summary(self, terminalreporter): terminalreporter.write_sep( "-", - f"Generated html report: file://{self._report_path.resolve().as_posix()}", + f"Generated html report: {self._report_path.as_uri()}", ) @pytest.hookimpl(trylast=True) diff --git a/testing/test_unit.py b/testing/test_unit.py index be8ef387..f82825ce 100644 --- a/testing/test_unit.py +++ b/testing/test_unit.py @@ -1,6 +1,7 @@ import importlib.resources import os import sys +from pathlib import Path import pkg_resources import pytest @@ -70,6 +71,27 @@ def pytest_html_results_summary(prefix, summary, postfix, session): result.assert_outcomes(passed=1) +def test_chdir(pytester): + pytester.makepyfile( + """ + import pytest + + @pytest.fixture + def changing_dir(tmp_path, monkeypatch): + monkeypatch.chdir(tmp_path) + + def test_function(changing_dir): + pass + """ + ) + report_path = Path("reports") / "report.html" + page = pytester.runpytest("--html", str(report_path)) + assert page.ret == 0 + assert ( + f"Generated html report: {(pytester.path / report_path).as_uri()}" + ) in page.outlines[-2] + + @pytest.fixture def css_file_path(pytester): css_one = """