1878998b7a
CI / benchmark-publish (pull_request) Has been skipped
CI / build (pull_request) Successful in 25s
CI / lint (pull_request) Successful in 3m19s
CI / typecheck (pull_request) Successful in 3m56s
CI / security (pull_request) Successful in 4m6s
CI / quality (pull_request) Successful in 4m10s
CI / integration_tests (pull_request) Successful in 7m20s
CI / unit_tests (pull_request) Successful in 7m44s
CI / docker (pull_request) Successful in 1m8s
CI / e2e_tests (pull_request) Successful in 13m1s
CI / coverage (pull_request) Successful in 12m25s
CI / status-check (pull_request) Successful in 1s
CI / build (push) Successful in 26s
CI / lint (push) Successful in 3m31s
CI / quality (push) Successful in 3m40s
CI / typecheck (push) Successful in 3m57s
CI / benchmark-regression (push) Has been skipped
CI / security (push) Successful in 4m1s
CI / integration_tests (push) Successful in 8m55s
CI / unit_tests (push) Successful in 9m14s
CI / docker (push) Successful in 9s
CI / e2e_tests (push) Successful in 11m42s
CI / coverage (push) Successful in 11m37s
CI / status-check (push) Successful in 4s
CI / benchmark-publish (push) Successful in 29m25s
CI / benchmark-regression (pull_request) Successful in 54m8s
Rename the TDD tag system from tdd_bug/tdd_bug_<N> to tdd_issue/tdd_issue_<N> across the entire codebase. The tdd_expected_fail tag is unchanged. The TDD expected-failure workflow is not limited to bug fixes — it applies equally to any issue type (features, tasks, refactors). The _bug suffix was misleading and narrowed the perceived scope. The new _issue suffix accurately reflects that the TDD tagging system applies to any Forgejo issue. Changes span 92 files: - features/environment.py: validate_tdd_tags(), should_invert_result(), and apply_tdd_inversion() updated — regex, variables, error messages - robot/tdd_expected_fail_listener.py: _validate_tdd_tags(), _should_invert_result(), start_test(), end_test() updated consistently - 33 Behave .feature files: all @tdd_bug/@tdd_bug_<N> tags renamed - 29 Robot .robot files: all tdd_bug/tdd_bug_<N> tags renamed - 3 Robot fixture files renamed (tdd_bug_alone, tdd_missing_tdd_bug, tdd_expected_fail_missing_bug_n) with content and references updated - Tag validation tests and helpers updated (function names, command dispatch keys, output strings, fixture references) - CONTRIBUTING.md: section renamed from 'TDD Bug Test Tags' to 'TDD Issue Test Tags', all tag references and examples updated - noxfile.py: comment references updated - Step definition files, mock helpers, and benchmark files: docstring references updated ISSUES CLOSED: #965
66 lines
2.1 KiB
Python
66 lines
2.1 KiB
Python
"""Shared mock helpers for TDD tag validation tests.
|
|
|
|
Provides ``make_mock_scenario`` — a factory for lightweight mock
|
|
``Scenario`` objects used by both the Behave step definitions
|
|
(``features/steps/tdd_tag_validation_steps.py``) and the Robot
|
|
Framework integration test helper (``robot/helper_tdd_tag_validation.py``).
|
|
|
|
Centralising the mock builder eliminates duplication and ensures both
|
|
test suites exercise ``apply_tdd_inversion`` with identically-shaped
|
|
mock objects.
|
|
|
|
See CONTRIBUTING.md > TDD Issue Test Tags for the three-tag specification.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from unittest.mock import MagicMock
|
|
|
|
from behave.model import Status
|
|
|
|
|
|
def make_mock_scenario(
|
|
tags: list[str],
|
|
steps_passed: bool = True,
|
|
hook_failed: bool = False,
|
|
was_dry_run: bool = False,
|
|
step_exception: BaseException | None = None,
|
|
) -> MagicMock:
|
|
"""Build a lightweight mock ``Scenario`` for ``apply_tdd_inversion`` tests.
|
|
|
|
Args:
|
|
tags: The effective tags to place on the scenario.
|
|
steps_passed: When ``True`` every step has ``Status.passed``.
|
|
When ``False`` the first step has ``Status.failed`` with
|
|
*step_exception* (defaulting to ``AssertionError``).
|
|
hook_failed: Simulates an infrastructure/hook error.
|
|
was_dry_run: Simulates ``--dry-run`` mode.
|
|
step_exception: The exception attached to the failed step when
|
|
*steps_passed* is ``False``. Defaults to ``AssertionError``.
|
|
|
|
Returns:
|
|
A ``MagicMock`` configured to look like a Behave ``Scenario``.
|
|
"""
|
|
scenario = MagicMock()
|
|
scenario.effective_tags = tags
|
|
scenario.name = "mock-scenario"
|
|
scenario.hook_failed = hook_failed
|
|
scenario.was_dry_run = was_dry_run
|
|
|
|
mock_step = MagicMock()
|
|
if steps_passed:
|
|
mock_step.status = Status.passed
|
|
mock_step.exception = None
|
|
else:
|
|
mock_step.status = Status.failed
|
|
mock_step.exception = (
|
|
step_exception
|
|
if step_exception is not None
|
|
else AssertionError("simulated assertion failure")
|
|
)
|
|
scenario.all_steps = [mock_step]
|
|
return scenario
|
|
|
|
|
|
__all__: list[str] = ["make_mock_scenario"]
|