fix(git-ext): honor explicit -Number 0 in PowerShell branch creation (#3412)

`-Number` defaults to 0, so the previous `-eq 0` / `-ne 0` checks could
not distinguish an unset flag from an explicit `-Number 0`: a user
requesting branch `000-...` was silently routed into auto-detection.
Switch both checks to `$PSBoundParameters.ContainsKey('Number')`, which
tests whether the flag was actually supplied — mirroring the bash twin's
empty-string sentinel (`[ -z "$BRANCH_NUMBER" ]` / `[ -n ... ]`).

Add a parity regression test to both TestCreateFeatureBash and
TestCreateFeaturePowerShell asserting `--number 0` / `-Number 0` yields
`000-zero`.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Noor ul ain
2026-07-10 17:45:09 +05:00
committed by GitHub
parent 3f7392ae32
commit dbefc66acb
2 changed files with 40 additions and 2 deletions

View File

@@ -638,6 +638,21 @@ class TestCreateFeatureBash:
assert result.returncode != 0
assert "requires updated Spec Kit core scripts" in result.stderr
def test_explicit_number_zero_is_honored(self, tmp_path: Path):
"""An explicit --number 0 is honored (yields 000), not treated as
'auto-detect'. Pins the canonical behavior the PowerShell twin must
mirror; the empty-string check (`[ -z "$BRANCH_NUMBER" ]`) already
distinguishes an unset flag from a supplied 0."""
project = _setup_project(tmp_path)
result = _run_bash(
"create-new-feature-branch.sh", project,
"--json", "--dry-run", "--number", "0", "--short-name", "zero", "Zero feature",
)
assert result.returncode == 0, result.stderr
data = json.loads(result.stdout)
assert data["BRANCH_NAME"] == "000-zero"
assert data["FEATURE_NUM"] == "000"
@pytest.mark.skipif(not HAS_PWSH, reason="pwsh not available")
class TestCreateFeaturePowerShell:
@@ -942,6 +957,23 @@ class TestCreateFeaturePowerShell:
assert result.returncode != 0
assert "requires updated Spec Kit core scripts" in result.stderr
def test_explicit_number_zero_is_honored(self, tmp_path: Path):
"""An explicit -Number 0 is honored (yields 000), matching the bash twin's
--number 0. Regression guard: -Number defaults to 0, so a bare `-eq 0`
check cannot tell an unset flag from a supplied 0 and would silently
auto-detect instead. Uses PSBoundParameters.ContainsKey('Number')."""
project = _setup_project(tmp_path)
result = _run_pwsh(
"create-new-feature-branch.ps1", project,
"-Json", "-DryRun", "-Number", "0", "-ShortName", "zero", "Zero feature",
)
assert result.returncode == 0, result.stderr
json_line = [ln for ln in result.stdout.splitlines() if ln.strip().startswith("{")]
assert json_line, f"No JSON in output: {result.stdout}"
data = json.loads(json_line[-1])
assert data["BRANCH_NAME"] == "000-zero"
assert data["FEATURE_NUM"] == "000"
# ── auto-commit.sh Tests ─────────────────────────────────────────────────────