public async Task <IActionResult> Run( [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "pages/webhook")] HttpRequest?request) { try { logger.LogInformation("Received webhook request"); if (request == null) { logger.LogError($"{nameof(request)} is null"); return(new StatusCodeResult((int)HttpStatusCode.BadRequest)); } using var streamReader = new StreamReader(request.Body); var requestBody = await streamReader.ReadToEndAsync().ConfigureAwait(false); if (string.IsNullOrEmpty(requestBody)) { logger.LogError($"{nameof(request)} body is null"); return(new StatusCodeResult((int)HttpStatusCode.BadRequest)); } var result = await webhookReceiver.ReceiveEvents(requestBody).ConfigureAwait(false); logger.LogInformation("Webhook request completed"); return(result); } catch (Exception ex) { logger.LogError(ex.ToString()); return(new StatusCodeResult((int)HttpStatusCode.InternalServerError)); } }
public async Task PostWithBodyReturnsOk() { // Arrange var expectedResult = new StatusCodeResult((int)HttpStatusCode.OK); var function = new PagesWebhookHttpTrigger(fakeLogger, fakewebhookReceiver); var request = BuildRequestWithValidBody("A webhook test"); A.CallTo(() => fakewebhookReceiver.ReceiveEvents(A <string> .Ignored)).Returns(new StatusCodeResult(200)); // Act var result = await function.Run(request).ConfigureAwait(false); // Assert A.CallTo(() => fakewebhookReceiver.ReceiveEvents(A <string> .Ignored)).MustHaveHappenedOnceExactly(); var statusResult = Assert.IsType <StatusCodeResult>(result); Assert.Equal(expectedResult.StatusCode, statusResult.StatusCode); }