public Payment SetupAddPayment(CreateNewPayment newPaymentData) { var expectedPayment = new Payment(); A.CallTo(() => PaymentRepository.AddAsync(A <Payment> .That.Matches((passedPayment) => passedPayment.Amount == newPaymentData.Amount && passedPayment.PayerId == newPaymentData.PayerId && passedPayment.ReceiverId == newPaymentData.ReceiverId && passedPayment.GroupContextId == newPaymentData.GroupContextId ))).Returns(expectedPayment); return(expectedPayment); }
public PaymentServiceTestData(decimal amount, string groupName = "Test group") { Group = CreateGroupWithUsers(groupName, 2); Payer = Group.Users[0]; Receiver = Group.Users[1]; NewPaymentData = new CreateNewPayment() { PayerId = Payer.Id, ReceiverId = Receiver.Id, GroupContextId = Group.Id, Amount = amount, }; }
public async Task <Payment> AddPaymentAsync(CreateNewPayment newPaymentData) { newPaymentData.Validate(); var payer = await userRepository.GetByIdAsync(newPaymentData.PayerId); if (payer == null) { throw new NotFoundException("User with given id does not exist."); } var receiver = await userRepository.GetByIdAsync(newPaymentData.ReceiverId); if (receiver == null) { throw new NotFoundException("User with given id does not exist."); } var expectedPayments = await GetExpectedPaymentsBetweenUsers( userA : payer, userB : receiver, groupContextId : newPaymentData.GroupContextId ); if (expectedPayments.Count < 1) { throw new BadRequestException("No payment expected."); } var expectedPayment = expectedPayments.Single(); if (payer.Id != expectedPayment.PayerId || receiver.Id != expectedPayment.ReceiverId) { throw new BadRequestException($"User {receiver.Email} already owes you money."); } if (newPaymentData.Amount > expectedPayment.Amount) { throw new BadRequestException("Trying to pay back more than owned."); } var paymentToAdd = newPaymentData.ToPayment(); return(await paymentRepository.AddAsync(paymentToAdd)); }
public async Task <ActionResult <ApiPayment> > CreatePayment([FromBody] CreateNewPayment newPaymentData) { var payment = await paymentService.AddPaymentAsync(newPaymentData); return(mapper.Map <ApiPayment>(payment)); }