public void CustomerWorkingForVeryImportantClientShouldHaveNoCreditLimit() { var customer = new Customer { Firstname = "John", Surname = "Dough", DateOfBirth = new DateTime(1977, 1, 11), EmailAddress = "*****@*****.**", Company = new Company() { Id = 2 } }; var companyMock = new Mock <Company>(); companyMock.Object.Id = 2; companyMock.Object.Name = "VeryImportantClient"; var companyRepositoryMock = new Mock <IRepository <Company> >(); companyRepositoryMock.Setup(x => x.GetById(2)).Returns(companyMock.Object); var creditServiceMock = new Mock <ICustomerCreditService>(); creditServiceMock.Setup(x => x.GetCreditLimit(customer.Firstname, customer.Surname, customer.DateOfBirth)).Returns(10000); var creditCheckService = new CreditCheckRule(creditServiceMock.Object, companyRepositoryMock.Object); var result = creditCheckService.Apply(customer); Assert.IsFalse(result.Failed); Assert.IsFalse(result.HasCreditLimit); }
public void CustomerWithCreditLimitBelowThresholdShouldFailCreditCheck() { var customer = new Customer { Firstname = "Jerome", Surname = "Kerviel", DateOfBirth = new DateTime(1977, 1, 11), EmailAddress = "*****@*****.**", Company = new Company() { Id = 7, Name = "SocGen" } }; var companyMock = new Mock <Company>(); companyMock.Object.Id = 7; companyMock.Object.Name = "SocGen"; var companyRepositoryMock = new Mock <IRepository <Company> >(); companyRepositoryMock.Setup(x => x.GetById(7)).Returns(companyMock.Object); var creditServiceMock = new Mock <ICustomerCreditService>(); creditServiceMock.Setup(x => x.GetCreditLimit(customer.Firstname, customer.Surname, customer.DateOfBirth)).Returns(499); var creditCheckService = new CreditCheckRule(creditServiceMock.Object, companyRepositoryMock.Object); var result = creditCheckService.Apply(customer); Assert.IsTrue(result.Failed); Assert.IsTrue(result.HasCreditLimit); Assert.AreEqual(499, result.CreditLimit); }
public void CustomerWithCreditLimitAboveThresholdShouldSucceedCreditCheck() { var customer = new Customer { Firstname = "John", Surname = "Dough", DateOfBirth = new DateTime(1977, 1, 11), EmailAddress = "*****@*****.**", Company = new Company() { Id = 1 } }; var companyMock = new Mock <Company>(); companyMock.Object.Id = 1; companyMock.Object.Name = "Moolah Corp."; var companyRepositoryMock = new Mock <IRepository <Company> >(); companyRepositoryMock.Setup(x => x.GetById(1)).Returns(companyMock.Object); var creditServiceMock = new Mock <ICustomerCreditService>(); creditServiceMock.Setup(x => x.GetCreditLimit(customer.Firstname, customer.Surname, customer.DateOfBirth)).Returns(10000); var creditCheckService = new CreditCheckRule(creditServiceMock.Object, companyRepositoryMock.Object); var result = creditCheckService.Apply(customer); Assert.IsFalse(result.Failed); Assert.IsTrue(result.HasCreditLimit); Assert.AreEqual(10000, result.CreditLimit); }
public void InvalidCustomerNotAddedToRepo() { var customer = new Customer() { Firstname = "Alice", Surname = "Wonderland", EmailAddress = "alice.wonderland", Company = new Company { Id = 1, Name = "L Carroll Ltd" }, DateOfBirth = DateTime.Now.AddYears(-25) }; var customerRepositoryMock = new Mock <IRepository <Customer> >(); var companyMock = new Mock <Company>(); companyMock.Object.Id = 1; companyMock.Object.Name = "L Carroll Ltd"; var companyRepositoryMock = new Mock <IRepository <Company> >(); companyRepositoryMock.Setup(x => x.GetById(1)).Returns(companyMock.Object); var creditServiceMock = new Mock <ICustomerCreditService>(); creditServiceMock.Setup(x => x.GetCreditLimit(customer.Firstname, customer.Surname, customer.DateOfBirth)).Returns(800); var creditCheckRule = new CreditCheckRule(creditServiceMock.Object, companyRepositoryMock.Object); var customerValidator = new CustomerValidator(); var customerService = new CustomerService(customerRepositoryMock.Object, companyRepositoryMock.Object, creditCheckRule, customerValidator); Assert.IsNotNull(customerService); var result = customerService.AddCustomer(customer.Firstname, customer.Surname, customer.EmailAddress, customer.DateOfBirth, 1); Assert.IsFalse(result); }