// ~20 LOC private CustomerCreatedViewModel RegisterCustomer1( CreateCustomerViewModel createCustomerViewModel) { var customer = Validate(createCustomerViewModel); customer = _customerRepository.Create(customer); if (createCustomerViewModel.WantsPremiumSupport) { var creditCardGatewayResponse = _creditCardGateway .Charge(customer.CreditCardNumber); if (creditCardGatewayResponse.ChargeWasBooked) { _customerRepository.Upgrade(customer); } } _mailConfirmer.SendWelcome(customer); return(new CustomerCreatedViewModel(customer.Id) { Success = true }); }
public CustomerRegistrationTests() { var mapper = AutomapperConfiguration.Init(); _customerRepository = Substitute.For <ICustomerRepository>(); _creditCardGateway = Substitute.For <ICreditCardGateway>(); _mailConfirmer = Substitute.For <IMailConfirmer>(); // Default objects ('stubs') var customer = Mocks.GetCustomer(); _vm = Mocks.GetCreateCustomerViewModel(); _creditCardGatewayResponse = Mocks.GetCreditCardGatewayResponse(); // Default system under test ('sut') _sut = new CustomerRegistration(mapper, _customerRepository, _mailConfirmer, _creditCardGateway); // Default Behaviour _customerRepository.Create(Arg.Any <Customer>()).Returns(customer); _customerRepository.CreateRop(Arg.Any <Customer>()).Returns(Result.Ok(customer)); _customerRepository.UpgradeToPremium(Arg.Any <Customer>()).Returns(Result.Ok(customer)); _creditCardGateway.Charge(Arg.Any <string>()).Returns(_creditCardGatewayResponse); _creditCardGateway.ChargeRop(Arg.Any <string>()).Returns(Result.Ok(_creditCardGatewayResponse)); _creditCardGateway.RollBackLastTransactionRop(Arg.Any <Customer>()).Returns(Result.Ok(customer)); _mailConfirmer.SendWelcomeRop(Arg.Any <Customer>()).Returns(Result.Ok(customer)); }