public async Task Service_Get_ReservationResourceModel() { // Arrange string text = FakeDataHelper.EmailProcessing.CorrectReservationTextblock; // Act ReservationResourceModel model = await EmailProcessingService.ExtractReservationAsync(text); // Assert Assert.IsNotNull(model); Assert.AreEqual("Viaduct Steakhouse", model.Vendor); Assert.AreEqual("development team’s project end celebration dinner", model.Description); Assert.AreEqual(DateTime.Parse("Thursday 27 April 2017"), model.Date); }
public async Task Controller_Get_ReservationResourceModel() { // Arrange string text = FakeDataHelper.EmailProcessing.CorrectReservationTextblock; // Act IActionResult result = await EmailProcessingController.Reservation1_0(text); // Assert ReservationResourceModel model = ((OkObjectResult)result).Value as ReservationResourceModel; Assert.IsNotNull(model); Assert.AreEqual("Viaduct Steakhouse", model.Vendor); Assert.AreEqual("development team’s project end celebration dinner", model.Description); Assert.AreEqual(DateTime.Parse("Thursday 27 April 2017"), model.Date); }
/// <summary> /// Extracts reservation data from a block of text /// </summary> /// <param name="text">Text to process</param> /// <param name="cancellationToken">Default cancellation token</param> /// <returns></returns> public async Task <ReservationResourceModel> ExtractReservationAsync(string text, CancellationToken cancellationToken = default) { ReservationResourceModel resourceModel = new ReservationResourceModel(); await Task.Run(() => { if (string.IsNullOrEmpty(text)) { throw new EmailProcessingException("Text block can not be empty"); } // Load the email text as html doc HtmlDocument htmlDocument = new HtmlDocument(); htmlDocument.LoadHtml(text); // Detect tags that are not closed if (htmlDocument.ContainsUnclosedTags()) { throw new UnclosedTagException("Block of text has unclosed tag(s)"); } // Extract data HtmlNode vendorNode = htmlDocument.DocumentNode.SelectSingleNode("//vendor"); HtmlNode descriptionNode = htmlDocument.DocumentNode.SelectSingleNode("//description"); HtmlNode dateNode = htmlDocument.DocumentNode.SelectSingleNode("//date"); if (vendorNode != null && descriptionNode != null && dateNode != null) { resourceModel.Vendor = vendorNode.InnerText; resourceModel.Description = descriptionNode.InnerText; resourceModel.Date = DateTime.Parse(dateNode.InnerText); } }, cancellationToken); return(resourceModel); }