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); }
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); }
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); }
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); }
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); }
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); }
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)); }
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); }
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); }
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); }
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); }
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); }
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)); }
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); }
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)); }
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")); }
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(); }