[#241] Extract ShellRunning protocol for test mocking#277
Merged
Conversation
- Add ShellRunning protocol with MockShellRunner, replacing real git in PackFetcherTests and adding mock-based LockfileOperations tests - Change ShellRunner → any ShellRunning across 16 production files - Extract shared makeTmpDir and makeRegistryEntry test helpers
- Record additionalEnvironment in MockShellRunner call structs - Remove duplicate default parameter values from ShellRunner - Extract makeUpdateFixture helper for PackFetcher update tests - Add missing error-path tests: refNotFound and updateFailed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Extracts a
ShellRunningprotocol from the concreteShellRunnerstruct, enabling test mocks that avoid real process spawning. This eliminates flaky CI failures caused by 1Password SSH agent intercepting git signing inPackFetcherOperationTests, and adds mock-based coverage forLockfileOperationsgit checkout/retry logic.Follows the same pattern established by the
ClaudeCLIprotocol extraction in PR #239.Closes #241
Changes
protocol ShellRunning: SendableinShellRunner.swiftwith protocol extension for default parameter values; conformShellRunner: ShellRunninglet shell: ShellRunner→let shell: any ShellRunningacross 16 production files (Core, ExternalPack, Install modules)MockShellRunnerinTestHelpers.swiftfollowing theMockClaudeCLIpattern (records calls, returns canned results viarunResults/shellResultsqueues)PackFetcherOperationTestswith mock-based unit tests covering fetch, update, currentCommit, and retry logicLockfileOperationsTestsforcheckoutLockedCommitsgit checkout/fetch retry pathsmakeTmpDir(label:),makeRegistryEntry, andmakeLocalRegistryEntrytest helpers to eliminate duplication across 8 test filesTest plan
swift testpasses locally (806 tests, 0 failures)swiftformat --lint .andswiftlintpass without violationsmcs sync,mcs doctor)Checklist for engine changes
Not applicable — no engine behavior changes, only type signature widening and test improvements.