static async Task <string> ExtractFile( string baseSha, object baseFileContent, string headSha, object headFileContent, string mergeBaseSha, object mergeBaseFileContent, string fileName, bool head, Encoding encoding, string repoDir = "repoDir", int pullNumber = 666, string baseRef = "baseRef", string headRef = "headRef") { var repositoryModel = Substitute.For <ILocalRepositoryModel>(); repositoryModel.LocalPath.Returns(repoDir); var pullRequest = Substitute.For <IPullRequestModel>(); pullRequest.Number.Returns(1); pullRequest.Base.Returns(new GitReferenceModel(baseRef, "label", baseSha, "uri")); pullRequest.Head.Returns(new GitReferenceModel("ref", "label", headSha, "uri")); var serviceProvider = Substitutes.ServiceProvider; var gitClient = MockGitClient(); var gitService = serviceProvider.GetGitService(); var service = new PullRequestService(gitClient, gitService, serviceProvider.GetOperatingSystem(), Substitute.For <IUsageTracker>()); gitClient.GetPullRequestMergeBase(Arg.Any <IRepository>(), Arg.Any <UriString>(), Arg.Any <UriString>(), baseSha, headSha, baseRef, headRef).ReturnsForAnyArgs(Task.FromResult(mergeBaseSha)); gitClient.ExtractFile(Arg.Any <IRepository>(), mergeBaseSha, fileName).Returns(GetFileTask(mergeBaseFileContent)); gitClient.ExtractFile(Arg.Any <IRepository>(), baseSha, fileName).Returns(GetFileTask(baseFileContent)); gitClient.ExtractFile(Arg.Any <IRepository>(), headSha, fileName).Returns(GetFileTask(headFileContent)); return(await service.ExtractFile(repositoryModel, pullRequest, fileName, head, encoding)); }