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)) ) ); }
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."); }
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)); }
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"); }
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); }
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() }); }
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); } }