Example #1
0
        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");
        }