示例#1
0
        /// <summary>
        /// Extracts the specified message content.
        /// </summary>
        /// <param name="messageContent">Content of the message.</param>
        /// <returns></returns>
        /// <exception cref="ArgumentException">Value cannot be null or whitespace. - messageContent</exception>
        // TODO: This method only extracts a single Expense object. Nice to have would be to expand and extract multiple Expenses.
        public Expense Extract(string messageContent)
        {
            if (string.IsNullOrWhiteSpace(messageContent))
            {
                throw new ArgumentException("Value cannot be null or whitespace.", nameof(messageContent));
            }

            ValidateMessageContent(messageContent);

            ExpenseDto     expense     = ExtractAndDeserializeExpenseXmlElement(messageContent);
            VendorDto      vendor      = ExtractAndDeserializeXmlElement <VendorDto>(messageContent, ExpenseConstants.Vendor);
            DescriptionDto description = ExtractAndDeserializeXmlElement <DescriptionDto>(messageContent, ExpenseConstants.Description);
            EventDateDto   eventDate   = ExtractAndDeserializeXmlElement <EventDateDto>(messageContent, ExpenseConstants.Date);

            return(ExpenseMapper.Map(expense, vendor, description, eventDate));
        }
示例#2
0
        public void MissingCostCentreDefaultsToUnknown(string costCentre)
        {
            ExpenseDto expenseDto = new ExpenseDto
            {
                Expense = new ExpenseDataDtoBuilder()
                          .WithCostCentre(costCentre)
                          .WithTotal(1024.01m)
                          .Build()
            };
            VendorDto      vendorDto      = new VendorDtoBuilder().Build();
            DescriptionDto descriptionDto = new DescriptionDtoBuilder().Build();
            EventDateDto   eventDateDto   = new EventDateDtoBuilder().Build();

            Expense expense = ExpenseMapper.Map(expenseDto, vendorDto, descriptionDto, eventDateDto);

            expense.CostCentre.Should().Be("UNKNOWN");
        }
示例#3
0
        public IActionResult Add(ExpenseMapper em)
        {
            if (ModelState.IsValid)
            {
                if (em.MembersInvolved.Count() == 1 && em.MembersInvolved.Contains(em.Name))
                {
                    ModelState.AddModelError("MembersInvolved", $"Choose different member than {em.Name}");
                    ViewBag.TableNumber = em.TableNumber;
                    return(View());
                }

                Expense expense = ExpenseMaker.CreateExpense(em.TableNumber, em.Name, em.Amount, em.MembersInvolved, em.Comment);
                expenseRepository.AddNewExpense(expense);
                return(RedirectToAction("Success", new { id = em.TableNumber }));
            }
            ViewBag.TableNumber = em.TableNumber;
            return(View(em));
        }
示例#4
0
        public void CanCalculateExpectedTotals()
        {
            ExpenseDto expenseDto = new ExpenseDto
            {
                Expense = new ExpenseDataDtoBuilder()
                          .WithCostCentre("DEV002")
                          .WithTotal(1024.01m)
                          .Build()
            };
            VendorDto      vendorDto      = new VendorDtoBuilder().Build();
            DescriptionDto descriptionDto = new DescriptionDtoBuilder().Build();
            EventDateDto   eventDateDto   = new EventDateDtoBuilder().Build();

            Expense expense = ExpenseMapper.Map(expenseDto, vendorDto, descriptionDto, eventDateDto);

            expense.CostCentre.Should().Be(expenseDto.Expense.CostCentre);
            expense.TotalInclGst.Should().Be(expenseDto.Expense.Total);
            expense.TotalExclGst.Should().Be(890.44m);
            expense.GstAmount.Should().Be(133.57m);
            expense.Vendor.Should().Be(vendorDto.Vendor);
            expense.Description.Should().Be(descriptionDto.Description);
            expense.EventDate.Should().Be(eventDateDto.Date);
        }