public void Post_NoExceptions_OkResponseWithExtractedData() { _emailCleaner.Clean("").ReturnsForAnyArgs(""); var extractedExpenseData = new ExtractedExpenseData { Expense = new Expense { CostCenter = "DEV002", Total = 1024.01M, PaymentMethod = "personal card" }, Vendor = "Viaduct Steakhouse", Description = "development team’s project end celebration dinner", Date = "Tuesday 27 April 2017" }; _emailParser.ExtractData("").ReturnsForAnyArgs(extractedExpenseData); _totalsCalculator.Calculate(0M).ReturnsForAnyArgs(new ExpenseTotals()); // Act var result = _controller.Post(new PostEmailDataRequest()); // Assert var okResult = Assert.IsType <OkObjectResult>(result); var returnValue = Assert.IsType <PostEmailDataResponse>(okResult.Value); Assert.Equal("DEV002", returnValue.ExtractedData.Expense.CostCenter); Assert.Equal(1024.01M, returnValue.ExtractedData.Expense.Total); Assert.Equal("personal card", returnValue.ExtractedData.Expense.PaymentMethod); Assert.Equal("Viaduct Steakhouse", returnValue.ExtractedData.Vendor); Assert.Equal("development team’s project end celebration dinner", returnValue.ExtractedData.Description); Assert.Equal("Tuesday 27 April 2017", returnValue.ExtractedData.Date); }
public void ExtractData_CleanedFullEmailText_ValidExtractedDataModel() { const string EmailText = @" Hi Yvaine, Please create an expense claim for the below. Relevant details are marked up as requested… <expense><cost_centre>DEV002</cost_centre> <total>1024.01</total><payment_method>personal card</payment_method> </expense> Sent: Friday, 16 February 2018 10:32 AM Subject: test Hi Antoine, Please create a reservation at the <vendor>Viaduct Steakhouse</vendor> our <description>development team’s project end celebration dinner</description> on <date>Tuesday 27 April 2017</date>. We expect to arrive around 7.15pm. Approximately 12 people but I’ll confirm exact numbers closer to the day. Regards, Ivan "; var emailData = _emailParser.ExtractData(EmailText); Assert.Equal("DEV002", emailData.Expense.CostCenter); Assert.Equal(1024.01M, emailData.Expense.Total); Assert.Equal("personal card", emailData.Expense.PaymentMethod); Assert.Equal("Viaduct Steakhouse", emailData.Vendor); Assert.Equal("development team’s project end celebration dinner", emailData.Description); Assert.Equal("Tuesday 27 April 2017", emailData.Date); }
public IActionResult Post([FromBody] PostEmailDataRequest input) { PostEmailDataResponse response; try { var cleanedText = _emailCleaner.Clean(input.Data); var extractedData = _emailParser.ExtractData(cleanedText); var totals = _totalsCalculator.Calculate(extractedData.Expense.Total ?? 0); response = new PostEmailDataResponse { ExtractedData = extractedData, Totals = totals }; } catch (ExtractDataException ex) { return(StatusCode(StatusCodes.Status500InternalServerError, ex.Message)); } catch (MissingTotalException ex) { return(BadRequest(ex.Message)); } return(Ok(response)); }