/// <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");
        }
示例#4
0
        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");
        }
示例#5
0
        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");
        }