1- using System . Reactive . Linq ;
1+ using System ;
2+ using System . Linq . Expressions ;
3+ using System . Reactive . Linq ;
24using System . Threading . Tasks ;
5+ using GitHub . Api ;
6+ using GitHub . Models ;
7+ using GitHub . Services ;
38using NSubstitute ;
49using NUnit . Framework ;
5- using UnitTests ;
6- using GitHub . Services ;
7- using System . Linq . Expressions ;
8- using System ;
9- using GitHub . Models ;
10+ using Rothko ;
1011
1112public class RepositoryCloneServiceTests
1213{
13- public class TheCloneRepositoryMethod : TestBaseClass
14+ public class TheCloneRepositoryMethod
1415 {
1516 [ Test ]
1617 public async Task ClonesToRepositoryPathAsync ( )
1718 {
18- var serviceProvider = Substitutes . GetServiceProvider ( ) ;
19- var operatingSystem = serviceProvider . GetOperatingSystem ( ) ;
20- var vsGitServices = serviceProvider . GetVSGitServices ( ) ;
21- var cloneService = CreateRepositoryCloneService ( serviceProvider ) ;
19+ var operatingSystem = Substitute . For < IOperatingSystem > ( ) ;
20+ var vsGitServices = Substitute . For < IVSGitServices > ( ) ;
21+ var cloneService = CreateRepositoryCloneService ( operatingSystem , vsGitServices ) ;
2222
2323 await cloneService . CloneRepository ( "https://github.com/foo/bar" , @"c:\dev\bar" ) ;
2424
@@ -34,9 +34,9 @@ public async Task ClonesToRepositoryPathAsync()
3434 [ TestCase ( "https://enterprise.com/foo/bar" , 0 , nameof ( UsageModel . MeasuresModel . NumberOfGitHubClones ) ) ]
3535 public async Task UpdatesMetricsWhenRepositoryClonedAsync ( string cloneUrl , int numberOfCalls , string counterName )
3636 {
37- var serviceProvider = Substitutes . GetServiceProvider ( ) ;
38- var usageTracker = serviceProvider . GetUsageTracker ( ) ;
39- var cloneService = CreateRepositoryCloneService ( serviceProvider ) ;
37+ var vsGitServices = Substitute . For < IVSGitServices > ( ) ;
38+ var usageTracker = Substitute . For < IUsageTracker > ( ) ;
39+ var cloneService = CreateRepositoryCloneService ( vsGitServices : vsGitServices , usageTracker : usageTracker ) ;
4040
4141 await cloneService . CloneRepository ( cloneUrl , @"c:\dev\bar" ) ;
4242 var model = UsageModel . Create ( Guid . NewGuid ( ) ) ;
@@ -58,8 +58,9 @@ public async Task Skip_OpenRepository_When_Already_Open(string repositoryPath, s
5858 {
5959 var repositoryUrl = "https://github.com/owner/repo" ;
6060 var cloneDialogResult = new CloneDialogResult ( repositoryPath , repositoryUrl ) ;
61- var serviceProvider = Substitutes . GetServiceProvider ( ) ;
62- var operatingSystem = serviceProvider . GetOperatingSystem ( ) ;
61+ var operatingSystem = Substitute . For < IOperatingSystem > ( ) ;
62+ var serviceProvider = Substitute . For < IGitHubServiceProvider > ( ) ;
63+ var teamExplorerServices = Substitute . For < ITeamExplorerServices > ( ) ;
6364 operatingSystem . Directory . DirectoryExists ( repositoryPath ) . Returns ( true ) ;
6465 var dte = Substitute . For < EnvDTE . DTE > ( ) ;
6566 serviceProvider . GetService < EnvDTE . DTE > ( ) . Returns ( dte ) ;
@@ -68,11 +69,11 @@ public async Task Skip_OpenRepository_When_Already_Open(string repositoryPath, s
6869 {
6970 operatingSystem . Directory . DirectoryExists ( solutionPath ) . Returns ( true ) ;
7071 }
71- var cloneService = CreateRepositoryCloneService ( serviceProvider ) ;
72+ var cloneService = CreateRepositoryCloneService ( operatingSystem : operatingSystem ,
73+ teamExplorerServices : teamExplorerServices , serviceProvider : serviceProvider ) ;
7274
7375 await cloneService . CloneOrOpenRepository ( cloneDialogResult ) ;
7476
75- var teamExplorerServices = serviceProvider . GetTeamExplorerServices ( ) ;
7677 teamExplorerServices . Received ( openRepository ) . OpenRepository ( repositoryPath ) ;
7778 }
7879
@@ -91,11 +92,10 @@ public async Task UpdatesMetricsWhenCloneOrOpenRepositoryAsync(string cloneUrl,
9192 {
9293 var repositoryPath = @"c:\dev\bar" ;
9394 var cloneDialogResult = new CloneDialogResult ( repositoryPath , cloneUrl ) ;
94- var serviceProvider = Substitutes . GetServiceProvider ( ) ;
95- var operatingSystem = serviceProvider . GetOperatingSystem ( ) ;
95+ var operatingSystem = Substitute . For < IOperatingSystem > ( ) ;
96+ var usageTracker = Substitute . For < IUsageTracker > ( ) ;
9697 operatingSystem . Directory . DirectoryExists ( repositoryPath ) . Returns ( dirExists ) ;
97- var usageTracker = serviceProvider . GetUsageTracker ( ) ;
98- var cloneService = CreateRepositoryCloneService ( serviceProvider ) ;
98+ var cloneService = CreateRepositoryCloneService ( operatingSystem : operatingSystem , usageTracker : usageTracker ) ;
9999
100100 await cloneService . CloneOrOpenRepository ( cloneDialogResult ) ;
101101
@@ -108,11 +108,10 @@ await usageTracker.Received(numberOfCalls).IncrementCounter(
108108 [ TestCase ( @"c:\not_default\repo" , @"c:\default" , 0 , nameof ( UsageModel . MeasuresModel . NumberOfClonesToDefaultClonePath ) ) ]
109109 public async Task UpdatesMetricsWhenDefaultClonePath ( string targetPath , string defaultPath , int numberOfCalls , string counterName )
110110 {
111- var serviceProvider = Substitutes . GetServiceProvider ( ) ;
112- var vsGitServices = serviceProvider . GetVSGitServices ( ) ;
111+ var vsGitServices = Substitute . For < IVSGitServices > ( ) ;
113112 vsGitServices . GetLocalClonePathFromGitProvider ( ) . Returns ( defaultPath ) ;
114- var usageTracker = serviceProvider . GetUsageTracker ( ) ;
115- var cloneService = CreateRepositoryCloneService ( serviceProvider ) ;
113+ var usageTracker = Substitute . For < IUsageTracker > ( ) ;
114+ var cloneService = CreateRepositoryCloneService ( usageTracker : usageTracker , vsGitServices : vsGitServices ) ;
116115
117116 await cloneService . CloneRepository ( "https://github.com/foo/bar" , targetPath ) ;
118117 var model = UsageModel . Create ( Guid . NewGuid ( ) ) ;
@@ -125,10 +124,10 @@ await usageTracker.Received(numberOfCalls).IncrementCounter(
125124 [ TestCase ( "https://github.com/failing/url" , @"c:\dev\bar" ) ]
126125 public async Task CleansDirectoryOnCloneFailed ( string cloneUrl , string clonePath )
127126 {
128- var serviceProvider = Substitutes . GetServiceProvider ( ) ;
129- var operatingSystem = serviceProvider . GetOperatingSystem ( ) ;
130- var vsGitServices = serviceProvider . GetVSGitServices ( ) ;
131- var cloneService = CreateRepositoryCloneService ( serviceProvider ) ;
127+ var operatingSystem = Substitute . For < IOperatingSystem > ( ) ;
128+ var vsGitServices = Substitute . For < IVSGitServices > ( ) ;
129+ vsGitServices . Clone ( cloneUrl , clonePath , true ) . Returns ( x => { throw new Exception ( ) ; } ) ;
130+ var cloneService = CreateRepositoryCloneService ( operatingSystem : operatingSystem , vsGitServices : vsGitServices ) ;
132131
133132 Assert . ThrowsAsync < Exception > ( ( ) => cloneService . CloneRepository ( cloneUrl , clonePath ) ) ;
134133
@@ -137,10 +136,21 @@ public async Task CleansDirectoryOnCloneFailed(string cloneUrl, string clonePath
137136 await vsGitServices . Received ( ) . Clone ( cloneUrl , clonePath , true ) ;
138137 }
139138
140- static RepositoryCloneService CreateRepositoryCloneService ( IGitHubServiceProvider sp )
139+ static RepositoryCloneService CreateRepositoryCloneService ( IOperatingSystem operatingSystem = null ,
140+ IVSGitServices vsGitServices = null , IUsageTracker usageTracker = null ,
141+ ITeamExplorerServices teamExplorerServices = null , IGitHubServiceProvider serviceProvider = null )
141142 {
142- return new RepositoryCloneService ( sp . GetOperatingSystem ( ) , sp . GetVSGitServices ( ) , sp . GetTeamExplorerServices ( ) ,
143- sp . GetGraphQLClientFactory ( ) , sp . GetGitHubContextService ( ) , sp . GetUsageTracker ( ) , sp ) ;
143+ operatingSystem = operatingSystem ?? Substitute . For < IOperatingSystem > ( ) ;
144+ vsGitServices = vsGitServices ?? Substitute . For < IVSGitServices > ( ) ;
145+ usageTracker = usageTracker ?? Substitute . For < IUsageTracker > ( ) ;
146+ teamExplorerServices = teamExplorerServices ?? Substitute . For < ITeamExplorerServices > ( ) ;
147+ serviceProvider = serviceProvider ?? Substitute . For < IGitHubServiceProvider > ( ) ;
148+
149+ operatingSystem . Environment . ExpandEnvironmentVariables ( Args . String ) . Returns ( x => x [ 0 ] ) ;
150+
151+ return new RepositoryCloneService ( operatingSystem , vsGitServices , teamExplorerServices ,
152+ Substitute . For < IGraphQLClientFactory > ( ) , Substitute . For < IGitHubContextService > ( ) ,
153+ usageTracker , serviceProvider ) ;
144154 }
145155 }
146156}
0 commit comments