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

Commit 84fc60e

Browse files
committed
Factor out CreateRepositoryCloneService
1 parent a11191f commit 84fc60e

File tree

2 files changed

+42
-28
lines changed

2 files changed

+42
-28
lines changed

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

Lines changed: 18 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
using System.Linq.Expressions;
88
using System;
99
using GitHub.Models;
10-
using GitHub.Api;
1110

1211
public class RepositoryCloneServiceTests
1312
{
@@ -16,10 +15,10 @@ public class TheCloneRepositoryMethod : TestBaseClass
1615
[Test]
1716
public async Task ClonesToRepositoryPathAsync()
1817
{
19-
var serviceProvider = Substitutes.ServiceProvider;
18+
var serviceProvider = Substitutes.GetServiceProvider();
2019
var operatingSystem = serviceProvider.GetOperatingSystem();
2120
var vsGitServices = serviceProvider.GetVSGitServices();
22-
var cloneService = serviceProvider.GetRepositoryCloneService();
21+
var cloneService = CreateRepositoryCloneService(serviceProvider);
2322

2423
await cloneService.CloneRepository("https://github.com/foo/bar", @"c:\dev\bar");
2524

@@ -35,15 +34,9 @@ public async Task ClonesToRepositoryPathAsync()
3534
[TestCase("https://enterprise.com/foo/bar", 0, nameof(UsageModel.MeasuresModel.NumberOfGitHubClones))]
3635
public async Task UpdatesMetricsWhenRepositoryClonedAsync(string cloneUrl, int numberOfCalls, string counterName)
3736
{
38-
var serviceProvider = Substitutes.ServiceProvider;
39-
var operatingSystem = serviceProvider.GetOperatingSystem();
40-
var vsGitServices = serviceProvider.GetVSGitServices();
41-
var teamExplorerServices = Substitute.For<ITeamExplorerServices>();
42-
var graphqlFactory = Substitute.For<IGraphQLClientFactory>();
43-
var gitHubContextService = Substitute.For<IGitHubContextService>();
44-
var usageTracker = Substitute.For<IUsageTracker>();
45-
var cloneService = new RepositoryCloneService(operatingSystem, vsGitServices, teamExplorerServices,
46-
graphqlFactory, gitHubContextService, usageTracker);
37+
var serviceProvider = Substitutes.GetServiceProvider();
38+
var usageTracker = serviceProvider.GetUsageTracker();
39+
var cloneService = CreateRepositoryCloneService(serviceProvider);
4740

4841
await cloneService.CloneRepository(cloneUrl, @"c:\dev\bar");
4942
var model = UsageModel.Create(Guid.NewGuid());
@@ -68,16 +61,11 @@ public async Task UpdatesMetricsWhenCloneOrOpenRepositoryAsync(string cloneUrl,
6861
{
6962
var repositoryPath = @"c:\dev\bar";
7063
var cloneDialogResult = new CloneDialogResult(repositoryPath, cloneUrl);
71-
var serviceProvider = Substitutes.ServiceProvider;
64+
var serviceProvider = Substitutes.GetServiceProvider();
7265
var operatingSystem = serviceProvider.GetOperatingSystem();
7366
operatingSystem.Directory.DirectoryExists(repositoryPath).Returns(dirExists);
74-
var vsGitServices = serviceProvider.GetVSGitServices();
75-
var teamExplorerServices = Substitute.For<ITeamExplorerServices>();
76-
var graphqlFactory = Substitute.For<IGraphQLClientFactory>();
77-
var gitHubContextService = Substitute.For<IGitHubContextService>();
78-
var usageTracker = Substitute.For<IUsageTracker>();
79-
var cloneService = new RepositoryCloneService(operatingSystem, vsGitServices, teamExplorerServices,
80-
graphqlFactory, gitHubContextService, usageTracker);
67+
var usageTracker = serviceProvider.GetUsageTracker();
68+
var cloneService = CreateRepositoryCloneService(serviceProvider);
8169

8270
await cloneService.CloneOrOpenRepository(cloneDialogResult);
8371

@@ -90,16 +78,11 @@ await usageTracker.Received(numberOfCalls).IncrementCounter(
9078
[TestCase(@"c:\not_default\repo", @"c:\default", 0, nameof(UsageModel.MeasuresModel.NumberOfClonesToDefaultClonePath))]
9179
public async Task UpdatesMetricsWhenDefaultClonePath(string targetPath, string defaultPath, int numberOfCalls, string counterName)
9280
{
93-
var serviceProvider = Substitutes.ServiceProvider;
94-
var operatingSystem = serviceProvider.GetOperatingSystem();
81+
var serviceProvider = Substitutes.GetServiceProvider();
9582
var vsGitServices = serviceProvider.GetVSGitServices();
96-
var teamExplorerServices = Substitute.For<ITeamExplorerServices>();
9783
vsGitServices.GetLocalClonePathFromGitProvider().Returns(defaultPath);
98-
var graphqlFactory = Substitute.For<IGraphQLClientFactory>();
99-
var gitHubContextService = Substitute.For<IGitHubContextService>();
100-
var usageTracker = Substitute.For<IUsageTracker>();
101-
var cloneService = new RepositoryCloneService(operatingSystem, vsGitServices, teamExplorerServices,
102-
graphqlFactory, gitHubContextService, usageTracker);
84+
var usageTracker = serviceProvider.GetUsageTracker();
85+
var cloneService = CreateRepositoryCloneService(serviceProvider);
10386

10487
await cloneService.CloneRepository("https://github.com/foo/bar", targetPath);
10588
var model = UsageModel.Create(Guid.NewGuid());
@@ -108,5 +91,12 @@ await usageTracker.Received(numberOfCalls).IncrementCounter(
10891
Arg.Is<Expression<Func<UsageModel.MeasuresModel, int>>>(x =>
10992
((MemberExpression)x.Body).Member.Name == counterName));
11093
}
94+
95+
static RepositoryCloneService CreateRepositoryCloneService(IGitHubServiceProvider sp)
96+
{
97+
return new RepositoryCloneService(sp.GetOperatingSystem(), sp.GetVSGitServices(), sp.GetTeamExplorerServices(),
98+
sp.GetGraphQLClientFactory(), sp.GetGitHubContextService(), sp.GetUsageTracker());
99+
100+
}
111101
}
112102
}

test/GitHub.App.UnitTests/Substitutes.cs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,10 @@ public static IGitHubServiceProvider GetServiceProvider(
118118
avatarProvider = avatarProvider ?? Substitute.For<IAvatarProvider>();
119119
ret.GetService(typeof(IGitService)).Returns(gitservice);
120120
ret.GetService(typeof(IVSServices)).Returns(Substitute.For<IVSServices>());
121+
ret.GetService(typeof(ITeamExplorerServices)).Returns(Substitute.For<ITeamExplorerServices>());
122+
ret.GetService(typeof(IGraphQLClientFactory)).Returns(Substitute.For<IGraphQLClientFactory>());
123+
ret.GetService(typeof(IGitHubContextService)).Returns(Substitute.For<IGitHubContextService>());
124+
ret.GetService(typeof(IUsageTracker)).Returns(Substitute.For<IUsageTracker>());
121125
ret.GetService(typeof(IVSGitServices)).Returns(vsgit);
122126
ret.GetService(typeof(IOperatingSystem)).Returns(os);
123127
ret.GetService(typeof(IRepositoryCloneService)).Returns(clone);
@@ -137,6 +141,26 @@ public static IVSServices GetVSServices(this IServiceProvider provider)
137141
return provider.GetService(typeof(IVSServices)) as IVSServices;
138142
}
139143

144+
public static ITeamExplorerServices GetTeamExplorerServices(this IServiceProvider provider)
145+
{
146+
return provider.GetService(typeof(ITeamExplorerServices)) as ITeamExplorerServices;
147+
}
148+
149+
public static IGraphQLClientFactory GetGraphQLClientFactory(this IServiceProvider provider)
150+
{
151+
return provider.GetService(typeof(IGraphQLClientFactory)) as IGraphQLClientFactory;
152+
}
153+
154+
public static IGitHubContextService GetGitHubContextService(this IServiceProvider provider)
155+
{
156+
return provider.GetService(typeof(IGitHubContextService)) as IGitHubContextService;
157+
}
158+
159+
public static IUsageTracker GetUsageTracker(this IServiceProvider provider)
160+
{
161+
return provider.GetService(typeof(IUsageTracker)) as IUsageTracker;
162+
}
163+
140164
public static IVSGitServices GetVSGitServices(this IServiceProvider provider)
141165
{
142166
return provider.GetService(typeof(IVSGitServices)) as IVSGitServices;

0 commit comments

Comments
 (0)