public CreditCardApplicationDecision Evaluate(CreditCardApplication application)
        {
            if (_fraudLookup != null && _fraudLookup.IsFraudRisk(application))
            {
                return(CreditCardApplicationDecision.ReferredToHumanFraudRisk);
            }

            if (application.GrossAnnualIncome >= HighIncomeThreshold)
            {
                return(CreditCardApplicationDecision.AutoAccepted);
            }

            if (_validator.ServiceInformation.License.LicenseKey == "EXPIRED")
            {
                return(CreditCardApplicationDecision.ReferredToHuman);
            }

            _validator.ValidationMode = application.Age >= 30 ? ValidationMode.Detailed : ValidationMode.Quick;

            //var isValidFrequentFlyerNumber =
            //_validator.IsValid(application.FrequentFlyerNumber);

            bool isValidFrequentFlyerNumber;

            try
            {
                isValidFrequentFlyerNumber =
                    _validator.IsValid(application.FrequentFlyerNumber);
            }
            catch (Exception)
            {
                // log
                return(CreditCardApplicationDecision.ReferredToHuman);
            }

            if (!isValidFrequentFlyerNumber)
            {
                return(CreditCardApplicationDecision.ReferredToHuman);
            }

            if (application.Age <= AutoReferralMaxAge)
            {
                return(CreditCardApplicationDecision.ReferredToHuman);
            }

            if (application.GrossAnnualIncome < LowIncomeThreshold)
            {
                return(CreditCardApplicationDecision.AutoDeclined);
            }

            return(CreditCardApplicationDecision.ReferredToHuman);
        }
Ejemplo n.º 2
0
        public CreditCardApplicationDecision Evaluate(CreditCardApplication application)
        {
            if (application.GrossAnnualIncome >= HighIncomeThreshhold)
            {
                return(CreditCardApplicationDecision.AutoAccepted);
            }

            //if (_validator.LicenseKey == "EXPIRED")
            //    return CreditCardApplicationDecision.ReferredToHuman;
            if (_validator.ServiceInformation.License.LicenseKey == "EXPIRED")
            {
                return(CreditCardApplicationDecision.ReferredToHuman);
            }

            _validator.ValidationMode = application.Age >= 30 ? ValidationMode.Detailed :
                                        ValidationMode.Quick;

            var isValidFrequentFlyerNumber =
                _validator.IsValid(application.FrequentFlyerNumber);

            bool isValidFrequentFlyerNumberExc;

            try
            {
                isValidFrequentFlyerNumberExc =
                    _validator.IsValid(application.FrequentFlyerNumber);
            }
            catch (System.Exception)
            {
                return(CreditCardApplicationDecision.ReferredToHuman);
            }
            //05-04 Method Times Implement
            //_validator.IsValid(application.FrequentFlyerNumber);
            if (!isValidFrequentFlyerNumber)
            {
                return(CreditCardApplicationDecision.ReferredToHuman);
            }

            if (application.Age <= AutoReferralMaxAge)
            {
                return(CreditCardApplicationDecision.ReferredToHuman);
            }

            if (application.GrossAnnualIncome < LowIncomeThreshhold)
            {
                return(CreditCardApplicationDecision.AutoDeclined);
            }

            return(CreditCardApplicationDecision.ReferredToHuman);
        }
        public void ReferWhenLicenseKeyExpired()
        {
            mockValidator.Setup(x => x.ServiceInformation.License.LicenseKey).Returns("EXPIRED");

            var sut = new CreditCardApplicationEvaluator(mockValidator.Object);

            var application = new CreditCardApplications.CreditCardApplication {
                Age = 42
            };

            CreditCardApplicationDecision decision = sut.Evaluate(application);

            Assert.Equal(CreditCardApplicationDecision.ReferredToHuman, decision);
        }
        public void SetDetailedLookupForOlderApplications()
        {
            var application = new CreditCardApplications.CreditCardApplication
            {
                Age = 30
            };

            sut.Evaluate(application);

            mockValidator.VerifySet(p => p.ValidationMode = It.IsAny <ValidationMode>(), Times.Once);
            mockValidator.Verify(p => p.IsValid(null), Times.Once);

            mockValidator.VerifyNoOtherCalls();
        }
        public void ReferFraudRisk()
        {
            var mockFraudLookup = new Mock <FraudLookup>();

            mockFraudLookup.Setup(p => p.IsFraudRisk(It.IsAny <CreditCardApplications.CreditCardApplication>()))
            .Returns(true);

            // "Override" sut in the class field to create a version with fraud lookup
            var sut         = new CreditCardApplicationEvaluator(mockValidator.Object, mockFraudLookup.Object);
            var application = new CreditCardApplications.CreditCardApplication();

            var decision = sut.Evaluate(application);

            Assert.Equal(CreditCardApplicationDecision.ReferredToHumanFraudRisk, decision);
        }
        public void IncrementLookupCount()
        {
            mockValidator.Setup(p => p.IsValid(It.IsAny <string>()))
            .Returns(true)
            .Raises(p => p.ValidatorLookupPerformed += null, EventArgs.Empty);

            var application = new CreditCardApplications.CreditCardApplication
            {
                FrequentFlyerNumber = "x",
                Age = 25
            };

            sut.Evaluate(application);

            //mockValidator.Raise(p => p.ValidatorLookupPerformed += null, EventArgs.Empty);

            Assert.Equal(1, sut.ValidatorLookupCount);
        }
        public void ReferInvalidFrequentFlyerApplications_ReturnValuesSequence()
        {
            mockValidator.SetupSequence(p => p.IsValid(It.IsAny <string>()))
            .Returns(false)
            .Returns(true);

            var application = new CreditCardApplications.CreditCardApplication
            {
                Age = 25
            };

            var firstDecision = sut.Evaluate(application);

            Assert.Equal(CreditCardApplicationDecision.ReferredToHuman, firstDecision);

            var secondDecision = sut.Evaluate(application);

            Assert.Equal(CreditCardApplicationDecision.AutoDeclined, secondDecision);
        }
        public void LinqToMocks()
        {
            var mockValidator = Mock.Of <IFrequentFlyerNumberValidator>(
                validator =>
                validator.ServiceInformation.License.LicenseKey == "OK" &&
                validator.IsValid(It.IsAny <string>()) == true

                );

            // "Override" sut in class field to demonstrate LINQ setup
            var sut         = new CreditCardApplicationEvaluator(mockValidator);
            var application = new CreditCardApplications.CreditCardApplication()
            {
                Age = 25
            };

            var decision = sut.Evaluate(application);

            Assert.Equal(CreditCardApplicationDecision.AutoDeclined, decision);
        }
        public void DeclineLowIncomeApplications()
        {
            var mockValidator = new Mock <IFrequentFlyerNumberValidator>(MockBehavior.Strict);

            //ako e "x" shte vurne true inache - false
            //mockValidator.Setup(x => x.IsValid("x")).Returns(true);

            //ako ne ni puka kakvo se podava na metoda slagame isAny
            mockValidator.Setup(x => x.IsValid(It.IsAny <string>())).Returns(true);
            //mockValidator.Setup(x => x.IsValid(It.Is<string>(x => x.StartsWith('x')))).Returns(true);

            var sut = new CreditCardApplicationEvaluator(mockValidator.Object);

            var application = new CreditCardApplications.CreditCardApplication()
            {
                Age = 42,
                GrossAnnualIncome = 19999
            };

            var decision = sut.Evaluate(application);

            Assert.Equal(CreditCardApplicationDecision.AutoDeclined, decision);
        }
Ejemplo n.º 10
0
        public CreditCardApplicationDecision Evaluate(CreditCardApplication application)
        {
            if (application.GrossAnnualIncome >= HighIncomeThreshold)
            {
                return(CreditCardApplicationDecision.AutoAccepted);
            }

            if (!_validator.IsValid(application.FrequentFlyerNumber))
            {
                return(CreditCardApplicationDecision.ReferredToHuman);
            }

            if (application.Age <= AutoReferralMaxAge)
            {
                return(CreditCardApplicationDecision.ReferredToHuman);
            }

            if (application.GrossAnnualIncome < LowIncomeTrheshold)
            {
                return(CreditCardApplicationDecision.AutoDeclined);
            }

            return(CreditCardApplicationDecision.ReferredToHuman);
        }
Ejemplo n.º 11
0
 public bool isFraudRisk(CreditCardApplication application)
 {
     return(CheckApplication(application));
 }