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