From ca406e06738f3acfb58a2f92be338ab469820dbf Mon Sep 17 00:00:00 2001 From: Polianok Bogdan Date: Tue, 19 Sep 2023 20:05:29 +0300 Subject: [PATCH] add extra details print (#5) --- tests/_utils.py | 8 +- tests/test_gitlab_reporter.py | 91 +++++++++++++++++++++++ vedro_gitlab_reporter/_gitlab_reporter.py | 9 +++ 3 files changed, 106 insertions(+), 2 deletions(-) diff --git a/tests/_utils.py b/tests/_utils.py index da5ab30..d9f2470 100644 --- a/tests/_utils.py +++ b/tests/_utils.py @@ -97,8 +97,12 @@ def make_step_result(vstep: Optional[VirtualStep] = None) -> StepResult: return StepResult(vstep or make_vstep()) -def make_scenario_result(vscenario: Optional[VirtualScenario] = None) -> ScenarioResult: - return ScenarioResult(vscenario or make_vscenario()) +def make_scenario_result(vscenario: Optional[VirtualScenario] = None, + extra_details: str = None) -> ScenarioResult: + scenario_result = ScenarioResult(vscenario or make_vscenario()) + if extra_details: + scenario_result.add_extra_details(extra_details) + return scenario_result def make_aggregated_result(scenario_result: Optional[ScenarioResult] = None) -> AggregatedResult: diff --git a/tests/test_gitlab_reporter.py b/tests/test_gitlab_reporter.py index 3b245bd..b9ffeb5 100644 --- a/tests/test_gitlab_reporter.py +++ b/tests/test_gitlab_reporter.py @@ -113,6 +113,54 @@ async def test_scenario_passed(*, dispatcher: Dispatcher, printer_: Mock): ] +@pytest.mark.usefixtures(gitlab_reporter.__name__) +async def test_scenario_passed_with_extra_details(*, dispatcher: Dispatcher, printer_: Mock): + with given: + await fire_arg_parsed_event(dispatcher) + + extra_details = '
' + scenario_result = make_scenario_result(extra_details=extra_details).mark_passed() + aggregated_result = make_aggregated_result(scenario_result) + event = ScenarioReportedEvent(aggregated_result) + + with when: + await dispatcher.fire(event) + + with then: + assert printer_.mock_calls == [ + call.print_scenario_subject(aggregated_result.scenario.subject, + ScenarioStatus.PASSED, + elapsed=aggregated_result.elapsed, + prefix=" "), + call.print_scenario_extra_details([extra_details], + prefix=" ") + ] + + +@pytest.mark.usefixtures(gitlab_reporter.__name__) +async def test_scenario_failed_with_extra_details(*, dispatcher: Dispatcher, printer_: Mock): + with given: + await fire_arg_parsed_event(dispatcher) + + extra_details = '
' + scenario_result = make_scenario_result(extra_details=extra_details).mark_failed() + aggregated_result = make_aggregated_result(scenario_result) + event = ScenarioReportedEvent(aggregated_result) + + with when: + await dispatcher.fire(event) + + with then: + assert printer_.mock_calls == [ + call.print_scenario_subject(aggregated_result.scenario.subject, + ScenarioStatus.FAILED, + elapsed=aggregated_result.elapsed, + prefix=" "), + call.print_scenario_extra_details([extra_details], + prefix=" ") + ] + + @pytest.mark.usefixtures(gitlab_reporter.__name__) async def test_scenario_failed(*, dispatcher: Dispatcher, printer_: Mock): with given: @@ -170,6 +218,49 @@ async def test_scenario_passed_aggregated_result(*, dispatcher: Dispatcher, prin ] +@pytest.mark.usefixtures(gitlab_reporter.__name__) +async def test_scenario_passed_aggregated_result_with_extra_details(*, dispatcher: Dispatcher, + printer_: Mock): + with given: + await fire_arg_parsed_event(dispatcher) + + extra_details_1 = '' + extra_details_2 = '' + scenario_results = [ + make_scenario_result(extra_details=extra_details_1).mark_passed(), + make_scenario_result(extra_details=extra_details_2).mark_passed(), + ] + + aggregated_result = AggregatedResult.from_existing(scenario_results[0], scenario_results) + event = ScenarioReportedEvent(aggregated_result) + + with when: + await dispatcher.fire(event) + + with then: + assert printer_.mock_calls == [ + call.print_scenario_subject(aggregated_result.scenario.subject, + ScenarioStatus.PASSED, + elapsed=None, + prefix=" "), + + call.print_scenario_subject(aggregated_result.scenario_results[0].scenario.subject, + ScenarioStatus.PASSED, + elapsed=scenario_results[0].elapsed, + prefix=" │\n ├─[1/2] "), + call.print_scenario_extra_details([extra_details_1], + prefix=" "), + call.print_scenario_subject(aggregated_result.scenario_results[1].scenario.subject, + ScenarioStatus.PASSED, + elapsed=scenario_results[1].elapsed, + prefix=" │\n ├─[2/2] "), + call.print_scenario_extra_details([extra_details_2], + prefix=" "), + + call.print_empty_line(), + ] + + @pytest.mark.usefixtures(gitlab_reporter.__name__) async def test_scenario_unknown_status(*, dispatcher: Dispatcher, printer_: Mock): with given: diff --git a/vedro_gitlab_reporter/_gitlab_reporter.py b/vedro_gitlab_reporter/_gitlab_reporter.py index 3384d12..f6c69ba 100644 --- a/vedro_gitlab_reporter/_gitlab_reporter.py +++ b/vedro_gitlab_reporter/_gitlab_reporter.py @@ -104,12 +104,19 @@ def _print_scenario_result(self, scenario_result: ScenarioResult, *, elif scenario_result.is_failed(): self._print_scenario_failed(scenario_result, index=index, prefix=prefix) + def _print_scenario_extras(self, scenario_result: ScenarioResult, *, prefix: str = "") -> None: + if scenario_result.extra_details: + self._printer.print_scenario_extra_details(scenario_result.extra_details, + prefix=prefix) + def _print_scenario_passed(self, scenario_result: ScenarioResult, *, index: int = 0, prefix: str = "") -> None: self._printer.print_scenario_subject(scenario_result.scenario.subject, scenario_result.status, elapsed=scenario_result.elapsed, prefix=prefix) + self._print_scenario_extras(scenario_result, + prefix=self._prefix_to_indent(prefix, indent=2)) def _print_scenario_failed(self, scenario_result: ScenarioResult, *, index: int = 0, prefix: str = "") -> None: @@ -117,6 +124,8 @@ def _print_scenario_failed(self, scenario_result: ScenarioResult, *, scenario_result.status, elapsed=scenario_result.elapsed, prefix=prefix) + self._print_scenario_extras(scenario_result, + prefix=self._prefix_to_indent(prefix, indent=2)) if self._collapsable_mode == GitlabCollapsableMode.STEPS: prefix = self._prefix_to_indent(prefix, indent=2)