public async Task UploadFilesTest() { var fileContents = new Faker <string>().CustomInstantiator(f => f.Lorem.Paragraphs(3, 10)).Generate(4) .ToDictionary(f => $"{string.Join("_", new Faker().Lorem.Words(4))}.txt", f => f); var fileService = Substitute.For <ITempFileService>(); var checkRunSubmissionService = Substitute.For <Web.Interfaces.ICheckRunSubmissionService>(); var receivedFiles = new Dictionary <string, string>(); fileService.CreateFromStreamAsync(Arg.Any <string>(), Arg.Any <Stream>()) .Returns(ci => { var fileName = (string)ci[0]; var stream = (Stream)ci[1]; receivedFiles.Add(fileName, new StreamReader(stream, Encoding.UTF8).ReadToEnd()); return($"temp/{fileName}"); }); var checkRunController = new CheckRunControllerStub(TestLogger.Create <CheckRunController>(_testOutputHelper), fileService, checkRunSubmissionService, Substitute.For <ITelemetryService>()) { ControllerContext = await RequestWithFiles(fileContents), MetadataProvider = new EmptyModelMetadataProvider(), ModelBinderFactory = Substitute.For <IModelBinderFactory>(), ObjectValidator = Substitute.For <IObjectModelValidator>() }; await checkRunController.Upload(); await fileService.Received(1).CreateFromStreamAsync(Arg.Any <string>(), Arg.Any <Stream>()); receivedFiles.Count.Should().Be(1); }
public async Task UploadWithMissingFile() { var name = "dummyFileName.txt"; var fileContent = "This is some dummy file contents"; var fileDictionary = new Dictionary <string, string> { { name, fileContent } }; var fileService = Substitute.For <ITempFileService>(); var checkRunSubmissionService = Substitute.For <Web.Interfaces.ICheckRunSubmissionService>(); var receivedFiles = new Dictionary <string, string>(); fileService.CreateFromStreamAsync(Arg.Any <string>(), Arg.Any <Stream>()) .Returns(ci => { var fileName = (string)ci[0]; var stream = (Stream)ci[1]; receivedFiles.Add(fileName, new StreamReader(stream, Encoding.UTF8).ReadToEnd()); return($"temp/{fileName}"); }); fileService.Files.Returns(new[] { name }); var logUploadData = new LogUploadData { CommitSha = "12345", LogFile = "someOtherFileName.txt" //Bad Data }; var checkRunController = new CheckRunControllerStub(TestLogger.Create <CheckRunController>(_testOutputHelper), fileService, checkRunSubmissionService, Substitute.For <ITelemetryService>()) { ControllerContext = await RequestWithFiles(fileDictionary, logUploadData), MetadataProvider = new EmptyModelMetadataProvider(), ModelBinderFactory = Substitute.For <IModelBinderFactory>(), ObjectValidator = Substitute.For <IObjectModelValidator>() }; var result = await checkRunController.Upload() as BadRequestObjectResult; result.Should().NotBeNull(); result.Value.Should().BeOfType <SerializableError>(); }
public async Task UploadBadRequestTest() { var fileService = Substitute.For <ITempFileService>(); var checkRunSubmissionService = Substitute.For <Web.Interfaces.ICheckRunSubmissionService>(); var checkRunController = new CheckRunControllerStub(TestLogger.Create <CheckRunController>(_testOutputHelper), fileService, checkRunSubmissionService, Substitute.For <ITelemetryService>()) { ControllerContext = new ControllerContext { HttpContext = new DefaultHttpContext() }, MetadataProvider = new EmptyModelMetadataProvider(), ModelBinderFactory = Substitute.For <IModelBinderFactory>(), ObjectValidator = Substitute.For <IObjectModelValidator>() }; var result = await checkRunController.Upload() as BadRequestObjectResult; result.Should().NotBeNull(); result.StatusCode.Should().Be(400); }
public async Task UploadFileTest() { var name = "dummyFileName.txt"; var fileContent = "This is some dummy file contents"; var fileDictionary = new Dictionary <string, string> { { name, fileContent } }; var fileService = Substitute.For <ITempFileService>(); var checkRunSubmissionService = Substitute.For <Web.Interfaces.ICheckRunSubmissionService>(); var receivedFiles = new Dictionary <string, string>(); fileService.CreateFromStreamAsync(Arg.Any <string>(), Arg.Any <Stream>()) .Returns(ci => { var fileName = (string)ci[0]; var stream = (Stream)ci[1]; receivedFiles.Add(fileName, new StreamReader(stream, Encoding.UTF8).ReadToEnd()); return($"temp/{fileName}"); }); var checkRunController = new CheckRunControllerStub(TestLogger.Create <CheckRunController>(_testOutputHelper), fileService, checkRunSubmissionService, Substitute.For <ITelemetryService>()) { ControllerContext = await RequestWithFiles(fileDictionary), MetadataProvider = new EmptyModelMetadataProvider(), ModelBinderFactory = Substitute.For <IModelBinderFactory>(), ObjectValidator = Substitute.For <IObjectModelValidator>() }; await checkRunController.Upload(); await fileService.Received(1).CreateFromStreamAsync(Arg.Is(name), Arg.Any <Stream>()); receivedFiles.Should().BeEquivalentTo(fileDictionary); }
public async Task UploadFileWithFormData() { var name = "dummyFileName.txt"; var fileContent = "This is some dummy file contents"; var fileDictionary = new Dictionary <string, string> { { name, fileContent } }; var fileService = Substitute.For <ITempFileService>(); var checkRunSubmissionService = Substitute.For <Web.Interfaces.ICheckRunSubmissionService>(); var receivedFiles = new Dictionary <string, string>(); fileService.CreateFromStreamAsync(Arg.Any <string>(), Arg.Any <Stream>()) .Returns(ci => { var fileName = (string)ci[0]; var stream = (Stream)ci[1]; receivedFiles.Add(fileName, new StreamReader(stream, Encoding.UTF8).ReadToEnd()); return($"temp/{fileName}"); }); fileService.Files.Returns(new[] { name }); var checkRun = new CheckRun { Id = Faker.Random.Long(), Url = Faker.Internet.Url() }; checkRunSubmissionService.SubmitAsync(null, null, null, null, 0).ReturnsForAnyArgs(checkRun); var logUploadData = new LogUploadData { CommitSha = "12345", PullRequestNumber = 345 }; var faker = new Faker(); var repoOwner = faker.Person.FullName; var repoName = faker.Hacker.Phrase(); var claims = new[] { new Claim("urn:bcc:repositoryName", repoName), new Claim("urn:bcc:repositoryOwner", repoOwner), new Claim("urn:bcc:repositoryOwnerId", faker.Random.Long().ToString()) }; var checkRunController = new CheckRunControllerStub(TestLogger.Create <CheckRunController>(_testOutputHelper), fileService, checkRunSubmissionService, Substitute.For <ITelemetryService>()) { ControllerContext = await RequestWithFiles(fileDictionary, logUploadData, claims), MetadataProvider = new EmptyModelMetadataProvider(), ModelBinderFactory = Substitute.For <IModelBinderFactory>(), ObjectValidator = Substitute.For <IObjectModelValidator>() }; var result = await checkRunController.Upload() as JsonResult; await fileService.Received(1).CreateFromStreamAsync(Arg.Is(name), Arg.Any <Stream>()); await checkRunSubmissionService.Received(1).SubmitAsync( repoOwner, repoName, logUploadData.CommitSha, string.Empty, logUploadData.PullRequestNumber); receivedFiles.Should().BeEquivalentTo(fileDictionary); var resultFormData = result?.Value as CheckRun; resultFormData.Should().NotBeNull(); resultFormData.Id.Should().Be(checkRun.Id); resultFormData.Url.Should().Be(checkRun.Url); }