コード例 #1
0
            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);
            }
コード例 #2
0
            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,
                };
            }
コード例 #3
0
        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));
        }
コード例 #4
0
        public async Task <ActionResult <ApiPayment> > CreatePayment([FromBody] CreateNewPayment newPaymentData)
        {
            var payment = await paymentService.AddPaymentAsync(newPaymentData);

            return(mapper.Map <ApiPayment>(payment));
        }