public async Task CreatingPRs(
        string repoName, string sourceRepoOwner, string sourceBranchName,
        bool repoIsFork, bool sourceBranchIsTracking,
        string targetRepoOwner, string targetBranchName,
        string title, string body)
    {
        var remote = "origin";
        var data   = PrepareTestData(repoName, sourceRepoOwner, sourceBranchName, targetRepoOwner, targetBranchName, "origin",
                                     repoIsFork, sourceBranchIsTracking);

        var targetRepo   = data.TargetRepo;
        var gitClient    = data.GitClient;
        var l2repo       = data.L2Repo;
        var activeRepo   = data.ActiveRepo;
        var sourceBranch = data.SourceBranch;
        var targetBranch = data.TargetBranch;
        var ms           = data.ModelService;

        var prservice = new PullRequestService(data.GitClient, data.GitService, data.ServiceProvider.GetOperatingSystem(), Substitute.For <IUsageTracker>());

        prservice.GetPullRequestTemplate(data.ActiveRepo).Returns(Observable.Empty <string>());

        var vm = new PullRequestCreationViewModel(data.RepositoryHost, data.ActiveRepo, prservice, data.NotificationService);

        vm.Initialize();

        // the TargetBranch property gets set to whatever the repo default is (we assume master here),
        // so we only set it manually to emulate the user selecting a different target branch
        if (targetBranchName != "master")
        {
            vm.TargetBranch = new BranchModel(targetBranchName, targetRepo);
        }

        if (title != null)
        {
            vm.PRTitle = title;
        }

        // this is optional
        if (body != null)
        {
            vm.Description = body;
        }

        await vm.CreatePullRequest.ExecuteAsync();

        var unused2 = gitClient.Received().Push(l2repo, sourceBranchName, remote);

        if (!sourceBranchIsTracking)
        {
            unused2 = gitClient.Received().SetTrackingBranch(l2repo, sourceBranchName, remote);
        }
        else
        {
            unused2 = gitClient.DidNotReceiveWithAnyArgs().SetTrackingBranch(Args.LibGit2Repo, Args.String, Args.String);
        }
        var unused = ms.Received().CreatePullRequest(activeRepo, targetRepo, sourceBranch, targetBranch, title ?? "Source branch", body ?? String.Empty);
    }
    public void TargetBranchDisplayNameIncludesRepoOwnerWhenFork()
    {
        var data      = PrepareTestData("octokit.net", "shana", "master", "octokit", "master", "origin", true, true);
        var prservice = new PullRequestService(data.GitClient, data.GitService, data.ServiceProvider.GetOperatingSystem(), Substitute.For <IUsageTracker>());

        prservice.GetPullRequestTemplate(data.ActiveRepo).Returns(Observable.Empty <string>());
        var vm = new PullRequestCreationViewModel(data.RepositoryHost, data.ActiveRepo, prservice, data.NotificationService);

        Assert.Equal("octokit/master", vm.TargetBranch.DisplayName);
    }
    public async Task TargetBranchDisplayNameIncludesRepoOwnerWhenForkAsync()
    {
        var data      = PrepareTestData("octokit.net", "shana", "master", "octokit", "master", "origin", true, true);
        var prservice = new PullRequestService(data.GitClient, data.GitService, Substitute.For <IVSGitExt>(), Substitute.For <IGraphQLClientFactory>(), data.ServiceProvider.GetOperatingSystem(), Substitute.For <IUsageTracker>());

        prservice.GetPullRequestTemplate(data.ActiveRepo).Returns(Observable.Empty <string>());
        var vm = new PullRequestCreationViewModel(data.GetModelServiceFactory(), prservice, data.NotificationService);
        await vm.InitializeAsync(data.ActiveRepo, data.Connection);

        Assert.That("octokit/master", Is.EqualTo(vm.TargetBranch.DisplayName));
    }