Skip to content
This repository was archived by the owner on Jun 21, 2023. It is now read-only.

Commit 99d1177

Browse files
committed
Remove GitClient's dependency on GitService
Pass IGitService to GitClient's constructor. Fix tests for GitClient.
1 parent ab396da commit 99d1177

File tree

2 files changed

+27
-16
lines changed

2 files changed

+27
-16
lines changed

src/GitHub.App/Services/GitClient.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,18 @@ public class GitClient : IGitClient
1919
{
2020
const string defaultOriginName = "origin";
2121
static readonly ILogger log = LogManager.ForContext<GitClient>();
22+
readonly IGitService gitService;
2223
readonly PullOptions pullOptions;
2324
readonly PushOptions pushOptions;
2425
readonly FetchOptions fetchOptions;
2526

2627
[ImportingConstructor]
27-
public GitClient(IGitHubCredentialProvider credentialProvider)
28+
public GitClient(IGitHubCredentialProvider credentialProvider, IGitService gitService)
2829
{
2930
Guard.ArgumentNotNull(credentialProvider, nameof(credentialProvider));
31+
Guard.ArgumentNotNull(gitService, nameof(gitService));
32+
33+
this.gitService = gitService;
3034

3135
pushOptions = new PushOptions { CredentialsProvider = credentialProvider.HandleCredentials };
3236
fetchOptions = new FetchOptions { CredentialsProvider = credentialProvider.HandleCredentials };
@@ -338,7 +342,7 @@ public Task<Remote> GetHttpRemote(IRepository repo, string remote)
338342

339343
return Task.Factory.StartNew(() =>
340344
{
341-
var uri = GitService.GitServiceHelper.GetRemoteUri(repo, remote);
345+
var uri = gitService.GetRemoteUri(repo, remote);
342346
var remoteName = uri.IsHypertextTransferProtocol ? remote : remote + "-http";
343347
var ret = repo.Network.Remotes[remoteName];
344348
if (ret == null)

test/UnitTests/GitHub.App/Services/GitClientTests.cs

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public async Task RetrieveStatus(FileStatus fileStatus, bool expect)
2424
repo.Head.Returns(Substitute.For<Branch>());
2525
var treeEntry = null as TreeEntry;
2626
repo.Head[path].Returns(treeEntry);
27-
var gitClient = new GitClient(Substitute.For<IGitHubCredentialProvider>());
27+
var gitClient = CreateGitClient();
2828

2929
var modified = await gitClient.IsModified(repo, path, null);
3030

@@ -40,7 +40,7 @@ public async Task TreeEntry_Null_False()
4040
repo.Head.Returns(Substitute.For<Branch>());
4141
var treeEntry = null as TreeEntry;
4242
repo.Head[path].Returns(treeEntry);
43-
var gitClient = new GitClient(Substitute.For<IGitHubCredentialProvider>());
43+
var gitClient = CreateGitClient();
4444

4545
var modified = await gitClient.IsModified(repo, path, null);
4646

@@ -58,7 +58,7 @@ public async Task TreeEntryTarget_GitLink_False()
5858
treeEntry.TargetType.Returns(TreeEntryTargetType.GitLink);
5959
treeEntry.Target.Returns(Substitute.For<GitLink>());
6060
repo.Head[path].Returns(treeEntry);
61-
var gitClient = new GitClient(Substitute.For<IGitHubCredentialProvider>());
61+
var gitClient = CreateGitClient();
6262

6363
var modified = await gitClient.IsModified(repo, path, null);
6464

@@ -83,7 +83,7 @@ public async Task ContentChanges(int linesAdded, int linesDeleted, bool expected
8383
changes.LinesAdded.Returns(linesAdded);
8484
changes.LinesDeleted.Returns(linesDeleted);
8585
repo.Diff.Compare(null, null).ReturnsForAnyArgs(changes);
86-
var gitClient = new GitClient(Substitute.For<IGitHubCredentialProvider>());
86+
var gitClient = CreateGitClient();
8787

8888
var modified = await gitClient.IsModified(repo, path, null);
8989

@@ -98,7 +98,7 @@ public class TheIsHeadPushedMethod : TestBaseClass
9898
[TestCase(null, false)]
9999
public async Task IsHeadPushed(int? aheadBy, bool expected)
100100
{
101-
var gitClient = new GitClient(Substitute.For<IGitHubCredentialProvider>());
101+
var gitClient = CreateGitClient();
102102
var repository = MockTrackedBranchRepository(aheadBy);
103103

104104
var isHeadPushed = await gitClient.IsHeadPushed(repository);
@@ -129,7 +129,7 @@ public async Task PushesToDefaultOrigin()
129129
var repository = Substitute.For<IRepository>();
130130
repository.Head.Returns(head);
131131
repository.Network.Remotes["origin"].Returns(origin);
132-
var gitClient = new GitClient(Substitute.For<IGitHubCredentialProvider>());
132+
var gitClient = CreateGitClient();
133133

134134
await gitClient.Push(repository, "master", "origin");
135135

@@ -140,7 +140,7 @@ public async Task PushesToDefaultOrigin()
140140
public async Task DoesNotPushEmptyRepository()
141141
{
142142
var repository = Substitute.For<IRepository>();
143-
var gitClient = new GitClient(Substitute.For<IGitHubCredentialProvider>());
143+
var gitClient = CreateGitClient();
144144

145145
await gitClient.Push(repository, "master", "origin");
146146

@@ -157,7 +157,7 @@ public async Task SetsTheConfigToTheRemoteBranch()
157157
var config = Substitute.For<Configuration>();
158158
var repository = Substitute.For<IRepository>();
159159
repository.Config.Returns(config);
160-
var gitClient = new GitClient(Substitute.For<IGitHubCredentialProvider>());
160+
var gitClient = CreateGitClient();
161161

162162
await gitClient.SetRemote(repository, "origin", new Uri("https://github.com/foo/bar"));
163163

@@ -183,7 +183,7 @@ public async Task SetsTheRemoteTrackingBranch()
183183
branches["refs/heads/master"].Returns(localBranch);
184184
branches["refs/remotes/origin/master"].Returns(remoteBranch);
185185

186-
var gitClient = new GitClient(Substitute.For<IGitHubCredentialProvider>());
186+
var gitClient = CreateGitClient();
187187

188188
await gitClient.SetTrackingBranch(repository, "master", "origin");
189189

@@ -200,7 +200,7 @@ public async Task FetchUsingHttps(string repoUrl, string expectFetchUrl)
200200
var repo = Substitute.For<IRepository>();
201201
var uri = new UriString(repoUrl);
202202
var refSpec = "refSpec";
203-
var gitClient = new GitClient(Substitute.For<IGitHubCredentialProvider>());
203+
var gitClient = CreateGitClient();
204204
var expectUrl = UriString.ToUriString(uri.ToRepositoryUrl());
205205

206206
await gitClient.Fetch(repo, uri, refSpec);
@@ -219,7 +219,7 @@ public async Task UseOriginWhenPossible(string fetchUrl, string originUrl, strin
219219
repo.Network.Remotes["origin"].Returns(remote);
220220
var fetchUri = new UriString(fetchUrl);
221221
var refSpec = "refSpec";
222-
var gitClient = new GitClient(Substitute.For<IGitHubCredentialProvider>());
222+
var gitClient = CreateGitClient();
223223

224224
await gitClient.Fetch(repo, fetchUri, refSpec);
225225

@@ -246,7 +246,7 @@ public async Task LocalBaseHeadAndMergeBase_DontFetch()
246246
var baseRef = "master";
247247
var pullNumber = 0;
248248
var repo = MockRepo(baseSha, headSha, expectMergeBaseSha);
249-
var gitClient = new GitClient(Substitute.For<IGitHubCredentialProvider>());
249+
var gitClient = CreateGitClient();
250250

251251
var mergeBaseSha = await gitClient.GetPullRequestMergeBase(repo, targetCloneUrl, baseSha, headSha, baseRef, pullNumber);
252252

@@ -268,7 +268,7 @@ public async Task WhenToFetch(string baseSha, string headSha, string mergeBaseSh
268268
var repo = MockRepo(baseSha, headSha, mergeBaseSha);
269269
var remote = Substitute.For<Remote>();
270270
repo.Network.Remotes.Add(null, null).ReturnsForAnyArgs(remote);
271-
var gitClient = new GitClient(Substitute.For<IGitHubCredentialProvider>());
271+
var gitClient = CreateGitClient();
272272

273273
try
274274
{
@@ -291,7 +291,7 @@ public async Task WhatToFetch(string baseSha, string headSha, string mergeBaseSh
291291
{
292292
var repo = MockRepo(baseSha, headSha, mergeBaseSha);
293293
var targetCloneUri = new UriString("https://github.com/owner/repo");
294-
var gitClient = new GitClient(Substitute.For<IGitHubCredentialProvider>());
294+
var gitClient = CreateGitClient();
295295

296296
try
297297
{
@@ -326,4 +326,11 @@ static IRepository MockRepo(string baseSha, string headSha, string mergeBaseSha)
326326
return repo;
327327
}
328328
}
329+
330+
static GitClient CreateGitClient()
331+
{
332+
return new GitClient(
333+
Substitute.For<IGitHubCredentialProvider>(),
334+
Substitute.For<IGitService>());
335+
}
329336
}

0 commit comments

Comments
 (0)