public void Process_method_should_return_payment_data_when_payment_is_successful_in_json_result()
        {
            var bank = new Mock <IBank>();

            var bankResponse = new BankResponse
            {
                PaymentId = Guid.NewGuid(),
                Status    = PaymentStatus.Success.ToString()
            };

            bank.Setup(b => b.RequestPayment(It.IsAny <PaymentPostDto>())).Returns(bankResponse);

            var payments   = Mock.Of <IPaymentRepository>();
            var controller = new PaymentController(bank.Object, payments);

            var payment = new PaymentPostDto
            {
                CardNumber = "5555555555554444",
                ExpiryDate = DateTime.Now.AddDays(10),
                Amount     = 10,
                Currency   = "GBP",
                CVV        = "321"
            };

            var result = controller.Process(payment);

            Assert.True(result is JsonResult);
            var jsonResult = result as JsonResult;

            Assert.True(jsonResult.Value is BankResponse);
            var bankResponseResult = jsonResult.Value as BankResponse;

            Assert.Equal(bankResponse.PaymentId, bankResponseResult.PaymentId);
            Assert.Equal(PaymentStatus.Success.ToString(), bankResponseResult.Status);
        }
        public void Process_method_should_request_for_the_bank_to_process_the_payment()
        {
            var bank = new Mock <IBank>();

            bank.Setup(b => b.RequestPayment(It.IsAny <PaymentPostDto>())).Returns(new BankResponse
            {
                PaymentId = Guid.NewGuid(),
                Status    = PaymentStatus.Success.ToString()
            });

            var payments   = Mock.Of <IPaymentRepository>();
            var controller = new PaymentController(bank.Object, payments);

            var payment = new PaymentPostDto
            {
                CardNumber = "5555555555554444",
                ExpiryDate = DateTime.Now.AddDays(10),
                Amount     = 10,
                Currency   = "GBP",
                CVV        = "321"
            };

            controller.Process(payment);

            bank.Verify(b => b.RequestPayment(It.Is <PaymentPostDto>(p =>
                                                                     p.CardNumber.Equals(payment.CardNumber) &&
                                                                     p.ExpiryDate.Equals(payment.ExpiryDate) &&
                                                                     p.Amount.Equals(payment.Amount) &&
                                                                     p.Currency.Equals(payment.Currency) &&
                                                                     p.CVV.Equals(payment.CVV))
                                              )
                        );
        }
예제 #3
0
        public string EditPayment(PaymentPostDto newPayment)
        {
            var paymentToUpdate = this.bmsData.Payments.Find(newPayment.Id);

            paymentToUpdate.SupplierId = newPayment.SupplierId;
            paymentToUpdate.ClientId   = newPayment.ClientId;
            paymentToUpdate.ProjectId  = newPayment.ProjectId;
            paymentToUpdate.Date       = newPayment.Date;
            paymentToUpdate.Price      = newPayment.Price;
            paymentToUpdate.Vat        = newPayment.Vat;
            paymentToUpdate.Total      = newPayment.Total;

            this.bmsData.Payments.Update(paymentToUpdate);
            this.bmsData.SaveChanges();

            return($"Payment was updated.");
        }
예제 #4
0
        public IActionResult Process([FromBody] PaymentPostDto payment)
        {
            var result = _bank.RequestPayment(payment);

            var paymentEntity = new PaymentEntity
            {
                PaymentId     = result.PaymentId,
                PaymentStatus = result.Status,
                CardNumber    = payment.CardNumber,
                ExpiryDate    = payment.ExpiryDate.Date,
                Amount        = payment.Amount,
                Currency      = payment.Currency,
                CVV           = payment.CVV
            };

            _payments.Add(paymentEntity);

            return(new JsonResult(result));
        }
예제 #5
0
        public string CreatePayment(PaymentPostDto newPayment)
        {
            var UserSrv = new UserService(this.bmsData);
            var payment = new Payment()
            {
                ClientId   = newPayment.ClientId,
                SupplierId = newPayment.SupplierId,
                ProjectId  = newPayment.ProjectId,
                Date       = newPayment.Date,
                Price      = newPayment.Price,
                Vat        = newPayment.Vat,
                Total      = newPayment.Total
            };

            this.bmsData.Payments.Add(payment);

            this.bmsData.SaveChanges();

            return($"Payment for {newPayment.Total} was added");
        }
예제 #6
0
        public async void Submit_a_valid_payment_and_check_it_exists_in_the_database()
        {
            using var client = new HttpClient { BaseAddress = new Uri(_config["HostUrl"]) };

            var random     = new Random();
            var currencies = System.Enum.GetNames(typeof(Currency));
            var request    = new PaymentPostDto
            {
                CardNumber = "5555555555554444",
                ExpiryDate = DateTime.Now.AddDays(random.Next(5, 200)),
                Amount     = 10,
                Currency   = currencies[random.Next(0, currencies.Length)],
                CVV        = $"{random.Next(100, 999)}"
            };

            var jsonOptions = new JsonSerializerOptions
            {
                PropertyNameCaseInsensitive = true
            };

            var content      = new StringContent(JsonSerializer.Serialize(request), Encoding.UTF8, "application/json");
            var postResponse = await client.PostAsync("/api/payment", content);

            var responseString = await postResponse.Content.ReadAsStringAsync();

            var responseData = JsonSerializer.Deserialize <BankResponse>(responseString, jsonOptions);

            var getResponse = await client.GetAsync($"/api/payment/paymentId/{responseData.PaymentId}");

            var getResponseString = await getResponse.Content.ReadAsStringAsync();

            var getResponseData = JsonSerializer.Deserialize <PaymentGateway.Test.Integration.PaymentGetDto>(getResponseString, jsonOptions);

            Assert.Equal(responseData.PaymentId, getResponseData.PaymentId);
            Assert.Equal(PaymentStatus.Success.ToString(), getResponseData.PaymentStatus);
            Assert.Equal("************4444", getResponseData.CardNumber);
            Assert.Equal(request.ExpiryDate.Date, getResponseData.ExpiryDate);
            Assert.Equal(request.Amount, getResponseData.Amount);
            Assert.Equal(request.Currency, getResponseData.Currency);
            Assert.Equal(request.CVV, getResponseData.CVV);
        }
예제 #7
0
        public BankResponse RequestPayment(PaymentPostDto payment)
        {
            if (payment == null)
            {
                throw new ArgumentNullException("payment");
            }

            Guid paymentId = Guid.NewGuid();

            if (payment.ExpiryDate.Date < System.DateTime.Now.Date)
            {
                return(new BankResponse
                {
                    PaymentId = paymentId,
                    Status = PaymentStatus.Rejected.ToString()
                });
            }

            return(new BankResponse
            {
                PaymentId = paymentId,
                Status = PaymentStatus.Success.ToString()
            });
        }
예제 #8
0
        private void HandleSaveCommand(object parameter)
        {
            var result = string.Empty;

            try
            {
                var newPayment = new PaymentPostDto
                {
                    Id         = this.Id,
                    ClientId   = this.SelectedClient.Id,
                    SupplierId = this.SelectedSupplier.Id,
                    ProjectId  = this.SelectedProject.Id,
                    Date       = this.PaymentDate,
                    Price      = this.PaymentPrice,
                    Vat        = this.PaymentVat,
                    Total      = this.PaymentTotal
                };
                if (this.SelectedPayment == null)
                {
                    result = this.PaymentService.CreatePayment(newPayment);
                    MessageBox.Show(result);
                    this.CloseAction();
                }
                else
                {
                    result = this.PaymentService.EditPayment(newPayment);
                    MessageBox.Show(result);
                    this.CloseAction();
                }
            }
            catch (Exception e)
            {
                result = e.Message;
                MessageBox.Show(result);
            }
        }