Follow-up to Phase 1 (#22). Cover the areas left out because they touch I/O, mirroring the timetracker-cli phase 2 setup.
HttpService — add an injectable client factory seam and test the work-item / pull-request paths (success + failure) against a stub message handler. No network.
ConfigService — honor a config-directory override env var so Save/Load, the merge behavior, and ResolveProject/ResolveUserId can be tested against a temp store.
ActionHelpers.ResolvePullRequestUrl — cover the build-from-config fallback path (org URL + project/repo), enabled by the config seam.
Follow-up to Phase 1 (#22). Cover the areas left out because they touch I/O, mirroring the timetracker-cli phase 2 setup.
HttpService— add an injectable client factory seam and test the work-item / pull-request paths (success + failure) against a stub message handler. No network.ConfigService— honor a config-directory override env var so Save/Load, the merge behavior, andResolveProject/ResolveUserIdcan be tested against a temp store.ActionHelpers.ResolvePullRequestUrl— cover the build-from-config fallback path (org URL + project/repo), enabled by the config seam.