@@ -111,15 +111,13 @@ public async Task Path_Is_Initialized()
111
111
}
112
112
113
113
[ Test ]
114
- public async Task Repository_Name_Is_Appended_To_Base_Path ( )
114
+ public async Task Owner_And_Repository_Name_Is_Appended_To_Base_Path ( )
115
115
{
116
116
var target = CreateTarget ( ) ;
117
- var repository = Substitute . For < IRepositoryModel > ( ) ;
118
117
119
- repository . Name . Returns ( "repo" ) ;
120
- SetRepository ( target . GitHubTab , repository ) ;
118
+ SetRepository ( target . GitHubTab , CreateRepositoryModel ( "owner" , "repo" ) ) ;
121
119
122
- Assert . That ( target . Path , Is . EqualTo ( "d:\\ efault\\ path\\ repo" ) ) ;
120
+ Assert . That ( target . Path , Is . EqualTo ( "d:\\ efault\\ path\\ owner \\ repo" ) ) ;
123
121
}
124
122
125
123
[ Test ]
@@ -136,10 +134,7 @@ public async Task PathError_Is_Not_Set_When_No_Repository_Selected()
136
134
public async Task PathError_Is_Set_For_Existing_Destination ( )
137
135
{
138
136
var target = CreateTarget ( ) ;
139
- var repository = Substitute . For < IRepositoryModel > ( ) ;
140
-
141
- repository . Name . Returns ( "repo" ) ;
142
- SetRepository ( target . GitHubTab , repository ) ;
137
+ SetRepository ( target . GitHubTab , CreateRepositoryModel ( "owner" , "repo" ) ) ;
143
138
target . Path = "d:\\ exists" ;
144
139
145
140
Assert . That ( target . PathError , Is . EqualTo ( Resources . DestinationAlreadyExists ) ) ;
@@ -149,13 +144,47 @@ public async Task PathError_Is_Set_For_Existing_Destination()
149
144
public async Task Repository_Name_Replaces_Last_Part_Of_Non_Base_Path ( )
150
145
{
151
146
var target = CreateTarget ( ) ;
152
- var repository = Substitute . For < IRepositoryModel > ( ) ;
153
147
154
- target . Path = "d:\\ efault\\ foo" ;
155
- repository . Name . Returns ( "repo" ) ;
156
- SetRepository ( target . GitHubTab , repository ) ;
148
+ var owner = "owner" ;
149
+ target . Path = "d:\\ efault" ;
150
+ SetRepository ( target . GitHubTab , CreateRepositoryModel ( owner , "name" ) ) ;
151
+ target . Path = $ "d:\\ efault\\ { owner } \\ foo";
152
+ SetRepository ( target . GitHubTab , CreateRepositoryModel ( owner , "repo" ) ) ;
153
+
154
+ Assert . That ( target . Path , Is . EqualTo ( $ "d:\\ efault\\ { owner } \\ repo") ) ;
155
+ }
156
+
157
+ [ TestCase ( "c:\\ base" , "owner1/repo1" , "c:\\ base\\ owner1\\ repo1" , "owner2/repo2" , "c:\\ base\\ owner2\\ repo2" ,
158
+ Description = "Path unchanged" ) ]
159
+ [ TestCase ( "c:\\ base" , "owner1/repo1" , "c:\\ base\\ owner1\\ changed" , "owner2/repo2" , "c:\\ base\\ owner2\\ repo2" ,
160
+ Description = "Repo name changed" ) ]
161
+ [ TestCase ( "c:\\ base" , "owner1/repo1" , "c:\\ base\\ owner1" , "owner2/repo2" , "c:\\ base\\ owner2\\ repo2" ,
162
+ Description = "Repo name deleted" ) ]
163
+ [ TestCase ( "c:\\ base" , "owner1/repo1" , "c:\\ base" , "owner2/repo2" , "c:\\ base\\ owner2\\ repo2" ,
164
+ Description = "Base path reverted" ) ]
165
+
166
+ [ TestCase ( "c:\\ base" , "owner1/repo1" , "c:\\ new\\ base\\ owner1\\ changed" , "owner2/repo2" , "c:\\ new\\ base\\ owner2\\ repo2" ,
167
+ Description = "Base path and repo name changed" ) ]
168
+ [ TestCase ( "c:\\ base" , "owner1/repo1" , "c:\\ new\\ base\\ owner1" , "owner2/repo2" , "c:\\ new\\ base\\ owner2\\ repo2" ,
169
+ Description = "Base path changed and repo name deleted" ) ]
170
+ [ TestCase ( "c:\\ base" , "owner1/repo1" , "c:\\ new\\ base" , "owner2/repo2" , "c:\\ new\\ base\\ owner2\\ repo2" ,
171
+ Description = "Base path changed and repo owner/name deleted" ) ]
172
+
173
+ [ TestCase ( "c:\\ base" , "owner1/repo1" , "" , "owner2/repo2" , "c:\\ base\\ owner2\\ repo2" ,
174
+ Description = "Base path cleared" ) ]
175
+ [ TestCase ( "c:\\ base" , "owner1/repo1" , "c:\\ base\\ repo1" , "owner2/repo2" , "c:\\ base\\ owner2\\ repo2" ,
176
+ Description = "Owner deleted" ) ]
177
+ [ TestCase ( "c:\\ base" , "same/same" , "c:\\ base\\ same\\ same" , "owner2/repo2" , "c:\\ base\\ owner2\\ repo2" ,
178
+ Description = "Owner and repo have same name" ) ]
179
+ public async Task User_Edits_Path ( string defaultClonePath , string repo1 , string userPath , string repo2 , string expectPath )
180
+ {
181
+ var target = CreateTarget ( defaultClonePath : defaultClonePath ) ;
182
+ SetRepository ( target . GitHubTab , CreateRepositoryModel ( repo1 ) ) ;
183
+ target . Path = userPath ;
184
+
185
+ SetRepository ( target . GitHubTab , CreateRepositoryModel ( repo2 ) ) ;
157
186
158
- Assert . That ( target . Path , Is . EqualTo ( "d: \\ efault \\ repo" ) ) ;
187
+ Assert . That ( target . Path , Is . EqualTo ( expectPath ) ) ;
159
188
}
160
189
161
190
[ Test ]
@@ -175,7 +204,7 @@ public async Task Clone_Is_Enabled_When_Repository_Selected()
175
204
176
205
await target . InitializeAsync ( null ) ;
177
206
178
- SetRepository ( target . GitHubTab , Substitute . For < IRepositoryModel > ( ) ) ;
207
+ SetRepository ( target . GitHubTab , CreateRepositoryModel ( ) ) ;
179
208
180
209
Assert . That ( target . Clone . CanExecute ( null ) , Is . True ) ;
181
210
}
@@ -187,7 +216,7 @@ public async Task Clone_Is_Disabled_When_Has_PathError()
187
216
188
217
await target . InitializeAsync ( null ) ;
189
218
190
- SetRepository ( target . GitHubTab , Substitute . For < IRepositoryModel > ( ) ) ;
219
+ SetRepository ( target . GitHubTab , CreateRepositoryModel ( ) ) ;
191
220
Assert . That ( target . Clone . CanExecute ( null ) , Is . True ) ;
192
221
193
222
target . Path = "d:\\ exists" ;
@@ -233,10 +262,10 @@ static IRepositorySelectViewModel CreateSelectViewModel()
233
262
return result ;
234
263
}
235
264
236
- static IRepositoryCloneService CreateRepositoryCloneService ( )
265
+ static IRepositoryCloneService CreateRepositoryCloneService ( string defaultClonePath )
237
266
{
238
267
var result = Substitute . For < IRepositoryCloneService > ( ) ;
239
- result . DefaultClonePath . Returns ( "d: \\ efault \\ path" ) ;
268
+ result . DefaultClonePath . Returns ( defaultClonePath ) ;
240
269
result . DestinationExists ( "d:\\ exists" ) . Returns ( true ) ;
241
270
return result ;
242
271
}
@@ -247,11 +276,12 @@ static RepositoryCloneViewModel CreateTarget(
247
276
IRepositoryCloneService service = null ,
248
277
IRepositorySelectViewModel gitHubTab = null ,
249
278
IRepositorySelectViewModel enterpriseTab = null ,
250
- IRepositoryUrlViewModel urlTab = null )
279
+ IRepositoryUrlViewModel urlTab = null ,
280
+ string defaultClonePath = "d:\\ efault\\ path" )
251
281
{
252
282
os = os ?? Substitute . For < IOperatingSystem > ( ) ;
253
283
connectionManager = connectionManager ?? CreateConnectionManager ( "https://github.com" ) ;
254
- service = service ?? CreateRepositoryCloneService ( ) ;
284
+ service = service ?? CreateRepositoryCloneService ( defaultClonePath ) ;
255
285
gitHubTab = gitHubTab ?? CreateSelectViewModel ( ) ;
256
286
enterpriseTab = enterpriseTab ?? CreateSelectViewModel ( ) ;
257
287
urlTab = urlTab ?? Substitute . For < IRepositoryUrlViewModel > ( ) ;
@@ -264,5 +294,20 @@ static RepositoryCloneViewModel CreateTarget(
264
294
enterpriseTab ,
265
295
urlTab ) ;
266
296
}
297
+
298
+ static IRepositoryModel CreateRepositoryModel ( string repo = "owner/repo" )
299
+ {
300
+ var split = repo . Split ( '/' ) ;
301
+ var ( owner , name ) = ( split [ 0 ] , split [ 1 ] ) ;
302
+ return CreateRepositoryModel ( owner , name ) ;
303
+ }
304
+
305
+ static IRepositoryModel CreateRepositoryModel ( string owner , string name )
306
+ {
307
+ var repository = Substitute . For < IRepositoryModel > ( ) ;
308
+ repository . Owner . Returns ( owner ) ;
309
+ repository . Name . Returns ( name ) ;
310
+ return repository ;
311
+ }
267
312
}
268
313
}
0 commit comments