public async Task Submit100To150BuildDetails() { var cloneRoot = @"c:" + Faker.System.DirectoryPath().Replace("/", @"\"); var projectPath = Path.Combine(cloneRoot, Faker.Lorem.Word()); var projectFile = Path.Combine(projectPath, Faker.System.FileName("csproj")); var projectDetails = new ProjectDetails(cloneRoot, projectFile); var solutionDetails = new SolutionDetails(cloneRoot) { projectDetails }; var buildDetails = new BuildDetails(solutionDetails); var projectCodeFiles = GenerateFileNames().Distinct().Take(Faker.Random.Int(200, 300)).ToArray(); projectDetails.AddItems(projectCodeFiles); foreach (var projectCodeFile in Faker.PickRandom(projectCodeFiles, Faker.Random.Int(101, 150))) { buildDetails.AddMessage(new BuildMessage(BuildMessageLevel.Warning, projectFile, projectCodeFile, Faker.Random.Int(2), Faker.Random.Int(2), Faker.Lorem.Sentence(), Faker.Lorem.Word())); } buildDetails.BuildMessages.Count.Should().BeGreaterThan(100); buildDetails.BuildMessages.Count.Should().BeLessOrEqualTo(150); _logger.LogInformation("Build Message Count: {0}", buildDetails.BuildMessages.Count); var owner = Faker.Lorem.Word(); var repository = Faker.Lorem.Word(); var sha = Faker.Random.String(); var gitHubAppModelService = await SubmitBuild(buildDetails, owner, repository, sha); Received.InOrder(async() => { await gitHubAppModelService.Received(1).GetLogAnalyzerConfigurationAsync(Arg.Is(owner), Arg.Is(repository), Arg.Is(sha)); await gitHubAppModelService.Received(1).CreateCheckRunAsync( Arg.Is(owner), Arg.Is(repository), Arg.Is(sha), Arg.Is("MSBuildLog Analyzer"), Arg.Is("MSBuildLog Analysis"), Arg.Is(""), Arg.Is(true), Arg.Is <Annotation[]>(annotations => annotations.Length == 50), Arg.Any <DateTimeOffset>(), Arg.Any <DateTimeOffset>()); await gitHubAppModelService.Received(1) .UpdateCheckRunAsync( Arg.Any <long>(), Arg.Any <string>(), Arg.Any <string>(), Arg.Any <string>(), Arg.Any <string>(), Arg.Any <string>(), Arg.Is <Annotation[]>(annotations => annotations.Length == 50), Arg.Any <DateTimeOffset?>(), Arg.Any <DateTimeOffset?>()); await gitHubAppModelService.Received(1) .UpdateCheckRunAsync( Arg.Any <long>(), Arg.Any <string>(), Arg.Any <string>(), Arg.Any <string>(), Arg.Any <string>(), Arg.Any <string>(), Arg.Is <Annotation[]>(annotations => annotations.Length == buildDetails.BuildMessages.Count - 100), Arg.Any <DateTimeOffset?>(), Arg.Any <DateTimeOffset?>()); }); }
public async Task SubmitBuildDetailsWithError() { var cloneRoot = @"c:" + Faker.System.DirectoryPath().Replace("/", @"\"); var projectPath = Path.Combine(cloneRoot, Faker.Lorem.Word()); var projectFile = Path.Combine(projectPath, Faker.System.FileName("csproj")); var projectDetails = new ProjectDetails(cloneRoot, projectFile); var projectCodeFile = Path.Combine(Faker.Lorem.Word(), Faker.System.FileName("cs")); projectDetails.AddItems(projectCodeFile); var solutionDetails = new SolutionDetails(cloneRoot) { projectDetails }; var buildDetails = new BuildDetails(solutionDetails); var lineNumber = Faker.Random.Int(2); var endLineNumber = lineNumber + 1; var message = Faker.Lorem.Sentence(); var messageCode = Faker.Lorem.Word(); buildDetails.AddMessage(new BuildMessage(BuildMessageLevel.Error, projectFile, projectCodeFile, lineNumber, endLineNumber, message, messageCode)); var filename = Path.Combine(projectPath, projectCodeFile).Substring(cloneRoot.Length).Replace(@"\", "/").TrimStart('/'); var owner = Faker.Lorem.Word(); var repository = Faker.Lorem.Word(); var sha = Faker.Random.String(); var gitHubAppModelService = await SubmitBuild(buildDetails, owner, repository, sha); Received.InOrder(async() => { await gitHubAppModelService.Received(1).GetLogAnalyzerConfigurationAsync(Arg.Is(owner), Arg.Is(repository), Arg.Is(sha)); await gitHubAppModelService.Received(1).CreateCheckRunAsync( Arg.Is(owner), Arg.Is(repository), Arg.Is(sha), Arg.Is("MSBuildLog Analyzer"), Arg.Is("MSBuildLog Analysis"), Arg.Is(""), Arg.Is(false), Arg.Any <Annotation[]>(), Arg.Any <DateTimeOffset>(), Arg.Any <DateTimeOffset>()); }); var arguments = gitHubAppModelService.ReceivedCalls().Skip(1).First().GetArguments().ToArray(); var annotations = (Annotation[])arguments[7]; annotations.Should().BeEquivalentTo(new Annotation( filename, CheckWarningLevel.Failure, messageCode, messageCode + ": " + message, lineNumber, endLineNumber)); }