public void ShouldScoreApplicationCorrectly()
        {
            // Create and configure our fakes that we want to use
            var fakeMainframe = new Mock<IBankMainframeGateway>();
            fakeMainframe.Setup(x => x.CreateNew(It.IsAny<CreditCardApplication>())).Returns(42);

            // Create our DI container
            var kernel = new StandardKernel();

            // Tell the DI container to use the real CreditCheckerGateway
            kernel.Bind<ICreditCheckerGateway>().To<CreditCheckerGateway>();

            // Tell the DI container to use the fake IBankMainframeGateway
            kernel.Bind<IBankMainframeGateway>().ToConstant(fakeMainframe.Object);

            // Use the DI container to create the object graph, rather than new keyword
            var sut = kernel.Get<CreditCardApplicationScorer>();

            var a = new CreditCardApplication
                        {
                            ApplicantName = "Jason",
                            ApplicantAgeInYears = 44,
                            AirlineFrequentFlyerNumber = "A1234567"
                        };

            var result = sut.ScoreApplication(a);

            Assert.That(result, Is.Not.Null);

            // Note that this seems more complex than the below. For this example this is true,
            // but if we were creating a larger/complex subsystem object graph, then using a DI container
            // actually simplifies things.
        }
        public void ReferFraudRisk()
        {
            var mockFraudLookup = new Mock <FraudLookup>();

            // mockFraudLookup.Setup(x => x.IsFraudRisk(It.IsAny<CreditCardApplication>())).Returns(true);
            mockFraudLookup.Protected().Setup <bool>("CheckApplication", ItExpr.IsAny <CreditCardApplication>()).Returns(true);
            _sut = new CreditCardApplicationEvaluator(_mockValidator.Object, mockFraudLookup.Object);
            var app      = new CreditCardApplication();
            var decision = _sut.Evaluate(app);

            Assert.Equal(CreditCardApplicationDecision.ReferredToHumanFraudRisk, decision);
        }
Exemplo n.º 3
0
        public void AcceptHighIncomeApplications(
            [Frozen] Mock <IFrequentFlyerNumberValidator> mock,
            CreditCardApplication application,
            CreditCardApplicationEvaluator sut)
        {
            SetupDefaultValuesFor(mock);

            application.GrossAnnualIncome = 100_000;
            var decision = sut.Evaluate(application);

            Assert.Equal(CreditCardApplicationDecision.AutoAccepted, decision);
        }
Exemplo n.º 4
0
        public void SetDetailedLookupForOlderApplications(
            [Frozen] Mock <IFrequentFlyerNumberValidator> mock,
            CreditCardApplication application,
            CreditCardApplicationEvaluator sut)
        {
            SetupDefaultValuesFor(mock);
            application.Age = 30;

            sut.Evaluate(application);
            mock.VerifySet(x => x.ValidationMode = It.IsAny <ValidationMode>(),
                           Times.Once);
        }
Exemplo n.º 5
0
        public void ReferYoungApplications(
            [Frozen] Mock <IFrequentFlyerNumberValidator> mock,
            CreditCardApplication application,
            CreditCardApplicationEvaluator sut)
        {
            SetupDefaultValuesFor(mock);
            application.Age = 19;

            var decision = sut.Evaluate(application);

            Assert.Equal(CreditCardApplicationDecision.ReferredToHuman, decision);
        }
        public void ReferInvalidFrequentFlyerNumbers()
        {
            _mockValidator.Setup(x => x.IsValid(It.IsAny <string>())).Returns(false);


            var application = new CreditCardApplication();

            Assert.Equal(CreditCardApplicationDecision.ReferredToHuman, _sut.Evaluate(application));

            // Fail the test if the mock object is not called once
            _mockValidator.Verify(x => x.IsValid(It.IsAny <string>()), Times.Once);
        }
Exemplo n.º 7
0
        public void ReferInvalidFrequentFlyerApplications()
        {
            mockValidator
            .Setup(x => x.IsValid(It.IsAny <string>()))
            .Returns(false);

            var application = new CreditCardApplication();

            CreditCardApplicationDecision decision = sut.Evaluate(application);

            Assert.Equal(CreditCardApplicationDecision.ReferredToHuman, decision);
        }
Exemplo n.º 8
0
        public void AcceptAllHighIncomeApplicants(int income)
        {
            //var sut = new CreditCardApplicationEvaluator(new FrequentFlyerNumberValidator());

            var application = new CreditCardApplication
            {
                GrossAnnualIncome = income
            };

            Assert.Equal(CreditCardApplicationDecision.AutoAccepted,
                         _sut.Evaluate(application));
        }
        public void ReferYoungApplications()
        {
            var sut = new CreditCardApplicationEvaluator(null);

            var application = new CreditCardApplication {
                Age = 19
            };

            CreditCardApplicationDecision decision = sut.Evaluate(application);

            Assert.Equal(CreditCardApplicationDecision.ReferredToHuman, decision);
        }
 public async Task AddAsync(CreditCardApplication application)
 {
     try
     {
         _db.CreditCardApplications.Add(application);
         await _db.SaveChangesAsync();
     }
     catch (Exception ex)
     {
         throw new Exception(ex.Message);
     }
 }
        public void DetailedValidationsForOlderCustomerApplication()
        {
            mockValidator.SetupProperty(x => x.ValidationMode);
            var application = new CreditCardApplication()
            {
                Age = 42
            };

            CreditCardApplicationDecision decision = sut.Evaluate(application);

            Assert.Equal(ValidationMode.Detailed, mockValidator.Object.ValidationMode);
        }
Exemplo n.º 12
0
        public void ReferYoungApplications()
        {
            validator.DefaultValue = DefaultValue.Mock;

            var application = new CreditCardApplication {
                Age = 19
            };

            CreditCardApplicationDecision decision = sut.Evaluate(application);

            Assert.Equal(CreditCardApplicationDecision.ReferredToHuman, decision);
        }
        public void ValidateFrequentFlyerNumberForLowIncomeApplications()
        {
            Mock <IFrequentFlyerNumberValidator> mockValidator = new Mock <IFrequentFlyerNumberValidator>();

            mockValidator.Setup(x => x.License).Returns("OK");

            var sut = new CreditCardApplicationEvaluator(mockValidator.Object);
            var crediCardApplication = new CreditCardApplication();

            sut.Evaluate(crediCardApplication);
            mockValidator.Verify(x => x.IsValid(null), Times.Once);
        }
        public void ReferWhenFrequentFlyerValidationError()
        {
            mockValidator.Setup(x => x.IsValid(It.IsAny <string>())).Throws <Exception>();

            var application = new CreditCardApplication {
                Age = 42
            };

            CreditCardApplicationDecision decision = sut.Evaluate(application);

            Assert.Equal(CreditCardApplicationDecision.ReferredToHuman, decision);
        }
        public void AcceptAllHighIncomeApplicants(int income)
        {
            var sut = new CreditCardApplicationEvaluator();

            var application = new CreditCardApplication
            {
                GrossAnnualIncome = income
            };

            Assert.Equal(CreditCardApplicationDecision.AutoAccepted,
                         sut.Evaluate(application));
        }
Exemplo n.º 16
0
        public void ReferInvalidFrequestFlerApplications()
        {
            Mock <IFrequentFlyerNumberValidator> mockValidator =
                new Mock <IFrequentFlyerNumberValidator>();

            mockValidator.Setup(x => x.IsValid(It.IsAny <string>())).Returns(false);
            mockValidator.Setup(x => x.serviceInformation.License.LicenseKey).Returns("OK");
            var sut         = new CreditCardApplicationEvaluator(mockValidator.Object);
            var application = new CreditCardApplication();
            CreditCardApplicationDecision decision = sut.Evaluate(application);

            Assert.Equal(CreditCardApplicationDecision.ReferredToHuman, decision);
        }
Exemplo n.º 17
0
        public void ReferYoungApplications()
        {
            Mock <IFrequentFlyerNumberValidator> mockValidator = new Mock <IFrequentFlyerNumberValidator>();

            mockValidator.Setup(x => x.serviceInformation.License.LicenseKey).Returns("OK");
            var sut         = new CreditCardApplicationEvaluator(mockValidator.Object);
            var application = new CreditCardApplication {
                Age = 19
            };
            CreditCardApplicationDecision decision = sut.Evaluate(application);

            Assert.Equal(CreditCardApplicationDecision.ReferredToHuman, decision);
        }
Exemplo n.º 18
0
        public void ReferWhenLicenseKeyExpired()
        {
            mockValidator.Setup(x => x.ServiceInformation.License.LicenseKey)
            .Returns("EXPIRED");

            var application = new CreditCardApplication {
                Age = 42
            };

            CreditCardApplicationDecision decision = sut.Evaluate(application);

            Assert.Equal(CreditCardApplicationDecision.ReferredToHuman, decision);
        }
Exemplo n.º 19
0
        public void ShouldValidateFrequentFlayerNumberForLowIncomeApplications_CustomMessage()
        {
            var application = new CreditCardApplication {
                FrequentPlayerNumber = "q"
            };

            //var application = new CreditCardApplication(); uncomment this to see the test fail and the error message
            sut.Evaluate(application);

            //Verify that the method IsValid was execute with "q" as parameters
            //mockValidator.Verify(x => x.IsValid("q"));
            mockValidator.Verify(x => x.IsValid(It.IsNotNull <string>()), "Frequent flayer number should not be null");
        }
        private SubmissionResult SubmitAValidApplication()
        {
            var sut = new CreditCardApplicationServiceReference.CreditCardApplicationServiceClient();

            var a = new CreditCardApplication
            {
                ApplicantName = ApplicantName,
                ApplicantAgeInYears = 30,
                AirlineFrequentFlyerNumber = "A1234567"
            };

            return sut.SubmitApplication(a);
        }
Exemplo n.º 21
0
        public void ReferInvalidFrequentFlyerApplications()
        {
            var mockValidator = new Mock <IFrequentFlyerNumberValidator>(MockBehavior.Loose);

            mockValidator.Setup(x => x.IsValid(It.IsAny <string>())).Returns(false);
            mockValidator.Setup(x => x.ServiceInformation.License.LicenseKey).Returns("12345");

            var application = new CreditCardApplication();

            var decision = sut.Evaluate(application);

            Assert.Equal(CreditCardApplicationDecision.ReferredToHuman, decision);
        }
        public void ReferYoungApplicantsWhoAreNotHighIncome(int age)
        {
            var sut = new CreditCardApplicationEvaluator();

            var application = new CreditCardApplication
            {
                GrossAnnualIncome = ExpectedHighIncomeThreshhold - 1,
                Age = age
            };

            Assert.Equal(CreditCardApplicationDecision.ReferredToHuman,
                         sut.Evaluate(application));
        }
        public void SetDetailedLookupForOlderApplication()
        {
            var application = new CreditCardApplication
            {
                Age = 30
            };

            sut.Evaluate(application);

            mockValidator.VerifySet(x => x.ValidationMode = ValidationMode.Detailed);

            //mockValidator.VerifyNoOtherCalls();
        }
        public void CreditCardApplication_AgeReferedWhenUnder20()
        {
            // Arrange
            var _application = new CreditCardApplication {
                GrossAnnualIncome = 35452m, Age = 20, FrequentFlyerNumber = "test"
            };

            // Act
            CreditCardApplicationDecision decision = sut.Evaluate(_application);

            // Assert
            Assert.Equal(CreditCardApplicationDecision.ReferredToHuman, decision);
        }
Exemplo n.º 25
0
        public void UseDeyailedLookupForOlderApplications()
        {
            //mockValidator.SetupAllProperties();
            //mockValidator.SetupProperty(v => v.ValidationMode);

            var application = new CreditCardApplication {
                Age = 30
            };

            var decision = sut.Evaluate(application);

            Assert.Equal(ValidationMode.Detailed, mockValidator.Object.ValidationMode);
        }
        public void DeclineAllApplicantsWhoAreLowIncome(int income)
        {
            var sut = new CreditCardApplicationEvaluator();

            var application = new CreditCardApplication
            {
                GrossAnnualIncome = income,
                Age = 21
            };

            Assert.Equal(CreditCardApplicationDecision.AutoDeclined,
                         sut.Evaluate(application));
        }
Exemplo n.º 27
0
        public void ValidateFrequentFlyerNumberForLowIncomeApplications()
        {
            //_mockFrequentFlyerValidator.Setup(x => x.ServiceInformation.License.LicenseKey).Returns("Ok");

            //CreditCardApplicationEvaluator sut = new CreditCardApplicationEvaluator(_mockFrequentFlyerValidator.Object);
            CreditCardApplication application = new CreditCardApplication {
                FrequentFlyerNumber = "q"
            };

            sut.Evaluate(application);

            _mockFrequentFlyerValidator.Verify(x => x.IsValid(It.IsAny <string>()), Times.Once);
        }
Exemplo n.º 28
0
        public void ValidateFrequentFlyerNumberForLowIncomeApplications()
        {
            mockValidator.Setup(x => x.ServiceInformation.License.LicenseKey).Returns("OK");

            var application = new CreditCardApplication
            {
                FrequentFlyerNumber = "Q"
            };

            sut.Evaluate(application);

            mockValidator.Verify(x => x.IsValid("Q"));
        }
        private SubmissionResult SubmitAValidApplication()
        {
            var sut = new CreditCardApplicationServiceReference.CreditCardApplicationServiceClient();

            var a = new CreditCardApplication
            {
                ApplicantName              = ApplicantName,
                ApplicantAgeInYears        = 30,
                AirlineFrequentFlyerNumber = "A1234567"
            };

            return(sut.SubmitApplication(a));
        }
Exemplo n.º 30
0
        public void SetDetailedLookupForOlderApplications()
        {
            // Arrange
            var application = new CreditCardApplication {
                Age = 30
            };

            // Act
            this.sut.Evaluate(application);

            // Assert
            this.mockValidator.VerifySet(x => x.ValidationMode = It.IsAny <ValidationMode>(), Times.Once);
        }
        public void ShouldDetectInvalidAirlineNumber()
        {
            var fakeValidator = new Mock<IAirlineMembershipNumberValidator>();
            fakeValidator.Setup(x => x.IsValid(It.IsAny<string>())).Returns(false);

            var a = new CreditCardApplication();

            var sut = new ApplicationDetailsValidator(fakeValidator.Object);

            var errors = sut.Validate(a);

            Assert.That(errors, Has.Exactly(1).EqualTo("Airline membership number is invalid"));
        }
Exemplo n.º 32
0
        public void UseDetailedLookupForOlderApplications()
        {
            // Arrange
            var application = new CreditCardApplication {
                Age = 30
            };

            // Act
            this.sut.Evaluate(application);

            // Assert
            Assert.Equal(ValidationMode.Detailed, this.mockValidator.Object.ValidationMode);
        }
        public void ReferNonYoungApplicantsWhoAreMiddleIncome(int income)
        {
            var sut = new CreditCardApplicationEvaluator();

            var application = new CreditCardApplication
            {
                GrossAnnualIncome = income,
                Age = 21
            };

            Assert.Equal(CreditCardApplicationDecision.ReferredToHuman,
                         sut.Evaluate(application));
        }
        public SubmissionResult SubmitApplication(CreditCardApplication application)
        {
            var sr = new SubmissionResult {ValidationErrors = _validator.Validate(application)};

            var isValidApplication = !sr.ValidationErrors.Any();

            if (!isValidApplication)
            {
                return sr;
            }

            sr.ReferenceNumber = _scorer.ScoreApplication(application);

            return sr;
        }
        public void ShouldDetectUseAirlineValidatorToCheckNumber()
        {
            var fakeValidator = new Mock<IAirlineMembershipNumberValidator>();

            var a = new CreditCardApplication
            {
                AirlineFrequentFlyerNumber = "x123"
            };

            var sut = new ApplicationDetailsValidator(fakeValidator.Object);

            sut.Validate(a);

            fakeValidator.Verify(x => x.IsValid("x123"),Times.Once());
        }
        public void ShouldDetectBlankName()
        {
            var fakeValidator = new Mock<IAirlineMembershipNumberValidator>();

            var a = new CreditCardApplication
                                          {
                                              ApplicantName=""
                                          };

            var sut = new ApplicationDetailsValidator(fakeValidator.Object);

            var errors = sut.Validate(a);

            Assert.That(errors,Has.Exactly(1).EqualTo("Name cannot be blank."));
        }
        public void ShouldDeclineUnderAgeApplicant()
        {
            var fakeGateway = new Mock<ICreditCheckerGateway>();

            var sut = new CreditCardApplicationScorer(fakeGateway.Object, null);

            var application = new CreditCardApplication
                                  {
                                      ApplicantAgeInYears = 20
                                  };

            var result = sut.ScoreApplication(application);

            Assert.That(result, Is.Null);
        }
        public void ShouldValidateInCorrectApplication()
        {
            // Example of internal classes being integration tested together

            var sut = new ApplicationDetailsValidator(new AirlineMembershipNumberValidator());

            var a = new CreditCardApplication
            {
                ApplicantName = "Lisa",
                ApplicantAgeInYears = 44,
                AirlineFrequentFlyerNumber = "badnumber"
            };
            var errors = sut.Validate(a);

            Assert.That(errors, Is.Not.Empty);
        }
        public List<string> Validate(CreditCardApplication application)
        {
            var errors = new List<string>();

            if (string.IsNullOrWhiteSpace(application.ApplicantName))
            {
                errors.Add("Name cannot be blank.");
            }

            if (! _airlineNumberValidator.IsValid(application.AirlineFrequentFlyerNumber))
            {
                errors.Add("Airline membership number is invalid");
            }

            return errors;
        }
        public int? ScoreApplication(CreditCardApplication application)
        {
            var isApplicantTooYoung = application.ApplicantAgeInYears < 21;

            if (isApplicantTooYoung)
            {
                return null;
            }

            var hasGoodCreditHistory =  _creditCheckerGateway.HasGoodCreditHistory(application.ApplicantName);

            if (!hasGoodCreditHistory)
            {
                return null;
            }

            return _mainframeGateway.CreateNew(application);
        }
        public void ShouldAskGatewayForCreditCheck()
        {
            var fakeGateway = new Mock<ICreditCheckerGateway>();
            var fakeMainframe = new Mock<IBankMainframeGateway>();

            var sut = new CreditCardApplicationScorer(fakeGateway.Object, fakeMainframe.Object);

            var application = new CreditCardApplication
            {
                ApplicantAgeInYears = 30,
                ApplicantName = "Jason"
            };

            sut.ScoreApplication(application);

            // check that the fake's HasGoodCreditHistory method was called with the parameter "Jason", exactly one time
            fakeGateway.Verify(x => x.HasGoodCreditHistory("Jason"),Times.Once());
        }
        public void ShouldAcceptCorrectAgedApplicantWithGoodCreditHistory()
        {
            const int expectedMainframeRefNum = 8376;

            var fakeGateway = new Mock<ICreditCheckerGateway>();
            var fakeMainframe = new Mock<IBankMainframeGateway>();

            fakeGateway.Setup(x => x.HasGoodCreditHistory(It.IsAny<string>())).Returns(true);
            fakeMainframe.Setup(x => x.CreateNew(It.IsAny<CreditCardApplication>())).Returns(expectedMainframeRefNum);

            var sut = new CreditCardApplicationScorer(fakeGateway.Object, fakeMainframe.Object);

            var application = new CreditCardApplication
            {
                ApplicantAgeInYears = 30
            };

            var result = sut.ScoreApplication(application);

            Assert.That(result, Is.EqualTo(expectedMainframeRefNum));
        }
 public int CreateNew(CreditCardApplication application)
 {
     // Simulation of interacting with external system
     return new Random().Next();
 }