예제 #1
0
        public void IndexWillReturnCorrectContentsWhenProfileRequestsConversion()
        {
            // Fixture setup
            var fixture = new ControllerFixture();
            var basket  = fixture.CreateAnonymous <Basket>();

            fixture.AddManyTo(basket.Contents);

            var currencyCode          = fixture.CreateAnonymous("CurrencyCode");
            var anonymousExchangeRate = 3.2m;

            var currencyStub = new Mock <Currency>();

            currencyStub.SetupGet(c => c.Code).Returns(currencyCode);
            currencyStub.Setup(c => c.GetExchangeRateFor(It.IsAny <string>())).Returns(anonymousExchangeRate);

            fixture.Register(() =>
            {
                var basketServiceStub = new Mock <IBasketService>();
                basketServiceStub.Setup(bs => bs.GetBasketFor(It.IsAny <IPrincipal>())).Returns(basket);
                return(basketServiceStub.Object);
            });
            fixture.Customize <UserProfile>(ob => ob.FromFactory(() =>
            {
                var profileStub = new Mock <UserProfile>();
                profileStub.SetupGet(p => p.Currency).Returns(currencyCode);
                return(profileStub.Object);
            }).OmitAutoProperties());
            fixture.Register(() =>
            {
                var currencyProviderStub = new Mock <CurrencyProvider>();
                currencyProviderStub.Setup(cp => cp.GetCurrency(currencyCode)).Returns(currencyStub.Object);
                return(currencyProviderStub.Object);
            });

            var expectedContents = new BasketViewModel(basket.ConvertTo(currencyStub.Object)).Contents.ToList();

            var sut = fixture.CreateAnonymous <BasketController>();
            // Exercise system
            var result = ((BasketViewModel)sut.Index().ViewData.Model).Contents.ToList();

            // Verify outcome
            Assert.True(expectedContents.SequenceEqual(result));
            // Teardown
        }