Example #1
0
        // ~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));
        }