Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }