Extract interfaces for testability in CLI wrapper packages #245
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
This PR extracts interfaces from packages that directly call external CLIs or HTTP APIs, enabling unit testing without external dependencies. Callers explicitly create instances via constructors and pass them as parameters for dependency injection.
Changes
internal/worktree/worktree.goOperationsinterface with methods:Create,CreateFromExisting,RemoveForce,List,ExistsPathCLIOperationsstruct implementing the interfaceNewOperations()constructor for creating instancesinternal/git/git.goOperationsinterface with methods:PushSetUpstream,Pull,Clone,FetchBranch,BranchExists,ValidateExistingBranch,ListBranchesCLIOperationsstruct implementing the interfaceNewOperations()constructor for creating instancesinternal/claude/inline.goRunnerinterface withRunmethodCLIRunnerstruct implementing the interfaceNewRunner()constructor for creating instancesprocessTaskandexecuteTaskacceptRunnerparameter for injectioninternal/linear/client.goClientInterfacewith methods:GetIssue,SearchIssues,ListIssues,GetIssueCommentsClientimplementsClientInterfaceinternal/linear/fetcher.goFetcher.clientfield type from*ClienttoClientInterfaceNewFetcherWithClientconstructor for injecting mock clients in testsDesign Decisions
Defaultvariables and package-level convenience functionsvar _ Interface = (*impl)(nil)Issues Resolved
Test Plan
🤖 Generated with Claude Code