public async Task GetSwaggerDocs_WithOpenApiConfigurationWithHealth_ReturnsOpenApiDocumentOfApplication() { // Arrange var options = new AzureFunctionsHttpProjectOptions().WithIncludeHealthChecks(); using (var project = await AzureFunctionsHttpProject.StartNewAsync(options, _outputWriter)) // Act { project.TearDownOptions = TearDownOptions.KeepProjectDirectory; using (HttpResponseMessage response = await project.Swagger.GetSwaggerDocsAsync()) { // Assert Assert.Equal(HttpStatusCode.OK, response.StatusCode); string json = await response.Content.ReadAsStringAsync(); OpenApiDocument document = LoadOpenApiDocument(json); OpenApiOperation orderOperation = SelectOperation(document, OperationType.Post, "/v1/order"); AssertOrderOperation(orderOperation); OpenApiOperation healthOperation = SelectOperation(document, OperationType.Get, "/v1/health"); AssertHealthOperation(healthOperation); } } }
public async Task AzureFunctionsHttpProject_WithoutOptions_ResponseToCorrectOrder() { // Arrange var order = new Order { Id = Guid.NewGuid().ToString(), ArticleNumber = BogusGenerator.Random.String(1, 100), Scheduled = BogusGenerator.Date.RecentOffset() }; using (var project = await AzureFunctionsHttpProject.StartNewAsync(_config, _outputWriter)) { // Act using (HttpResponseMessage response = await project.Order.PostAsync(order)) { // Assert string responseContent = await response.Content.ReadAsStringAsync(); Assert.True(HttpStatusCode.OK == response.StatusCode, responseContent); Assert.NotNull(JsonConvert.DeserializeObject <Order>(responseContent)); IEnumerable <string> responseHeaderNames = response.Headers.Select(header => header.Key).ToArray(); Assert.Contains("X-Transaction-ID", responseHeaderNames); Assert.Contains("RequestId", responseHeaderNames); } } }
public async Task HttpAzureFunctionsProject_WithoutOptions_DoesNotContainHealthChecks() { // Arrange using (var project = await AzureFunctionsHttpProject.StartNewAsync(_config, _outputWriter)) { // Act using (HttpResponseMessage response = await project.Health.GetAsync()) { // Assert Assert.Equal(HttpStatusCode.NotFound, response.StatusCode); } } }
public async Task GetSwaggerUI_WithBuildConfiguration_Returns(BuildConfiguration buildConfiguration, HttpStatusCode expectedStatusCode) { // Arrange var configuration = TestConfig.Create(buildConfiguration); using (var project = await AzureFunctionsHttpProject.StartNewAsync(configuration, _outputWriter)) // Act using (HttpResponseMessage response = await project.Swagger.GetSwaggerUIAsync()) { // Assert Assert.NotNull(response); Assert.Equal(expectedStatusCode, response.StatusCode); } }
public async Task GetSwaggerDocs_WithExcludeOpenApiProjectOption_ReturnsNotFound() { // Arrange var options = new AzureFunctionsHttpProjectOptions().WithExcludeOpenApiDocs(); using (var project = await AzureFunctionsHttpProject.StartNewAsync(options, _outputWriter)) // Act using (HttpResponseMessage response = await project.Swagger.GetSwaggerDocsAsync()) { // Assert Assert.NotNull(response); Assert.Equal(HttpStatusCode.NotFound, response.StatusCode); } }
public async Task GetSwaggerDocs_WithOpenApiConfigurationWithoutHealth_ReturnsOpenApiDocumentOfApplication() { // Arrange using (var project = await AzureFunctionsHttpProject.StartNewAsync(_outputWriter)) // Act using (HttpResponseMessage response = await project.Swagger.GetSwaggerDocsAsync()) { // Assert Assert.Equal(HttpStatusCode.OK, response.StatusCode); string json = await response.Content.ReadAsStringAsync(); OpenApiDocument document = LoadOpenApiDocument(json); OpenApiOperation orderOperation = SelectOperation(document, OperationType.Post, "/v1/order"); AssertOrderOperation(orderOperation); } }
public async Task HttpAzureFunctionsProject_WithIncludeHealthChecks_ChecksAcceptRequestHeader() { // Arrange var options = new AzureFunctionsHttpProjectOptions() .WithIncludeHealthChecks(); using (var project = await AzureFunctionsHttpProject.StartNewAsync(_config, options, _outputWriter)) { // Act using (HttpResponseMessage response = await project.Health.GetAsync(request => { request.Headers.Accept.Clear(); request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/pdf")); })) { // Assert Assert.Equal(HttpStatusCode.UnsupportedMediaType, response.StatusCode); } } }
public async Task OrderFunction_ReceivedBatchedOrders_ReturnsSuccess() { // Arrange var config = TestConfig.Create(); using (var project = AzureFunctionsHttpProject.CreateNew(config, _outputWriter)) { project.UpdateFileInProject($"{nameof(OrderFunction)}.cs", contents => { return(contents.Replace("GetJsonBodyAsync<Order>", "GetJsonBodyAsync<Order[]>")); }); await project.StartAsync(); IEnumerable <Order> orders = BogusGenerator.Make(3, CreateRandomOrder); string json = JsonConvert.SerializeObject(orders.ToArray()); // Act using (HttpResponseMessage response = await project.Order.PostAsync(json)) { // Assert Assert.Equal(HttpStatusCode.OK, response.StatusCode); } } }
public async Task HttpAzureFunctionsProject_WithIncludeHealthChecks_ContainsHealthChecks() { // Arrange var options = new AzureFunctionsHttpProjectOptions() .WithIncludeHealthChecks(); using (var project = await AzureFunctionsHttpProject.StartNewAsync(_config, options, _outputWriter)) { // Act using (HttpResponseMessage response = await project.Health.GetAsync()) { // Assert Assert.Equal(HttpStatusCode.OK, response.StatusCode); Assert.NotEmpty(response.Headers.GetValues("RequestId")); Assert.NotEmpty(response.Headers.GetValues("X-Transaction-Id")); string healthReportJson = await response.Content.ReadAsStringAsync(); var healthReport = JObject.Parse(healthReportJson); Assert.Equal(HealthStatus.Healthy.ToString(), healthReport["status"]); } } }