public void CvvShouldHaveThreeOrFourDigits()
        {
            //https://en.wikipedia.org/wiki/Card_security_code
            var request = GlobalTestSetup.InitValidRequest();

            request.Cvv = "1234";
            var errors  = new List <string>();
            var isValid = PaymentValidator.IsPaymentRequestValid(request, TestDate, errors);

            Assert.AreEqual(true, isValid);

            request     = GlobalTestSetup.InitValidRequest();
            request.Cvv = "12345";
            errors      = new List <string>();
            isValid     = PaymentValidator.IsPaymentRequestValid(request, TestDate, errors);
            Assert.AreEqual(false, isValid);
            Assert.Contains("Invalid-Cvv", errors);

            request     = GlobalTestSetup.InitValidRequest();
            request.Cvv = "12";
            errors      = new List <string>();
            isValid     = PaymentValidator.IsPaymentRequestValid(request, TestDate, errors);
            Assert.AreEqual(false, isValid);
            Assert.Contains("Invalid-Cvv", errors);

            request     = GlobalTestSetup.InitValidRequest();
            request.Cvv = "abc";
            errors      = new List <string>();
            isValid     = PaymentValidator.IsPaymentRequestValid(request, TestDate, errors);
            Assert.AreEqual(false, isValid);
            Assert.Contains("Invalid-Cvv", errors);
        }
        public async Task ProcessPaymentControllerShouldReturnResult()
        {
            var request   = GlobalTestSetup.InitValidRequest();
            var histories = await Controller.GetHistory(request.MerchantName);

            var oldCount = histories.Count;

            var result = await Controller.Process(request);

            Assert.IsNotNull(result);
            Assert.AreEqual(false, result.HasGatewayError);
            Assert.IsNull(result.GatewayErrorMessage);

            Assert.AreEqual("PiggyBank", result.AcquiringBank);
            Assert.IsNotNull(result.AcquiringBankStatus);
            Assert.IsNotEmpty(result.AcquiringBankStatus);
            Assert.IsNotNull(result.AcquiringBankPaymentId);
            Assert.IsNotEmpty(result.AcquiringBankPaymentId);

            histories = await Controller.GetHistory(request.MerchantName);

            var newCount = histories.Count;

            Assert.AreEqual(oldCount + 1, newCount);

            var insertedPayment = await Controller.GetPaymentHistory(result.GatewayPaymentId);

            Assert.IsNotNull(insertedPayment);

            Assert.AreNotEqual(request.CardNumber, insertedPayment.CardNumber);
            Assert.AreEqual(19, insertedPayment.CardNumber.Length);
        }
        public async Task PaymentShouldBeSentToPiggyBank()
        {
            var request  = GlobalTestSetup.InitValidRequest();
            var response = await PaymentService.ProcessPayment(request);

            Assert.AreEqual("PiggyBank", response.AcquiringBank);
            Assert.IsNotNull(response.AcquiringBankStatus);
            Assert.IsNotEmpty(response.AcquiringBankStatus);
        }
        public void FullPaymentRequestShouldBeValid()
        {
            var request = GlobalTestSetup.InitValidRequest();

            var errors  = new List <string>();
            var isValid = PaymentValidator.IsPaymentRequestValid(request, TestDate, errors);

            Assert.AreEqual(true, isValid);
            Assert.AreEqual(0, errors.Count);
        }
        public async Task MerchantShouldBeInList()
        {
            var request = GlobalTestSetup.InitValidRequest();

            request.MerchantName = "DoNoExists";
            var response = await PaymentService.ProcessPayment(request);

            Assert.AreEqual(true, response.HasGatewayError);
            Assert.AreEqual("Invalid-Merchant", response.GatewayErrorMessage);
        }
        public void AmountShouldBeStrictlyPositive()
        {
            var request = GlobalTestSetup.InitValidRequest();

            request.Amount = -2.0;
            var errors  = new List <string>();
            var isValid = PaymentValidator.IsPaymentRequestValid(request, TestDate, errors);

            Assert.AreEqual(false, isValid);
            Assert.Contains("Invalid-Amount", errors);
        }
        public void CurrencyShouldBeInList()
        {
            var request = GlobalTestSetup.InitValidRequest();

            request.Currency = "CHF";
            var errors  = new List <string>();
            var isValid = PaymentValidator.IsPaymentRequestValid(request, TestDate, errors);

            Assert.AreEqual(false, isValid);
            Assert.Contains("Invalid-Currency", errors);
        }
        public async Task OtherAcquirerShouldNotBeFound()
        {
            var request = GlobalTestSetup.InitValidRequest();

            request.MerchantName = "Apple";
            var response = await PaymentService.ProcessPayment(request);

            Assert.AreEqual("OtherAcquirer", response.AcquiringBank);
            Assert.AreEqual(true, response.HasGatewayError);
            Assert.AreEqual("Invalid-AcquiringBank", response.GatewayErrorMessage);
        }
        public void CardNumberShouldHaveSixteenDigits()
        {
            var request = GlobalTestSetup.InitValidRequest();

            request.CardNumber = "1234 567 8910 1";
            var errors  = new List <string>();
            var isValid = PaymentValidator.IsPaymentRequestValid(request, TestDate, errors);

            Assert.AreEqual(false, isValid);
            Assert.Contains("Invalid-CardNumber", errors);

            request            = GlobalTestSetup.InitValidRequest();
            request.CardNumber = "abcd 5679 8910 1234";
            errors             = new List <string>();
            isValid            = PaymentValidator.IsPaymentRequestValid(request, TestDate, errors);

            Assert.AreEqual(false, isValid);
            Assert.Contains("Invalid-CardNumber", errors);
        }
        public void ExpiredCardShouldNotBeValid()
        {
            var request = GlobalTestSetup.InitValidRequest();

            request.ExpiryMonth = 01;
            request.ExpiryYear  = 20;
            var errors  = new List <string>();
            var isValid = PaymentValidator.IsPaymentRequestValid(request, TestDate, errors);

            Assert.AreEqual(false, isValid);
            Assert.Contains("Expired-Card", errors);

            request             = GlobalTestSetup.InitValidRequest();
            request.ExpiryMonth = 12;
            request.ExpiryYear  = 19;
            errors  = new List <string>();
            isValid = PaymentValidator.IsPaymentRequestValid(request, TestDate, errors);

            Assert.AreEqual(false, isValid);
            Assert.Contains("Expired-Card", errors);
        }