public async Task ShouldRemoveUnusedRemote() { var gitClient = Substitute.For <IGitClient>(); var gitService = MockGitService(); var service = new PullRequestService( gitClient, gitService, Substitute.For <IOperatingSystem>(), Substitute.For <IUsageTracker>()); var localRepo = Substitute.For <ILocalRepositoryModel>(); localRepo.CloneUrl.Returns(new UriString("https://github.com/foo/bar")); var repo = gitService.GetRepository(localRepo.CloneUrl); var remote1 = Substitute.For <Remote>(); var remote2 = Substitute.For <Remote>(); var remote3 = Substitute.For <Remote>(); var remotes = new List <Remote> { remote1, remote2, remote3 }; var remoteCollection = Substitute.For <RemoteCollection>(); remote1.Name.Returns("remote1"); remote2.Name.Returns("remote2"); remote3.Name.Returns("remote3"); remoteCollection.GetEnumerator().Returns(_ => remotes.GetEnumerator()); repo.Network.Remotes.Returns(remoteCollection); var branch1 = Substitute.For <LibGit2Sharp.Branch>(); var branch2 = Substitute.For <LibGit2Sharp.Branch>(); var branches = new List <LibGit2Sharp.Branch> { branch1, branch2 }; var branchCollection = Substitute.For <BranchCollection>(); branch1.Remote.Returns(remote1); branch2.Remote.Returns(remote1); branchCollection.GetEnumerator().Returns(_ => branches.GetEnumerator()); repo.Branches.Returns(branchCollection); gitClient.GetConfig <bool>(Arg.Any <IRepository>(), "remote.remote1.created-by-ghfvs").Returns(Task.FromResult(true)); gitClient.GetConfig <bool>(Arg.Any <IRepository>(), "remote.remote2.created-by-ghfvs").Returns(Task.FromResult(true)); await service.RemoteUnusedRemotes(localRepo); remoteCollection.DidNotReceive().Remove("remote1"); remoteCollection.Received().Remove("remote2"); remoteCollection.DidNotReceive().Remove("remote3"); }