/// <summary> /// Create a payment request /// </summary> /// <param name="request"></param> /// <returns>Returns the id of th created payment</returns> public string Create(IPaymentRequest request) { _logger?.LogTrace("Writing request to in-memory store"); if (request == null) { throw new ArgumentNullException(nameof(request)); } if (string.IsNullOrEmpty(request.Id)) { throw new ArgumentException("The request must have an Id", nameof(request.Id)); } // Check if repository contains key if (_inMemoryStore.ContainsKey(request.Id)) { throw new Exception($"Payment request with id '{request.Id}' already exists in repository"); } var repositoryRequest = new SecuredPaymentRequest(request); var result = _inMemoryStore.GetOrAdd(request.Id, repositoryRequest); // TODO: Create exception type for this exception // TODO: Add check to verify if operation was get or add, i.e. compare request and result to ensure // they are the same _logger?.LogTrace("Writen request to in-memory store"); return(result.Id); }
public void Constructor_SecuresCvv() { // Arrange var request = new PaymentRequest("123456789", DateTime.Now, 100, "GPB", 123); // Act var securedRequest = new SecuredPaymentRequest(request); // Assert Assert.AreEqual("***", securedRequest.Cvv, "Cvv should be secured"); }
public void Constructor_AllOtherPropertiesTheSame() { // Arrange var request = new PaymentRequest("123456789", DateTime.Now, 100, "GPB", 123); // Act var securedRequest = new SecuredPaymentRequest(request); // Assert Assert.AreEqual(request.Amount, securedRequest.Amount, "Amount should be secured"); Assert.AreEqual(request.CurrencyCode, securedRequest.CurrencyCode, "CurrencyCode should be secured"); Assert.AreEqual(request.ExpiryDate, securedRequest.ExpiryDate, "ExpiryDate should be secured"); Assert.AreEqual(request.Id, securedRequest.Id, "Id should be secured"); }
public void Get_Unsucessful() { var request = new PaymentRequest("123456789", DateTime.Now.AddYears(1), 100, "GBP", 123); var securedRequest = new SecuredPaymentRequest(request); _respository.Read(request.Id).Returns(s => throw new Exception()); // Act - Null var actionsResult = _paymentsController.Get(request.Id).GetAwaiter().GetResult(); var result = actionsResult.Result as StatusCodeResult; // Assert Assert.AreEqual(500, result.StatusCode, "The result should be as expected"); }
public void Get_Successful() { // Arrange var request = new PaymentRequest("123456789", DateTime.Now.AddYears(1), 100, "GBP", 123); var securedRequest = new SecuredPaymentRequest(request); _respository.Read(request.Id).Returns(securedRequest); // Act - Null var actionsResult = _paymentsController.Get(request.Id).GetAwaiter().GetResult(); var result = actionsResult.Result as JsonResult; // Verify value var returnedRequest = result.Value as SecuredPaymentRequest; Assert.AreEqual(securedRequest.Id, returnedRequest.Id, "The id should be as expected"); Assert.AreEqual(securedRequest.CardNumber, returnedRequest.CardNumber, "The CardNumber should be as expected"); Assert.AreEqual(securedRequest.CurrencyCode, returnedRequest.CurrencyCode, "The CurrencyCode should be as expected"); Assert.AreEqual(securedRequest.Cvv, returnedRequest.Cvv, "The Cvv should be as expected"); Assert.AreEqual(securedRequest.ExpiryDate, returnedRequest.ExpiryDate, "The ExpiryDate should be as expected"); Assert.AreEqual(securedRequest.Amount, returnedRequest.Amount, "The Amount should be as expected"); }