1212
1313from libvcs import exc
1414from libvcs .git import (
15+ FullRemoteDict ,
1516 GitRemote ,
1617 GitRepo ,
1718 convert_pip_url as git_convert_pip_url ,
2627
2728RepoTestFactory = Callable [..., GitRepo ]
2829RepoTestFactoryLazyKwargs = Callable [..., dict ]
30+ RepoTestFactoryRemotesLazyExpected = Callable [..., FullRemoteDict ]
2931
3032
3133@pytest .fixture (autouse = True , scope = "module" )
@@ -215,21 +217,61 @@ def progress_callback_spy(output, timestamp):
215217
216218@pytest .mark .parametrize (
217219 # Postpone evaluation of options so fixture variables can interpolate
218- "constructor,lazy_constructor_options" ,
220+ "constructor,lazy_constructor_options,lazy_remote_expected " ,
219221 [
220222 [
221223 GitRepo ,
222224 lambda git_remote , repos_path , repo_name , ** kwargs : {
223225 "url" : f"file://{ git_remote } " ,
224226 "repo_dir" : repos_path / repo_name ,
225227 },
228+ lambda git_remote , ** kwargs : {"origin" : f"file://{ git_remote } " },
229+ ],
230+ [
231+ GitRepo ,
232+ lambda git_remote , repos_path , repo_name , ** kwargs : {
233+ "url" : f"file://{ git_remote } " ,
234+ "repo_dir" : repos_path / repo_name ,
235+ "remotes" : {"origin" : f"file://{ git_remote } " },
236+ },
237+ lambda git_remote , ** kwargs : {"origin" : f"file://{ git_remote } " },
238+ ],
239+ [
240+ GitRepo ,
241+ lambda git_remote , repos_path , repo_name , ** kwargs : {
242+ "url" : f"file://{ git_remote } " ,
243+ "repo_dir" : repos_path / repo_name ,
244+ "remotes" : {
245+ "origin" : f"file://{ git_remote } " ,
246+ "second_remote" : f"file://{ git_remote } " ,
247+ },
248+ },
249+ lambda git_remote , ** kwargs : {
250+ "origin" : f"file://{ git_remote } " ,
251+ "second_remote" : f"file://{ git_remote } " ,
252+ },
253+ ],
254+ [
255+ GitRepo ,
256+ lambda git_remote , repos_path , repo_name , ** kwargs : {
257+ "url" : f"file://{ git_remote } " ,
258+ "repo_dir" : repos_path / repo_name ,
259+ "remotes" : {
260+ "second_remote" : f"file://{ git_remote } " ,
261+ },
262+ },
263+ lambda git_remote , ** kwargs : {
264+ "origin" : f"file://{ git_remote } " ,
265+ "second_remote" : f"file://{ git_remote } " ,
266+ },
226267 ],
227268 [
228269 create_repo_from_pip_url ,
229270 lambda git_remote , repos_path , repo_name , ** kwargs : {
230271 "pip_url" : f"git+file://{ git_remote } " ,
231272 "repo_dir" : repos_path / repo_name ,
232273 },
274+ lambda git_remote , ** kwargs : {"origin" : f"file://{ git_remote } " },
233275 ],
234276 ],
235277)
@@ -238,16 +280,90 @@ def test_remotes(
238280 git_remote : pathlib .Path ,
239281 constructor : RepoTestFactory ,
240282 lazy_constructor_options : RepoTestFactoryLazyKwargs ,
283+ lazy_remote_expected : RepoTestFactoryRemotesLazyExpected ,
284+ ):
285+ repo_name = "myrepo"
286+ remote_name = "myremote"
287+ remote_url = "https://localhost/my/git/repo.git"
288+
289+ git_repo : GitRepo = constructor (** lazy_constructor_options (** locals ()))
290+ git_repo .obtain ()
291+
292+ expected = lazy_remote_expected (** locals ())
293+ assert len (expected .keys ()) > 0
294+ for expected_remote_name , expected_remote_url in expected .items ():
295+ assert (
296+ expected_remote_name ,
297+ expected_remote_url ,
298+ expected_remote_url ,
299+ ) == git_repo .remote (expected_remote_name )
300+
301+
302+ @pytest .mark .parametrize (
303+ # Postpone evaluation of options so fixture variables can interpolate
304+ "constructor,lazy_constructor_options,lazy_remote_dict,lazy_remote_expected" ,
305+ [
306+ [
307+ GitRepo ,
308+ lambda git_remote , repos_path , repo_name , ** kwargs : {
309+ "url" : f"file://{ git_remote } " ,
310+ "repo_dir" : repos_path / repo_name ,
311+ "remotes" : {
312+ "origin" : f"file://{ git_remote } " ,
313+ },
314+ },
315+ lambda git_remote , ** kwargs : {
316+ "second_remote" : f"file://{ git_remote } " ,
317+ },
318+ lambda git_remote , ** kwargs : {
319+ "origin" : f"file://{ git_remote } " ,
320+ "second_remote" : f"file://{ git_remote } " ,
321+ },
322+ ],
323+ [
324+ GitRepo ,
325+ lambda git_remote , repos_path , repo_name , ** kwargs : {
326+ "url" : f"file://{ git_remote } " ,
327+ "repo_dir" : repos_path / repo_name ,
328+ "remotes" : {
329+ "origin" : f"file://{ git_remote } " ,
330+ },
331+ },
332+ lambda git_remote , ** kwargs : {
333+ "origin" : "https://github.com/vcs-python/libvcs" ,
334+ },
335+ lambda git_remote , ** kwargs : {
336+ "origin" : "https://github.com/vcs-python/libvcs" ,
337+ },
338+ ],
339+ ],
340+ )
341+ def test_remotes_update_repo (
342+ repos_path : pathlib .Path ,
343+ git_remote : pathlib .Path ,
344+ constructor : RepoTestFactory ,
345+ lazy_constructor_options : RepoTestFactoryLazyKwargs ,
346+ lazy_remote_dict : RepoTestFactoryRemotesLazyExpected ,
347+ lazy_remote_expected : RepoTestFactoryRemotesLazyExpected ,
241348):
242349 repo_name = "myrepo"
243350 remote_name = "myremote"
244351 remote_url = "https://localhost/my/git/repo.git"
245352
246353 git_repo : GitRepo = constructor (** lazy_constructor_options (** locals ()))
247354 git_repo .obtain ()
248- git_repo .set_remote (name = remote_name , url = remote_url )
249355
250- assert (remote_name , remote_url , remote_url ) == git_repo .remote (remote_name )
356+ git_repo ._remotes = lazy_remote_dict (** locals ())
357+ git_repo .update_repo (set_remotes = True )
358+
359+ expected = lazy_remote_expected (** locals ())
360+ assert len (expected .keys ()) > 0
361+ for expected_remote_name , expected_remote_url in expected .items ():
362+ assert (
363+ expected_remote_name ,
364+ expected_remote_url ,
365+ expected_remote_url ,
366+ ) == git_repo .remote (expected_remote_name )
251367
252368
253369def test_git_get_url_and_rev_from_pip_url ():
0 commit comments