public void ShouldRegisterUser()
        {
            // Arrange
            var registrationInfo = new RegistrationInfo()
            {
                Addresses = new List <AddressInfo>()
                {
                    new AddressInfo()
                    {
                        AddressLine1 = "123", City = "Redmond", CountryName = "USA", PostalCode = "12345", StateProvinceId = 33
                    }
                },
                CreditCards = new List <CreditCardInfo>()
                {
                    new CreditCardInfo()
                    {
                        CardNumber = "1111222233334444", CardType = "VISA", ExpMonth = 1, ExpYear = 2015
                    }
                },
                EmailAddresses = new List <string>()
                {
                    "*****@*****.**"
                },
                FirstName = "Test",
                LastName  = "User",
                Password  = "******"
            };

            var person = new Person()
            {
                PersonGuid = Guid.NewGuid()
            };

            var personRepository = new StubIPersonRepository()
            {
                SavePersonPerson = newPerson => person
            };
            var shoppingCartRepository = new StubIShoppingCartRepository()
            {
                GetShoppingCartString = shoppingCartId => new ShoppingCart(person.PersonGuid.ToString())
            };
            var orderRepository = new StubISalesOrderRepository()
            {
                IsOrderSavedGuid = shoppingCartId => false
            };
            var controller = new AccountController(personRepository, shoppingCartRepository, orderRepository, new StubIStateProvinceRepository());

            SetupControllerForTests(controller);

            // Act
            var result = controller.Register(registrationInfo);

            // Assert
            Assert.AreEqual(result.StatusCode, HttpStatusCode.Created);
        }
        public void ShouldLogonUser()
        {
            // Arrange
            var person = new Person()
            {
                Id           = 1,
                PasswordHash = "/y5qFg+Su7P2S+iiVMKgSHzlSemQan2hYvZywrqSkTE=",
                PasswordSalt = "bE3XiWw=",
                PersonGuid   = Guid.NewGuid()
            };

            var logonInfo = new LoginInfo()
            {
                UserName = "******",
                Password = "******"
            };

            var personRepository = new StubIPersonRepository()
            {
                GetPersonByEmailString = emailAddress => person
            };
            var shoppingCartRepository = new StubIShoppingCartRepository()
            {
                GetShoppingCartString = shoppingCartId => new ShoppingCart(person.PersonGuid.ToString())
            };
            var orderRepository = new StubISalesOrderRepository()
            {
                IsOrderSavedGuid = shoppingCartId => false
            };
            var controller = new AccountController(personRepository, shoppingCartRepository, orderRepository, new StubIStateProvinceRepository());

            SetupControllerForTests(controller);

            // Act
            var result         = controller.Login(logonInfo);
            var returnedPerson = new JavaScriptSerializer().Deserialize <string>(result.Content.ReadAsStringAsync().Result);

            // Assert
            Assert.AreEqual(result.StatusCode, HttpStatusCode.OK);
            Assert.AreEqual(returnedPerson, person.PersonGuid.ToString());
        }