Files
cleveragents-core/features/tdd_server_connect_atomic_writes.feature
hurui200320 1878998b7a refactor(testing): rename tdd_bug/tdd_bug_N tags to tdd_issue/tdd_issue_N
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
2026-03-27 05:58:35 +00:00

45 lines
2.5 KiB
Gherkin

@tdd_expected_fail @tdd_issue @tdd_issue_993
Feature: TDD Issue #993 — server_connect writes three config values non-atomically
As a developer
I want to verify that server_connect writes all three config values atomically
So that a partial failure does not leave the configuration in a half-written state
# This test captures bug #993: server_connect in server.py makes three
# sequential set_value() calls (server.url, server.namespace, server.tls-verify)
# with no try/except, no transaction, and no rollback. If the second call
# fails (e.g. disk full, permissions error), server.url is already persisted
# but server.namespace and server.tls-verify retain their old values. The
# config is left in a half-written state.
#
# Expected behavior: all three config values are written atomically either
# all succeed or all fail (rollback to original state).
#
# This test uses the @tdd_expected_fail tag until the fix in #993 is merged.
# The tag inverts the result so CI passes while the bug is still unfixed.
# See CONTRIBUTING.md > Bug Fix Workflow > TDD Issue Test Tags.
Scenario: Config remains unchanged when second set_value fails during server_connect
Given a fresh config directory for atomic write test
And the config has pre-existing server values
When I invoke server_connect but set_value fails on the second call
Then an error should have been raised during server_connect
And the config should have rolled back server.url to its original value
And the config should still have the original server.namespace
And the config should still have the original server.tls-verify
Scenario: Config remains unchanged when third set_value fails during server_connect
Given a fresh config directory for atomic write test
And the config has pre-existing server values
When I invoke server_connect but set_value fails on the third call
Then an error should have been raised during server_connect
And the config should have rolled back server.url to its original value
And the config should have rolled back server.namespace to its original value
And the config should still have the original server.tls-verify
Scenario: No partial server.url persisted when namespace write raises
Given a fresh config directory for atomic write test
And the config has no server values
When I invoke server_connect but set_value fails on the second call
Then an error should have been raised during server_connect
And the config should not contain a server.url value