From 82d08c46c6e58209c460140bffb0ffaa80fec46b Mon Sep 17 00:00:00 2001 From: Adrien Berchet Date: Thu, 14 Sep 2023 08:50:49 +0200 Subject: [PATCH] Fix: Use absolute path for the report (#735) * Fix: Use absolute path for the report Fixes #732 --- docs/changelog.rst | 7 +++++++ src/pytest_html/basereport.py | 6 ++++-- testing/test_unit.py | 22 ++++++++++++++++++++++ 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index 9b2c5f2..bc3d800 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 1cccc93..b160e91 100644 --- a/src/pytest_html/basereport.py +++ b/src/pytest_html/basereport.py @@ -18,7 +18,9 @@ from pytest_html.util import cleanup_unserializable 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 @@ class BaseReport: 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 be8ef38..f82825c 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 test_html_results_summary_hook(pytester): 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 = """