Files
cleveragents-core/features/git_worktree_coverage_boost.feature
T
Jeffrey Phillips Freeman 36c571db83
CI / lint (pull_request) Successful in 15s
CI / typecheck (pull_request) Successful in 30s
CI / security (pull_request) Successful in 22s
CI / quality (pull_request) Successful in 16s
CI / integration_tests (pull_request) Successful in 5m12s
CI / build (pull_request) Successful in 16s
CI / lint (push) Successful in 13s
CI / typecheck (push) Successful in 29s
CI / security (push) Successful in 23s
CI / quality (push) Successful in 16s
CI / unit_tests (pull_request) Successful in 13m42s
CI / integration_tests (push) Successful in 4m53s
CI / build (push) Successful in 16s
CI / unit_tests (push) Successful in 15m9s
CI / coverage (pull_request) Successful in 7m58s
CI / coverage (push) Successful in 8m14s
CI / docker (pull_request) Successful in 9s
CI / docker (push) Successful in 8s
feat(repo): add resource repositories
2026-02-16 21:35:54 +00:00

109 lines
4.9 KiB
Gherkin

Feature: Git worktree sandbox coverage boost
As a developer
I want to exercise uncovered edge cases in the git worktree sandbox
So that code coverage is maximised for git_worktree.py
# --- _sanitise_branch_name edge case ---
Scenario: Sanitise branch name with all-special-chars falls back to sandbox
When gwtcb _sanitise_branch_name is called with "!!!"
Then gwtcb the result should be "sandbox"
# --- create fails when path is not repo root ---
Scenario: Create fails when path is not the repository root
Given a gwtcb sandbox pointed at a non-root subdirectory
When gwtcb create is called for plan "plan-001"
Then a gwtcb SandboxCreationError should be raised
And the gwtcb sandbox should be in the "errored" state
# --- create times out ---
Scenario: Create raises SandboxCreationError on timeout
Given a gwtcb sandbox with mocked _run_git that times out
When gwtcb create is called expecting a timeout error
Then a gwtcb SandboxCreationError should be raised with message "timed out"
And the gwtcb sandbox should be in the "errored" state
# --- get_path with None worktree_path ---
Scenario: get_path raises SandboxStateError when worktree_path is None
Given a gwtcb sandbox in CREATED state with None worktree_path
When gwtcb get_path is called with "some/file.py"
Then a gwtcb SandboxStateError should be raised with message "Worktree path not set"
# --- commit with uninitialised worktree ---
Scenario: Commit raises SandboxStateError when worktree not initialised
Given a gwtcb sandbox in ACTIVE state with no worktree or branch
When gwtcb commit is called with message "should fail"
Then a gwtcb SandboxStateError should be raised with message "Worktree not initialised"
# --- commit with modified files in diff output ---
Scenario: Commit parses modified files in diff output
Given a gwtcb sandbox ready to commit with modified-file diff output
When gwtcb commit is called with message "modify files"
Then the gwtcb commit result should include changed file "src/modified.py"
And the gwtcb commit result should include added file "src/new.py"
And the gwtcb commit result should include deleted file "src/old.py"
# --- commit timeout ---
Scenario: Commit raises SandboxCommitError on timeout
Given a gwtcb sandbox in ACTIVE state ready to commit
And gwtcb _run_git is mocked to raise TimeoutExpired on commit
When gwtcb commit is called expecting a timeout error
Then a gwtcb SandboxCommitError should be raised with message "timed out"
And the gwtcb sandbox should be in the "errored" state
# --- commit CalledProcessError ---
Scenario: Commit raises SandboxCommitError on CalledProcessError
Given a gwtcb sandbox in ACTIVE state ready to commit
And gwtcb _run_git is mocked to raise CalledProcessError on commit
When gwtcb commit is called expecting a process error
Then a gwtcb SandboxCommitError should be raised with message "Failed to commit"
And the gwtcb sandbox should be in the "errored" state
# --- rollback with uninitialised worktree ---
Scenario: Rollback raises SandboxStateError when worktree not initialised
Given a gwtcb sandbox in ACTIVE state with no worktree or base commit
When gwtcb rollback is called expecting a state error
Then a gwtcb SandboxStateError should be raised with message "Worktree not initialised"
# --- rollback timeout ---
Scenario: Rollback raises SandboxRollbackError on timeout
Given a gwtcb sandbox in ACTIVE state ready to rollback
And gwtcb _run_git is mocked to raise TimeoutExpired on rollback
When gwtcb rollback is called expecting a timeout error
Then a gwtcb SandboxRollbackError should be raised with message "timed out"
And the gwtcb sandbox should be in the "errored" state
# --- rollback CalledProcessError ---
Scenario: Rollback raises SandboxRollbackError on CalledProcessError
Given a gwtcb sandbox in ACTIVE state ready to rollback
And gwtcb _run_git is mocked to raise CalledProcessError on rollback
When gwtcb rollback is called expecting a process error
Then a gwtcb SandboxRollbackError should be raised with message "Failed to rollback"
And the gwtcb sandbox should be in the "errored" state
# --- cleanup with worktree remove failure ---
Scenario: Cleanup falls back to shutil when git worktree remove fails
Given a gwtcb sandbox with a worktree directory that exists
And gwtcb _run_git is mocked to fail on worktree remove
When gwtcb cleanup is called
Then the gwtcb sandbox should be in the "cleaned_up" state
# --- cleanup with branch delete failure ---
Scenario: Cleanup warns and continues when branch delete fails
Given a gwtcb sandbox with a branch name set but no worktree directory
And gwtcb _run_git is mocked to fail on branch delete
When gwtcb cleanup is called
Then the gwtcb sandbox should be in the "cleaned_up" state