public void Build_ShouldMapTheCustomerDetails()
        {
            //Arrange
            var customer = fixture.CreateAnonymous<ExtendedCustomer>();

            var orderRepository = MockRepository.GenerateStub<IOrderRepository>();
            orderRepository.Stub(x => x.GetOrdersByCustomerEmail(Arg<string>.Is.Anything));

            var customerAccountService = MockRepository.GenerateStub<ICustomerAccountService>();
            customerAccountService.Stub(x => x.GetExtendedCustomerByEmail(Arg<string>.Is.Anything)).Return(customer);

            var builder = new MyAccountViewModelBuilder(customer.Email, customerAccountService, orderRepository, mapper);
            //Act
            var viewModel = builder.Build();
            //Assert
            viewModel.BillingAddress.Address1.Should().Be(customer.BillingAddress.Address1);
            viewModel.BillingAddress.City.Should().Be(customer.BillingAddress.City);
            viewModel.BillingAddress.Country.Should().Be(customer.BillingAddress.Country);
            viewModel.BillingAddress.FirstName.Should().Be(customer.BillingAddress.FirstName);
            viewModel.BillingAddress.State.Should().Be(customer.BillingAddress.State);
            viewModel.BillingAddress.LastName.Should().Be(customer.BillingAddress.LastName);
            viewModel.BillingAddress.ZipCode.Should().Be(customer.BillingAddress.ZipCode);
            viewModel.BillingAddress.Phone.Should().Be(customer.BillingAddress.Phone);

            viewModel.ShippingAddress.Address1.Should().Be(customer.ShippingAddress.Address1);
            viewModel.ShippingAddress.City.Should().Be(customer.ShippingAddress.City);
            viewModel.ShippingAddress.Country.Should().Be(customer.ShippingAddress.Country);
            viewModel.ShippingAddress.FirstName.Should().Be(customer.ShippingAddress.FirstName);
            viewModel.ShippingAddress.State.Should().Be(customer.ShippingAddress.State);
            viewModel.ShippingAddress.LastName.Should().Be(customer.ShippingAddress.LastName);
            viewModel.ShippingAddress.ZipCode.Should().Be(customer.ShippingAddress.ZipCode);
            viewModel.ShippingAddress.Phone.Should().Be(customer.ShippingAddress.Phone);

            viewModel.Email.Should().Be(customer.Email);
            viewModel.FirstName.Should().Be(customer.FirstName);
            viewModel.LastName.Should().Be(customer.LastName);
            viewModel.Country.Should().Be(customer.Country);
            viewModel.State.Should().Be(customer.State);
            viewModel.Phone.Should().Be(customer.Phone);
            viewModel.MemeberSince.Should().Be(customer.MemeberSince.ToShortDateString());
        }
        public void Build_ShouldMapTheOrderSummery()
        {
            //Arrange
            var userEmail = fixture.CreateAnonymous("email");

            var order = fixture.CreateAnonymous<Order>();

            var orderRepository = MockRepository.GenerateStub<IOrderRepository>();
            orderRepository.Stub(x => x.GetOrdersByCustomerEmail(Arg<string>.Is.Anything))
                .Return(new List<Order> {order});

            var customerAccountService = MockRepository.GenerateStub<ICustomerAccountService>();

            var builder = new MyAccountViewModelBuilder(userEmail, customerAccountService, orderRepository, mapper);
            //Act
            var viewModel = builder.Build();
            //Assert
            var orderSummery = viewModel.Orders[0];
            orderSummery.OrderNumber.Should().Be(order.OrderNumber.ToString());
            orderSummery.PurchaseDate.Should().Be(order.CreateDate.ToShortDateString());
            orderSummery.TotalPrice.Should().Be(Tests.AsMoney(order.TotalPrice));
            orderSummery.Status.Should().Be(CustomAttributes.GetDescription(order.Status));
        }
        public ActionResult Index()
        {
            var email = authentication.CustomerData.Email;
            var builder = new MyAccountViewModelBuilder(email, customerAccountService, orderReporistory, mapper);
            var viewModel = builder.Build();

            return View(viewModel);
        }
        public void Build_ShouldReadTheCustomerExtraDetails()
        {
            //Arrange
            var customer = fixture.CreateAnonymous<ExtendedCustomer>();

            var userEmail = fixture.CreateAnonymous("email");

            var orderRepository = MockRepository.GenerateStub<IOrderRepository>();
            orderRepository.Stub(x => x.GetOrdersByCustomerEmail(Arg<string>.Is.Anything));

            var customerAccountService = MockRepository.GenerateMock<ICustomerAccountService>();
            customerAccountService.Expect(x => x.GetExtendedCustomerByEmail(Arg<string>.Is.Equal(userEmail)))
                .Repeat.Once().Return(customer);

            var builder = new MyAccountViewModelBuilder(userEmail, customerAccountService, orderRepository, mapper);
            //Act
            builder.Build();
            //Assert
            customerAccountService.VerifyAllExpectations();
        }
        public void Build_ShouldReadTheOrdersOfTheLoggedInUser()
        {
            //Arrange
            var userEmail = fixture.CreateAnonymous("email");

            var orderRepository = MockRepository.GenerateMock<IOrderRepository>();
            orderRepository.Expect(x => x.GetOrdersByCustomerEmail(Arg<string>.Is.Equal(userEmail))).Repeat.Once();

            var customerAccountService = MockRepository.GenerateStub<ICustomerAccountService>();

            var builder = new MyAccountViewModelBuilder(userEmail,customerAccountService,orderRepository,mapper);
            //Act
            builder.Build();
            //Assert
            orderRepository.VerifyAllExpectations();
        }