Ejemplo n.º 1
0
        public async void Recommended_NoFavorites_ReturnsMatchingModel()
        {
            Member member = new Member
            {
                UserId = new Guid("09EABF21-D5AC-4A5D-ADF8-27180E6D889B"),
                FavoriteTags = new List<Tag>(),
                FavoritePlatforms = new List<Platform>()
            };

            Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake();

            Mock<DbSet<Member>> memberDbSetStub = TestHelpers.GetFakeAsyncDbSet(new List<Member> { member }.AsQueryable());
            memberDbSetStub.Setup(db => db.FindAsync(member.UserId)).ReturnsAsync(member);
            dbStub.Setup(db => db.Members).Returns(memberDbSetStub.Object);

            Mock<ControllerContext> context = new Mock<ControllerContext>();
            context.Setup(c => c.HttpContext.User.Identity).Returns<IIdentity>(null);

            Mock<IGuidUserIdGetter> idGetterStub = new Mock<IGuidUserIdGetter>();
            idGetterStub.Setup(id => id.GetUserId(It.IsAny<IIdentity>())).Returns(member.UserId);

            GamesController controller = new GamesController(dbStub.Object, idGetterStub.Object)
            {
                ControllerContext = context.Object
            };

            var result = await controller.Recommended() as RedirectToRouteResult;

            Assert.That(result.RouteValues["action"], Is.EqualTo("Index"));
        }
Ejemplo n.º 2
0
        public void MemberDetail_UserNotFound_Throws404Exception()
        {
            var member = new Member
            {
                UserAccount = new User
                {
                    UserName = "******",
                    FirstName = "Test",
                    LastName = "User"
                },
                FavoriteTags = new List<Tag>(),
                FavoritePlatforms = new List<Platform>(),
                Wishlist = new List<Product>(),
                ReceivedFriendships = new List<Friendship>(),
                RequestedFriendships = new List<Friendship>(),
                WebOrders = new List<WebOrder>()
            };

            Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake();
            Mock<DbSet<Member>> memberDbSetStub = TestHelpers.GetFakeAsyncDbSet(new List<Member> { member }.AsQueryable());
            dbStub.Setup(db => db.Members).Returns(memberDbSetStub.Object);

            ReportsController controller = new ReportsController(dbStub.Object);

            Assert.That(async () => await controller.MemberDetail("NotTestUser"), Throws.InstanceOf<HttpException>().And.Matches<HttpException>(ex => ex.GetHttpCode() == 404));
        }
        public void SetupBase()
        {
            memberId = new Guid("59EF92BE-D71F-49ED-992D-DF15773DAF98");
            memberId2 = new Guid("163EDEE7-FA6A-4220-928E-841CCC8CAAE0");

            member = new Member
            {
                UserId = memberId,
            };

            memberUser = new User
            {
                UserName = "******",
                FirstName = "John",
                LastName = "Doe",
                Id = memberId,
                PhoneNumber = "800-555-0199",
                Member = member
            };

            member2 = new Member
            {
                UserId = memberId2
            };

            memberUser2 = new User
            {
                UserName = "******",
                FirstName = "member",
                LastName = "user2",
                Id = memberId2,
                Member = member2
            };

        }
        public void Index_AnonymousUser_PrivateWishlist_Throws404Exception()
        {
            Member member = new Member
            {
                UserAccount = new User
                {
                    UserName = "******"
                },
                WishListVisibility = WishListVisibility.Private
            };

            Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake();

            Mock<DbSet<Member>> memberDbSetStub = TestHelpers.GetFakeAsyncDbSet(new List<Member> { member }.AsQueryable());
            memberDbSetStub.Setup(db => db.Find(member.UserId)).Returns(member);
            dbStub.Setup(db => db.Members).Returns(memberDbSetStub.Object);

            Mock<ControllerContext> context = new Mock<ControllerContext>();
            context.Setup(c => c.HttpContext.User.Identity.IsAuthenticated).Returns(false);

            WishlistController controller = new WishlistController(dbStub.Object, idGetter: null)
            {
                ControllerContext = context.Object
            };

            Assert.That(async () => await controller.Index(member.UserAccount.UserName), Throws.InstanceOf<HttpException>().And.Matches<HttpException>(ex => ex.GetHttpCode() == 404));
        }
        public void Setup()
        {
            Id1 = new Guid("45B0752E-998B-466A-AAAD-3ED535BA3559");
            Id2 = new Guid("59421EF4-4585-4593-BBA0-52CA80A9E774");
            Id3 = new Guid("D714C3D5-E3BB-4D28-A5CD-029706773DD7");
            UserId = new Guid("09EABF21-D5AC-4A5D-ADF8-27180E6D889B");

            member = new Member
            {
                UserId = UserId,
                RequestedFriendships = new List<Friendship>(),
                ReceivedFriendships = new List<Friendship>(),
                UserAccount = new User()
                {
                    UserName = "******"
                }
            };

            otherMember1 = new Member()
            {
                UserId = Id1,
                ReceivedFriendships = new List<Friendship>(),
                RequestedFriendships = new List<Friendship>(),
                UserAccount = new User()
                {
                    UserName = "******"
                }
            };

            otherMember2 = new Member()
            {
                UserId = Id2,
                ReceivedFriendships = new List<Friendship>(),
                RequestedFriendships = new List<Friendship>(),
                UserAccount = new User()
                {
                    UserName = "******"
                }
            };

            otherMember3 = new Member()
            {
                UserId = Id3,
                ReceivedFriendships = new List<Friendship>(),
                RequestedFriendships = new List<Friendship>(),
                UserAccount = new User()
                {
                    UserName = "******"
                }
            };
        }
Ejemplo n.º 6
0
        public async void ManagePlatforms_ReturnsMatchingModel()
        {
            Member member = new Member
            {
                UserId = memberId,
                FavoritePlatforms = new List<Platform>
                {
                    new Platform
                    {
                        PlatformCode = "TPlat",
                        PlatformName = "Test Platform"
                    }
                }
            };

            Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake();

            Mock<DbSet<Member>> memberDbSetStub =
                TestHelpers.GetFakeAsyncDbSet(new List<Member> { member }.AsQueryable());
            memberDbSetStub.Setup(db => db.FindAsync(member.UserId)).ReturnsAsync(member);
            dbStub.Setup(db => db.Members).Returns(memberDbSetStub.Object);

            Mock<ControllerContext> context = new Mock<ControllerContext>();
            context.Setup(c => c.HttpContext.User.Identity).Returns<IIdentity>(null);
            context.Setup(c => c.HttpContext.User.Identity.IsAuthenticated).Returns(true);

            Mock<IGuidUserIdGetter> idGetterStub = new Mock<IGuidUserIdGetter>();
            idGetterStub.Setup(id => id.GetUserId(It.IsAny<IIdentity>())).Returns(member.UserId);

            ManageController controller = new ManageController(
                userManager: null, signInManager: null,
                veilDataAccess: dbStub.Object, idGetter: idGetterStub.Object, stripeService: null)
            {
                ControllerContext = context.Object
            };

            var result = await controller.ManagePlatforms() as ViewResult;

            Assert.That(result != null);

            var model = (List<Platform>) result.Model;

            Assert.That(model.Count, Is.EqualTo(1));
            Assert.That(model[0].PlatformCode, Is.EqualTo("TPlat"));
        }
        public async void CreateCreditCard_ValidModel_RetrievesMemberMatchingCurrentUserId()
        {
            Member member = new Member
            {
                UserId = memberId,
                CreditCards = new List<MemberCreditCard>()
            };

            string stripeCardToken = "stripeCardToken";

            Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake();
            Mock<DbSet<Member>> memberDbSetMock = TestHelpers.GetFakeAsyncDbSet(new List<Member> { member }.AsQueryable());
            memberDbSetMock.
                Setup(mdb => mdb.FindAsync(memberId)).
                ReturnsAsync(member).
                Verifiable();

            dbStub.
                Setup(db => db.Members).
                Returns(memberDbSetMock.Object);

            Mock<IStripeService> stripeServiceStub = new Mock<IStripeService>();
            stripeServiceStub.
                Setup(s => s.CreateCreditCard(It.IsAny<Member>(), It.IsAny<string>())).
                Returns<MemberCreditCard>(null);

            Mock<IGuidUserIdGetter> idGetterStub = TestHelpers.GetSetupIUserIdGetterFake(memberId);
            Mock<ControllerContext> contextStub = TestHelpers.GetSetupControllerContextFakeWithUserIdentitySetup();

            ManageController controller = CreateManageController(veilDataAccess: dbStub.Object, idGetter: idGetterStub.Object, stripeService: stripeServiceStub.Object);
            controller.ControllerContext = contextStub.Object;

            await controller.CreateCreditCard(stripeCardToken);

            Assert.That(
                () =>
                    memberDbSetMock.Verify(mdb => mdb.FindAsync(memberId),
                    Times.Exactly(1)),
                Throws.Nothing);
        }
        public async void Index_AnonymousUser_PublicWishlist_ReturnsMatchingModel()
        {
            Member member = new Member
            {
                UserAccount = new User
                {
                    UserName = "******"
                },
                UserId = UserId,
                WishListVisibility = WishListVisibility.Public,
                Wishlist = new List<Product>()
            };

            Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake();

            Mock<DbSet<Member>> memberDbSetStub = TestHelpers.GetFakeAsyncDbSet(new List<Member> { member }.AsQueryable());
            memberDbSetStub.Setup(db => db.FindAsync(member.UserId)).ReturnsAsync(member);
            dbStub.Setup(db => db.Members).Returns(memberDbSetStub.Object);

            Mock<ControllerContext> context = new Mock<ControllerContext>();
            context.Setup(c => c.HttpContext.User.Identity.IsAuthenticated).Returns(false);

            WishlistController controller = new WishlistController(dbStub.Object, idGetter: null)
            {
                ControllerContext = context.Object
            };

            var result = await controller.Index(member.UserAccount.UserName) as ViewResult;

            Assert.That(result != null);
            Assert.That(result.Model, Is.InstanceOf<Member>());

            var model = (Member)result.Model;

            Assert.That(model.Wishlist, Is.EqualTo(member.Wishlist));
        }
        public async void Index_MemberViewsFriendList_NoFreindRequestsNoFriends_ReturnsCorrectViewModel()
        {
            Member member = new Member
            {
                UserId = UserId,
                RequestedFriendships = new List<Friendship>(),
                ReceivedFriendships = new List<Friendship>()  
            };

            Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake();
            Mock<DbSet<Member>> memberDbSetStub = TestHelpers.GetFakeAsyncDbSet(new List<Member> { member }.AsQueryable());
            memberDbSetStub.Setup(db => db.FindAsync(member.UserId)).ReturnsAsync(member);
            dbStub.Setup(db => db.Members).Returns(memberDbSetStub.Object);
            memberDbSetStub.SetupForInclude();

            Mock<ControllerContext> context = new Mock<ControllerContext>();
            context.Setup(c => c.HttpContext.User.Identity).Returns<IIdentity>(null);
            context.Setup(c => c.HttpContext.User.Identity.IsAuthenticated).Returns(true);

            Mock<IGuidUserIdGetter> idGetterStub = new Mock<IGuidUserIdGetter>();
            idGetterStub.Setup(id => id.GetUserId(It.IsAny<IIdentity>())).Returns(member.UserId);

            FriendListController controller = new FriendListController(dbStub.Object, idGetterStub.Object)
            {
                ControllerContext = context.Object
            };

            var result = await controller.Index() as ViewResult;

            Assert.That(result.Model != null);

            var model = (FriendsListViewModel)result.Model;

            Assert.That(model.PendingReceivedFriendships.Count == 0);
            Assert.That(model.PendingSentFriendships.Count == 0);
            Assert.That(model.ConfirmedFriends.Count == 0);
        }
Ejemplo n.º 10
0
        public async void MyEvents_ReturnsMatchingModel()
        {
            DateTime futureDate = DateTime.Now.AddDays(1);

            Member member = new Member
            {
                UserId = UserId,
                RegisteredEvents = new List<Event>
                {  
                    new Event
                    {
                        Date = futureDate
                    },
                    new Event
                    {
                        Date = futureDate
                    }
                }
            };

            Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake();

            Mock<DbSet<Member>> memberDbSetStub = TestHelpers.GetFakeAsyncDbSet(new List<Member> { member }.AsQueryable());
            memberDbSetStub.Setup(db => db.FindAsync(member.UserId)).ReturnsAsync(member);
            dbStub.Setup(db => db.Members).Returns(memberDbSetStub.Object);

            Mock<ControllerContext> context = new Mock<ControllerContext>();
            context.Setup(c => c.HttpContext.User.Identity).Returns<IIdentity>(null);

            Mock<IGuidUserIdGetter> idGetterStub = new Mock<IGuidUserIdGetter>();
            idGetterStub.Setup(id => id.GetUserId(It.IsAny<IIdentity>())).Returns(member.UserId);

            EventsController controller = new EventsController(dbStub.Object, idGetterStub.Object)
            {
                ControllerContext = context.Object
            };

            var result = await controller.MyEvents() as ViewResult;

            Assert.That(result != null);
            Assert.That(result.Model, Is.InstanceOf<EventListViewModel>());

            var model = (EventListViewModel)result.Model;

            Assert.That(model.Events.Count(), Is.EqualTo(2));
        }
Ejemplo n.º 11
0
        public async void RemoveItem_CatchesOnSave()
        {
            Game game = new Game()
            {
                Id = GameId,
                Name = "game"
            };

            GameProduct gameProduct = new PhysicalGameProduct()
            {
                Id = Id,
                BoxArtImageURL = "boxart",
                NewWebPrice = 79.99m,
                UsedWebPrice = 44.99m,
                Platform = new Platform
                {
                    PlatformName = "PS4",
                },
                Game = game
            };

            CartItem cartItem = new CartItem()
            {
                ProductId = gameProduct.Id
            };

            Cart cart = new Cart
            {
                MemberId = UserId,
                Items = new List<CartItem>()
                {
                    cartItem
                }
            };

            Member member = new Member()
            {
                UserId = UserId,
                Cart = cart
            };

            Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake();
            Mock<DbSet<Cart>> cartDbSetStub = TestHelpers.GetFakeAsyncDbSet(new List<Cart> { cart }.AsQueryable());
            Mock<DbSet<Member>> memberDbSetStub = TestHelpers.GetFakeAsyncDbSet(new List<Member> { member }.AsQueryable());
            Mock<DbSet<GameProduct>> gameProductDbSetStub =
                TestHelpers.GetFakeAsyncDbSet(new List<GameProduct> { gameProduct }.AsQueryable());

            cartDbSetStub.Setup(db => db.FindAsync(cart.MemberId)).ReturnsAsync(cart);
            gameProductDbSetStub.Setup(db => db.FindAsync(gameProduct.Id)).ReturnsAsync(gameProduct);
            memberDbSetStub.Setup(db => db.Find(member.UserId)).Returns(member);
            gameProductDbSetStub.SetupForInclude();

            dbStub.Setup(db => db.Carts).Returns(cartDbSetStub.Object);
            dbStub.Setup(db => db.GameProducts).Returns(gameProductDbSetStub.Object);
            dbStub.Setup(db => db.Members).Returns(memberDbSetStub.Object);
            dbStub.Setup(db => db.SaveChangesAsync()).Throws<DbUpdateException>();

            Mock<ControllerContext> contextStub = new Mock<ControllerContext>();
            contextStub.Setup(c => c.HttpContext.User.Identity).Returns<IIdentity>(null);
            contextStub.Setup(c => c.HttpContext.User.Identity.IsAuthenticated).Returns(true);

            Mock<HttpSessionStateBase> sessionStub = new Mock<HttpSessionStateBase>();
            contextStub.Setup(s => s.HttpContext.Session).Returns(sessionStub.Object);

            Mock<IGuidUserIdGetter> idGetterStub = new Mock<IGuidUserIdGetter>();
            idGetterStub.Setup(id => id.GetUserId(It.IsAny<IIdentity>())).Returns(UserId);

            CartController controller = new CartController(dbStub.Object, idGetterStub.Object, shippingCostService: null)
            {
                ControllerContext = contextStub.Object
            };

            var result = await controller.RemoveItem(gameProduct.Id, cartItem.IsNew) as RedirectToRouteResult;

            Assert.That(result != null);
            Assert.That(result.RouteValues["action"], Is.EqualTo("Index"));
        }
        public async void Index_CurrentMemberWishlist_ReturnsMatchingModel()
        {
            Member member = new Member
            {
                UserId = UserId,
                UserAccount = new User
                {
                    UserName = "******"
                }
            };

            Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake();

            Mock<DbSet<Member>> memberDbSetStub = TestHelpers.GetFakeAsyncDbSet(new List<Member> { member }.AsQueryable());
            memberDbSetStub.Setup(db => db.FindAsync(member.UserId)).ReturnsAsync(member);
            dbStub.Setup(db => db.Members).Returns(memberDbSetStub.Object);

            Mock<ControllerContext> context = new Mock<ControllerContext>();
            context.Setup(c => c.HttpContext.User.Identity).Returns<IIdentity>(null);
            context.Setup(c => c.HttpContext.User.Identity.IsAuthenticated).Returns(true);

            Mock<IGuidUserIdGetter> idGetterStub = new Mock<IGuidUserIdGetter>();
            idGetterStub.Setup(id => id.GetUserId(It.IsAny<IIdentity>())).Returns(member.UserId);

            WishlistController controller = new WishlistController(dbStub.Object, idGetterStub.Object)
            {
                ControllerContext = context.Object
            };

            var result = await controller.Index(null) as ViewResult;

            Assert.That(result != null);
            Assert.That(result.Model, Is.InstanceOf<Member>());

            var model = (Member)result.Model;

            Assert.That(model.UserId, Is.EqualTo(UserId));
        }
        public void SetupBase()
        {
            memberId = new Guid("59EF92BE-D71F-49ED-992D-DF15773DAF98");
            addressId = new Guid("53BE47E4-0C74-4D49-97BB-7246A7880B39");
            creditCardId = new Guid("D9A69026-E3DA-4748-816B-293D9BE3E43F");
            cartProduct1Id = new Guid("3882D242-A62A-4E99-BA11-D6EF340C2EE8");
            cartProduct2Id = new Guid("7413D131-7337-42DC-A7E4-1155EB91E8C9");

            memberAddress = new MemberAddress
            {
                Address = new Address
                {
                    City = "Waterloo",
                    PostalCode = "N2L 6R2",
                    StreetAddress = "445 Wes Graham Way"
                },
                CountryCode = "CA",
                Country = new Country { CountryCode = "CA", CountryName = "Canada", FederalTaxRate = 0.05m },
                ProvinceCode = "ON",
                Province = new Province { CountryCode = "CA", ProvinceCode = "ON", ProvincialTaxRate = 0.08m },
                MemberId = memberId,
                Id = addressId
            };

            game = new Game
            {
                Name = "A game"
            };

            platform = new Platform
            {
                PlatformCode = "XONE",
                PlatformName = "Xbox One"
            };

            cartProduct1 = new PhysicalGameProduct
            {
                Id = cartProduct1Id,
                NewWebPrice = 60.00m,
                ProductAvailabilityStatus = AvailabilityStatus.Available,
                ReleaseDate = new DateTime(635835582902643008L, DateTimeKind.Local),
                UsedWebPrice = 10.00m,
                Game = game,
                Platform = platform
            };

            cartProduct2 = new PhysicalGameProduct
            {
                Id = cartProduct2Id,
                NewWebPrice = 59.99m,
                ProductAvailabilityStatus = AvailabilityStatus.Available,
                ReleaseDate = new DateTime(635837213100050176L, DateTimeKind.Local),
                Game = game,
                Platform = platform
            };

            newProduct1CartItem = new CartItem
            {
                IsNew = true,
                MemberId = memberId,
                Product = cartProduct1,
                ProductId = cartProduct1.Id,
                Quantity = 1
            };

            usedProduct1CartItem = new CartItem
            {
                IsNew = false,
                MemberId = memberId,
                Product = cartProduct1,
                ProductId = cartProduct1.Id,
                Quantity = 1
            };

            newProduct2CartItem = new CartItem
            {
                IsNew = true,
                MemberId = memberId,
                Product = cartProduct2,
                ProductId = cartProduct2.Id,
                Quantity = 1
            };

            validNotSavedShippingDetails = new WebOrderCheckoutDetails
            {
                Address = new Address
                {
                    City = "Waterloo",
                    PostalCode = "N2L 6R2",
                    POBoxNumber = "123",
                    StreetAddress = "445 Wes Graham Way"
                },
                ProvinceCode = "ON",
                CountryCode = "CA"
            };

            validAddressViewModel = new AddressViewModel
            {
                City = "Waterloo",
                CountryCode = "CA",
                ProvinceCode = "ON",
                POBoxNumber = "1234",
                PostalCode = "N2L 6R2",
                StreetAddress = "445 Wes Graham Way"
            };

            memberCreditCard = new MemberCreditCard
            {
                Id = creditCardId,
                CardholderName = "John Doe",
                ExpiryMonth = 11,
                ExpiryYear = 2015,
                Last4Digits = "4242",
                Member = member,
                MemberId = memberId,
                StripeCardId = "cardToken"
            };

            member = new Member
            {
                UserId = memberId,
                CreditCards = new List<MemberCreditCard>
                {
                    memberCreditCard
                }
            };

            memberUser = new User
            {
                FirstName = "John",
                LastName = "Doe",
                Id = memberId,
                PhoneNumber = "800-555-0199",
            };
            
            validNotSavedShippingBillingDetails = new WebOrderCheckoutDetails
            {
                Address = new Address
                {
                    City = "Waterloo",
                    PostalCode = "N2L 6R2",
                    POBoxNumber = "123",
                    StreetAddress = "445 Wes Graham Way"
                },
                ProvinceCode = "ON",
                CountryCode = "CA",
                StripeCardToken = "card_token"
            };

            validSavedShippingBillingDetails = new WebOrderCheckoutDetails
            {
                MemberCreditCardId = creditCardId,
                MemberAddressId = addressId
            };

            cartWithNewAndUsed = new Cart
            {
                Items = new List<CartItem>
                {
                    newProduct1CartItem,
                    usedProduct1CartItem
                },
                Member = member,
                MemberId = memberId
            };
        }
Ejemplo n.º 14
0
        public async void CreateCreditCard_IStripeServiceThrowsStripeExceptionCardError_AddsErrorToModelState()
        {
            Member member = new Member
            {
                UserId = memberId
            };

            string stripeCardToken = "stripeCardToken";

            Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake();
            Mock<DbSet<Member>> memberDbSetStub = TestHelpers.GetFakeAsyncDbSet(new List<Member> { member }.AsQueryable());
            memberDbSetStub.
                Setup(mdb => mdb.FindAsync(memberId)).
                ReturnsAsync(member);

            dbStub.
                Setup(db => db.Members).
                Returns(memberDbSetStub.Object);

            string stripeErrorMessage = "A card Error Message";

            StripeServiceException exception = new StripeServiceException(stripeErrorMessage, StripeExceptionType.CardError);

            Mock<IStripeService> stripeServiceStub = new Mock<IStripeService>();
            stripeServiceStub.
                Setup(s => s.CreateCreditCard(It.IsAny<Member>(), It.IsAny<string>())).
                Throws(exception);

            Mock<IGuidUserIdGetter> idGetterStub = TestHelpers.GetSetupIUserIdGetterFake(memberId);
            Mock<ControllerContext> contextStub = TestHelpers.GetSetupControllerContextFakeWithUserIdentitySetup();

            ManageController controller = CreateManageController(veilDataAccess: dbStub.Object, idGetter: idGetterStub.Object, stripeService: stripeServiceStub.Object);
            controller.ControllerContext = contextStub.Object;

            await controller.CreateCreditCard(stripeCardToken);

            Assert.That(controller.ModelState[ManageController.STRIPE_ISSUES_MODELSTATE_KEY].Errors, Has.Some.Matches<ModelError>(modelError => modelError.ErrorMessage == stripeErrorMessage));
        }
Ejemplo n.º 15
0
        /// <summary>
        ///     Implements <see cref="IStripeService.CreateCreditCard"/>
        /// </summary>
        public MemberCreditCard CreateCreditCard(Member member, string stripeCardToken)
        {
            var newCard = new StripeCardCreateOptions
            {
                Source = new StripeSourceOptions
                {
                    TokenId = stripeCardToken
                    // Note: Adding Object = "card" will result in a generic stripe error
                }
            };

            var cardService = new StripeCardService();

            StripeCard card;

            try
            {
                card = cardService.Create(member.StripeCustomerId, newCard);
            }
            catch (StripeException ex)
            {
                throw HandleStripeException(ex);
            }

            int expiryMonth = int.Parse(card.ExpirationMonth);
            int expiryYear = int.Parse(card.ExpirationYear);

            MemberCreditCard newMemberCard = new MemberCreditCard
            {
                CardholderName = card.Name,
                ExpiryMonth = expiryMonth,
                ExpiryYear = expiryYear,
                Last4Digits = card.Last4,
                StripeCardId = card.Id,
                Member = member,
                MemberId = member.UserId
            };

            return newMemberCard;
        }
        public async void Index_WishlistOwnerFound_FriendsOnly_NotFriends_Throws404Exception()
        {
            Member wishlistOwner = new Member
            {
                UserAccount = new User
                {
                    UserName = "******"
                },
                UserId = Id,
                WishListVisibility = WishListVisibility.FriendsOnly,
                RequestedFriendships = new List<Friendship>(),
                ReceivedFriendships = new List<Friendship>(),
            };

            Member currentMember = new Member
            {
                UserId = UserId
            };

            List<Member> members = new List<Member>
            {
                wishlistOwner,
                currentMember
            };

            Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake();

            Mock<DbSet<Member>> memberDbSetStub = TestHelpers.GetFakeAsyncDbSet(members.AsQueryable());
            memberDbSetStub.Setup(db => db.FindAsync(currentMember.UserId)).ReturnsAsync(currentMember);
            memberDbSetStub.Setup(db => db.FindAsync(wishlistOwner.UserId)).ReturnsAsync(wishlistOwner);
            memberDbSetStub.SetupForInclude();
            dbStub.Setup(db => db.Members).Returns(memberDbSetStub.Object);

            Mock<ControllerContext> context = new Mock<ControllerContext>();
            context.Setup(c => c.HttpContext.User.Identity).Returns<IIdentity>(null);
            context.Setup(c => c.HttpContext.User.Identity.IsAuthenticated).Returns(true);

            Mock<IGuidUserIdGetter> idGetterStub = new Mock<IGuidUserIdGetter>();
            idGetterStub.Setup(id => id.GetUserId(It.IsAny<IIdentity>())).Returns(currentMember.UserId);

            WishlistController controller = new WishlistController(dbStub.Object, idGetterStub.Object)
            {
                ControllerContext = context.Object
            };

            var result = await controller.Index(wishlistOwner.UserAccount.UserName) as RedirectToRouteResult;

            Assert.That(result != null);
            Assert.That(result.RouteValues["controller"], Is.EqualTo("FriendList"));
            Assert.That(result.RouteValues["action"], Is.EqualTo("Index"));
        }
        public void Index_WishlistOwnerFound_Private_Throws404Exception()
        {
            Member wishlistOwner = new Member
            {
                UserAccount = new User
                {
                    UserName = "******"
                },
                UserId = Id,
                WishListVisibility = WishListVisibility.Private
            };

            Member currentMember = new Member
            {
                UserId = UserId
            };

            List<Member> members = new List<Member>
            {
                wishlistOwner,
                currentMember
            };

            Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake();

            Mock<DbSet<Member>> memberDbSetStub = TestHelpers.GetFakeAsyncDbSet(members.AsQueryable());
            memberDbSetStub.Setup(db => db.FindAsync(currentMember.UserId)).ReturnsAsync(currentMember);
            memberDbSetStub.Setup(db => db.FindAsync(wishlistOwner.UserId)).ReturnsAsync(wishlistOwner);
            memberDbSetStub.SetupForInclude();
            dbStub.Setup(db => db.Members).Returns(memberDbSetStub.Object);

            Mock<ControllerContext> context = new Mock<ControllerContext>();
            context.Setup(c => c.HttpContext.User.Identity).Returns<IIdentity>(null);
            context.Setup(c => c.HttpContext.User.Identity.IsAuthenticated).Returns(true);

            Mock<IGuidUserIdGetter> idGetterStub = new Mock<IGuidUserIdGetter>();
            idGetterStub.Setup(id => id.GetUserId(It.IsAny<IIdentity>())).Returns(currentMember.UserId);

            WishlistController controller = new WishlistController(dbStub.Object, idGetterStub.Object)
            {
                ControllerContext = context.Object
            };

            Assert.That(async () => await controller.Index(wishlistOwner.UserAccount.UserName), Throws.InstanceOf<HttpException>().And.Matches<HttpException>(ex => ex.GetHttpCode() == 404));
        }
Ejemplo n.º 18
0
        public async void MemberDetail_UserFound_ReturnsMatchingModel()
        {
            var member = new Member
            {
                UserAccount = new User
                {
                    UserName = "******",
                    FirstName = "Test",
                    LastName = "User"
                },
                FavoriteTags = new List<Tag>(),
                FavoritePlatforms = new List<Platform>(),
                Wishlist = new List<Product>(),
                ReceivedFriendships = new List<Friendship>(),
                RequestedFriendships = new List<Friendship>(),
                WebOrders = new List<WebOrder>
                {
                    new WebOrder
                    {
                        OrderItems = new List<OrderItem>
                        {
                            new OrderItem
                            {
                                Quantity = 1,
                                ListPrice = 10m
                            }
                        },
                        OrderSubtotal = 10m,
                        ShippingCost = 0m,
                        TaxAmount = 0m,
                        OrderStatus = OrderStatus.UserCancelled
                    },
                    new WebOrder
                    {
                        OrderItems = new List<OrderItem>
                        {
                            new OrderItem
                            {
                                Quantity = 2,
                                ListPrice = 10m
                            }
                        },
                        OrderSubtotal = 20m,
                        ShippingCost = 0m,
                        TaxAmount = 0m,
                        OrderStatus = OrderStatus.Processed
                    }
                }
            };

            Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake();
            Mock<DbSet<Member>> memberDbSetStub = TestHelpers.GetFakeAsyncDbSet(new List<Member> { member }.AsQueryable());
            dbStub.Setup(db => db.Members).Returns(memberDbSetStub.Object);

            ReportsController controller = new ReportsController(dbStub.Object);

            var result = await controller.MemberDetail(member.UserAccount.UserName) as ViewResult;

            Assert.That(result != null);

            var model = (MemberDetailViewModel)result.Model;

            Assert.That(model.FullName, Is.EqualTo("Test User"));
            Assert.That(model.OrderCount, Is.EqualTo(1));
            Assert.That(model.TotalQuantity, Is.EqualTo(2));
            Assert.That(model.Total, Is.EqualTo(20m));
        }
Ejemplo n.º 19
0
        public async void Recommended_ReturnsMatchingModel()
        {
            List<Game> games = new List<Game>
            {
                new Game
                {
                    Name = "FirstGame",
                    GameSKUs = new List<GameProduct>
                    {
                        new PhysicalGameProduct
                        {
                            PlatformCode = "PS4"
                        }
                    },
                    GameAvailabilityStatus = AvailabilityStatus.Available
                },
                new Game
                {
                    Name = "SecondGame",
                    GameSKUs = new List<GameProduct>
                    {
                        new PhysicalGameProduct
                        {
                            PlatformCode = "PC"
                        }
                    },
                    GameAvailabilityStatus = AvailabilityStatus.Available
                },
                new Game
                {
                    Name = "ThirdGame",
                    GameSKUs = new List<GameProduct>
                    {
                        new PhysicalGameProduct
                        {
                            PlatformCode = "XONE",
                            ReleaseDate = DateTime.Today.AddDays(-1)
                        }
                    },
                    GameAvailabilityStatus = AvailabilityStatus.Available
                },
                new Game
                {
                    Name = "FourthGame",
                    GameSKUs = new List<GameProduct>
                    {
                        new PhysicalGameProduct
                        {
                            PlatformCode = "XONE",
                            ReleaseDate = DateTime.Today.AddDays(-2)
                        }
                    },
                    GameAvailabilityStatus = AvailabilityStatus.Available
                },
                new Game
                {
                    Name = "FifthGame",
                    GameSKUs = new List<GameProduct>
                    {
                        new PhysicalGameProduct
                        {
                            PlatformCode = "PS4"
                        }
                    },
                    GameAvailabilityStatus = AvailabilityStatus.Available
                },
                new Game
                {
                    Name = "PurchasedGame",
                    GameSKUs = new List<GameProduct>
                    {
                        new PhysicalGameProduct
                        {
                            PlatformCode = "PS4"
                        }
                    },
                    GameAvailabilityStatus = AvailabilityStatus.Available
                },
                new Game
                {
                    Name = "NotForSaleGame",
                    GameSKUs = new List<GameProduct>
                    {
                        new PhysicalGameProduct
                        {
                            PlatformCode = "PS4"
                        }
                    },
                    GameAvailabilityStatus = AvailabilityStatus.NotForSale
                }
            };

            games[0].GameSKUs.First().Game = games[0];
            games[1].GameSKUs.First().Game = games[1];
            games[2].GameSKUs.First().Game = games[2];
            games[3].GameSKUs.First().Game = games[3];
            games[4].GameSKUs.First().Game = games[4];

            List<Tag> tags = new List<Tag>
            {
                new Tag
                {
                    Name = "Shooter",
                    TaggedGames = new List<Game>
                    {
                        games[0],
                        games[2],
                        games[3]
                    }
                },
                new Tag
                {
                    Name = "3D",
                    TaggedGames = new List<Game>
                    {
                        games[0],
                        games[1],
                        games[2],
                        games[3]
                    }
                },
                new Tag
                {
                    Name = "2D",
                    TaggedGames = new List<Game>
                    {
                        games[1],
                        games[3],
                        games[4]
                    }
                }
            };

            games[0].Tags = new List<Tag>
            {
                tags[0],
                tags[1]
            };
            games[1].Tags = new List<Tag>
            {
                tags[1],
                tags[2]
            };
            games[2].Tags = new List<Tag>
            {
                tags[0],
                tags[1],
                tags[2]
            };
            games[3].Tags = new List<Tag>
            {
                tags[0],
                tags[1],
                tags[2]
            };
            games[4].Tags = new List<Tag>
            {
                tags[2]
            };

            List<Platform> platforms = new List<Platform>
            {
                new Platform
                {
                    PlatformCode = "XONE",
                    PlatformName = "Xbox ONE",
                    GameProducts = new List<GameProduct>
                    {
                        games[2].GameSKUs.First(),
                        games[3].GameSKUs.First()
                    }
                },
                new Platform
                {
                    PlatformCode = "PC",
                    PlatformName = "PC",
                    GameProducts = new List<GameProduct>
                    {
                        games[0].GameSKUs.First(),
                        games[4].GameSKUs.First()
                    }
                },
                new Platform
                {
                    PlatformCode = "PS4",
                    PlatformName = "Playstation 4",
                    GameProducts = new List<GameProduct>
                    {
                        games[1].GameSKUs.First()
                    }
                }
            };

            Member member = new Member
            {
                UserId = new Guid("09EABF21-D5AC-4A5D-ADF8-27180E6D889B"),
                FavoriteTags = new List<Tag>
                {
                    tags[0],
                    tags[1]
                },
                FavoritePlatforms = new List<Platform>
                {
                    platforms[1],
                    platforms[2]
                },
                WebOrders = new List<WebOrder>
                {
                    new WebOrder
                    {
                        OrderItems = new List<OrderItem>
                        {
                            new OrderItem
                            {
                                Product = games[6].GameSKUs.First()
                            }
                        }
                    }
                }
            };

            Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake();

            Mock<DbSet<Member>> memberDbSetStub = TestHelpers.GetFakeAsyncDbSet(new List<Member> { member }.AsQueryable());
            memberDbSetStub.Setup(db => db.FindAsync(member.UserId)).ReturnsAsync(member);
            dbStub.Setup(db => db.Members).Returns(memberDbSetStub.Object);

            Mock<ControllerContext> context = new Mock<ControllerContext>();
            context.Setup(c => c.HttpContext.User.Identity).Returns<IIdentity>(null);

            Mock<IGuidUserIdGetter> idGetterStub = new Mock<IGuidUserIdGetter>();
            idGetterStub.Setup(id => id.GetUserId(It.IsAny<IIdentity>())).Returns(member.UserId);

            GamesController controller = new GamesController(dbStub.Object, idGetterStub.Object)
            {
                ControllerContext = context.Object
            };

            var result = await controller.Recommended() as ViewResult;

            Assert.That(result != null);
            Assert.That(result.Model, Is.InstanceOf<GameListViewModel>());

            var model = (GameListViewModel)result.Model;

            var modelGames = model.Games.ToList();

            Assert.That(modelGames.Count, Is.EqualTo(5));
            Assert.That(modelGames[0].Name, Is.EqualTo("FirstGame"));
            Assert.That(modelGames[1].Name, Is.EqualTo("SecondGame"));
            Assert.That(modelGames[2].Name, Is.EqualTo("ThirdGame"));
            Assert.That(modelGames[3].Name, Is.EqualTo("FourthGame"));
            Assert.That(modelGames[4].Name, Is.EqualTo("FifthGame"));
            Assert.That(modelGames.All(g => g.Name != "PurchasedGame"));
            Assert.That(modelGames.All(g => g.Name != "NotForSaleGame"));
        }
Ejemplo n.º 20
0
        public async void Recommended_NoResults_ReturnsMatchingModel()
        {
            List<Game> games = new List<Game>
            {
                new Game
                {
                    Name = "FirstGame",
                    GameSKUs = new List<GameProduct>
                    {
                        new PhysicalGameProduct
                        {
                            PlatformCode = "PS4"
                        }
                    },
                    GameAvailabilityStatus = AvailabilityStatus.Available
                }
            };

            games[0].GameSKUs.First().Game = games[0];

            List<Tag> tags = new List<Tag>
            {
                new Tag
                {
                    Name = "Shooter",
                    TaggedGames = new List<Game>
                    {
                        games[0]
                    }
                },
                new Tag
                {
                    Name = "3D",
                    TaggedGames = new List<Game>
                    {
                        games[0]
                    }
                },
                new Tag
                {
                    Name = "2D",
                    TaggedGames = new List<Game>()
                }
            };

            games[0].Tags = new List<Tag>
            {
                tags[0],
                tags[1]
            };

            List<Platform> platforms = new List<Platform>
            {
                new Platform
                {
                    PlatformCode = "PS4",
                    PlatformName = "Playstation 4",
                    GameProducts = new List<GameProduct>
                    {
                        games[0].GameSKUs.First()
                    }
                }
            };

            Member member = new Member
            {
                UserId = new Guid("09EABF21-D5AC-4A5D-ADF8-27180E6D889B"),
                FavoriteTags = new List<Tag>
                {
                    tags[2]
                },
                FavoritePlatforms = new List<Platform>(),
                WebOrders = new List<WebOrder>()
            };

            Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake();

            Mock<DbSet<Member>> memberDbSetStub = TestHelpers.GetFakeAsyncDbSet(new List<Member> { member }.AsQueryable());
            memberDbSetStub.Setup(db => db.FindAsync(member.UserId)).ReturnsAsync(member);
            dbStub.Setup(db => db.Members).Returns(memberDbSetStub.Object);

            Mock<ControllerContext> context = new Mock<ControllerContext>();
            context.Setup(c => c.HttpContext.User.Identity).Returns<IIdentity>(null);

            Mock<IGuidUserIdGetter> idGetterStub = new Mock<IGuidUserIdGetter>();
            idGetterStub.Setup(id => id.GetUserId(It.IsAny<IIdentity>())).Returns(member.UserId);

            GamesController controller = new GamesController(dbStub.Object, idGetterStub.Object)
            {
                ControllerContext = context.Object
            };

            var result = await controller.Recommended() as ViewResult;

            Assert.That(result != null);
            Assert.That(result.Model, Is.InstanceOf<GameListViewModel>());

            var model = (GameListViewModel)result.Model;

            Assert.That(model.Games.Count(), Is.EqualTo(0));
        }
Ejemplo n.º 21
0
        public async void ManageTags_AddingTags_ReturnsUpdatedModel()
        {
            List<Tag> tags = new List<Tag>
            {
                new Tag
                {
                    Name = "Test Tag"
                },
                new Tag
                {
                    Name = "Second Tag"
                }
            };

            List<string> tagStrings = new List<string>
            {
                "Test Tag",
                "Second Tag"
            };

            Member member = new Member
            {
                UserId = memberId,
                FavoriteTags = new List<Tag>
                {
                    tags[0]
                }
            };

            Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake();

            Mock<DbSet<Tag>> tagDbSetStub = TestHelpers.GetFakeAsyncDbSet(tags.AsQueryable());
            dbStub.Setup(db => db.Tags).Returns(tagDbSetStub.Object);

            Mock<DbSet<Member>> memberDbSetStub = TestHelpers.GetFakeAsyncDbSet(new List<Member> { member }.AsQueryable());
            memberDbSetStub.Setup(db => db.FindAsync(member.UserId)).ReturnsAsync(member);
            dbStub.Setup(db => db.Members).Returns(memberDbSetStub.Object);

            Mock<ControllerContext> context = new Mock<ControllerContext>();
            context.Setup(c => c.HttpContext.User.Identity).Returns<IIdentity>(null);
            context.Setup(c => c.HttpContext.User.Identity.IsAuthenticated).Returns(true);

            Mock<IGuidUserIdGetter> idGetterStub = new Mock<IGuidUserIdGetter>();
            idGetterStub.Setup(id => id.GetUserId(It.IsAny<IIdentity>())).Returns(member.UserId);

            ManageController controller = new ManageController(userManager: null, signInManager: null,
                veilDataAccess: dbStub.Object, idGetter: idGetterStub.Object, stripeService: null)
            {
                ControllerContext = context.Object
            };

            await controller.ManageTags(tagStrings);

            Assert.That(member.FavoriteTags.Count, Is.EqualTo(2));
            Assert.That(member.FavoriteTags.Any(t => t.Name == "Test Tag"));
            Assert.That(member.FavoriteTags.Any(t => t.Name == "Second Tag"));
        }
Ejemplo n.º 22
0
        public void CreateCreditCard_IStripeServiceThrowsStripeException_HandlesException()
        {
            Member member = new Member
            {
                UserId = memberId
            };

            string stripeCardToken = "stripeCardToken";

            Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake();
            Mock<DbSet<Member>> memberDbSetStub = TestHelpers.GetFakeAsyncDbSet(new List<Member> { member }.AsQueryable());
            memberDbSetStub.
                Setup(mdb => mdb.FindAsync(memberId)).
                ReturnsAsync(member);

            dbStub.
                Setup(db => db.Members).
                Returns(memberDbSetStub.Object);

            StripeServiceException exception = new StripeServiceException("message", StripeExceptionType.UnknownError);

            Mock<IStripeService> stripeServiceStub = new Mock<IStripeService>();
            stripeServiceStub.
                Setup(s => s.CreateCreditCard(It.IsAny<Member>(), It.IsAny<string>())).
                Throws(exception);

            Mock<IGuidUserIdGetter> idGetterStub = TestHelpers.GetSetupIUserIdGetterFake(memberId);
            Mock<ControllerContext> contextStub = TestHelpers.GetSetupControllerContextFakeWithUserIdentitySetup();

            ManageController controller = CreateManageController(veilDataAccess: dbStub.Object, idGetter: idGetterStub.Object, stripeService: stripeServiceStub.Object);
            controller.ControllerContext = contextStub.Object;

            Assert.That(async () => await controller.CreateCreditCard(stripeCardToken), Throws.Nothing);
        }
Ejemplo n.º 23
0
        public async void CreateCreditCard_IStripeServiceThrowsApiKeyException_ReturnsInternalServerError()
        {
            Member member = new Member
            {
                UserId = memberId
            };

            string stripeCardToken = "stripeCardToken";

            Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake();
            Mock<DbSet<Member>> memberDbSetStub = TestHelpers.GetFakeAsyncDbSet(new List<Member> { member }.AsQueryable());
            memberDbSetStub.
                Setup(mdb => mdb.FindAsync(memberId)).
                ReturnsAsync(member);

            dbStub.
                Setup(db => db.Members).
                Returns(memberDbSetStub.Object);

            StripeServiceException exception = new StripeServiceException("message", StripeExceptionType.ApiKeyError);

            Mock<IStripeService> stripeServiceStub = new Mock<IStripeService>();
            stripeServiceStub.
                Setup(s => s.CreateCreditCard(It.IsAny<Member>(), It.IsAny<string>())).
                Throws(exception);

            Mock<IGuidUserIdGetter> idGetterStub = TestHelpers.GetSetupIUserIdGetterFake(memberId);
            Mock<ControllerContext> contextStub = TestHelpers.GetSetupControllerContextFakeWithUserIdentitySetup();

            ManageController controller = CreateManageController(veilDataAccess: dbStub.Object, idGetter: idGetterStub.Object, stripeService: stripeServiceStub.Object);
            controller.ControllerContext = contextStub.Object;

            var result = await controller.CreateCreditCard(stripeCardToken) as HttpStatusCodeResult;

            Assert.That(result != null);
            Assert.That(result.StatusCode, Is.GreaterThanOrEqualTo((int)HttpStatusCode.InternalServerError));
        }
Ejemplo n.º 24
0
        public async void Unregister_IdInDb_ReturnsMatchedEventAsModel()
        {
            Event eventItem = new Event
            {
                Id = Id,
                RegisteredMembers = new List<Member>()
            };

            Member member = new Member
            {
                UserId = UserId,
                RegisteredEvents = new List<Event>()
            };

            eventItem.RegisteredMembers.Add(member);
            member.RegisteredEvents.Add(eventItem);

            Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake();

            Mock<DbSet<Event>> eventDbSetStub = TestHelpers.GetFakeAsyncDbSet(new List<Event> { eventItem }.AsQueryable());
            eventDbSetStub.Setup(db => db.FindAsync(eventItem.Id)).ReturnsAsync(eventItem);
            dbStub.Setup(db => db.Events).Returns(eventDbSetStub.Object);

            Mock<DbSet<Member>> memberDbSetStub = TestHelpers.GetFakeAsyncDbSet(new List<Member> { member }.AsQueryable());
            memberDbSetStub.Setup(db => db.FindAsync(member.UserId)).ReturnsAsync(member);
            dbStub.Setup(db => db.Members).Returns(memberDbSetStub.Object);

            Mock<ControllerContext> context = new Mock<ControllerContext>();
            context.Setup(c => c.HttpContext.User.Identity).Returns<IIdentity>(null);

            Mock<IGuidUserIdGetter> idGetterStub = new Mock<IGuidUserIdGetter>();
            idGetterStub.Setup(id => id.GetUserId(It.IsAny<IIdentity>())).Returns(member.UserId);

            EventsController controller = new EventsController(dbStub.Object, idGetterStub.Object)
            {
                ControllerContext = context.Object
            };

            var result = await controller.Unregister(eventItem.Id) as ViewResult;

            Assert.That(result != null);
            Assert.That(result.Model, Is.InstanceOf<EventDetailsViewModel>());

            var model = (EventDetailsViewModel)result.Model;

            Assert.That(model.Event.Id, Is.EqualTo(eventItem.Id));
        }
Ejemplo n.º 25
0
        public async void CreateCreditCard_StripeServiceSuccess_AddsReturnedCreditCardToMembersCreditCards()
        {
            Member member = new Member
            {
                UserId = memberId,
                CreditCards = new List<MemberCreditCard>()
            };

            MemberCreditCard creditCard = new MemberCreditCard
            {
                Id = new Guid("F406AB6C-CC58-4370-AB49-89D622C51768")
            };

            string stripeCardToken = "stripeCardToken";

            Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake();
            Mock<DbSet<Member>> memberDbSetStub = TestHelpers.GetFakeAsyncDbSet(new List<Member> { member }.AsQueryable());
            memberDbSetStub.
                Setup(mdb => mdb.FindAsync(memberId)).
                ReturnsAsync(member);

            dbStub.
                Setup(db => db.Members).
                Returns(memberDbSetStub.Object);

            Mock<IStripeService> stripeServiceStub = new Mock<IStripeService>();
            stripeServiceStub.
                Setup(s => s.CreateCreditCard(It.IsAny<Member>(), It.IsAny<string>())).
                Returns(creditCard);

            Mock<IGuidUserIdGetter> idGetterStub = TestHelpers.GetSetupIUserIdGetterFake(memberId);
            Mock<ControllerContext> contextStub = TestHelpers.GetSetupControllerContextFakeWithUserIdentitySetup();

            ManageController controller = CreateManageController(veilDataAccess: dbStub.Object, idGetter: idGetterStub.Object, stripeService: stripeServiceStub.Object);
            controller.ControllerContext = contextStub.Object;

            await controller.CreateCreditCard(stripeCardToken);

            Assert.That(member.CreditCards, Is.Not.Empty);
            Assert.That(member.CreditCards, Has.Member(creditCard));
        }
        public async void Remove_IdInDb_RedirectsToIndex(bool itemAlreadyInWishlist)
        {
            Guid gameProductId = new Guid("976ACE77-D87C-4EBE-83A0-46F911F6490E");
            PhysicalGameProduct gameProduct = new PhysicalGameProduct()
            {
                Game = new Game()
                {
                    Name = "TestGame"
                },
                SKUNameSuffix = "TestGameProductName",
                Id = gameProductId
            };

            Member currentMember = new Member
            {
                UserId = UserId,
                Wishlist = new List<Product>()
            };

            if (itemAlreadyInWishlist)
            {
                currentMember.Wishlist.Add(gameProduct);
            }

            Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake();

            Mock<DbSet<Product>> productDbSetStub = TestHelpers.GetFakeAsyncDbSet(new List<Product>().AsQueryable());
            productDbSetStub.Setup(db => db.FindAsync(gameProduct.Id)).ReturnsAsync(gameProduct);
            dbStub.Setup(db => db.Products).Returns(productDbSetStub.Object);

            Mock<DbSet<Member>> memberDbSetStub = TestHelpers.GetFakeAsyncDbSet(new List<Member> { currentMember }.AsQueryable());
            memberDbSetStub.Setup(db => db.FindAsync(currentMember.UserId)).ReturnsAsync(currentMember);
            dbStub.Setup(db => db.Members).Returns(memberDbSetStub.Object);

            Mock<ControllerContext> context = new Mock<ControllerContext>();
            context.Setup(c => c.HttpContext.User.Identity).Returns<IIdentity>(null);

            Mock<IGuidUserIdGetter> idGetterStub = new Mock<IGuidUserIdGetter>();
            idGetterStub.Setup(id => id.GetUserId(It.IsAny<IIdentity>())).Returns(currentMember.UserId);

            WishlistController controller = new WishlistController(dbStub.Object, idGetterStub.Object)
            {
                ControllerContext = context.Object
            };

            var result = await controller.Remove(gameProduct.Id) as RedirectToRouteResult;

            Assert.That(result != null);
            Assert.That(result.RouteValues["action"], Is.EqualTo("Index"));
            Assert.That(currentMember.Wishlist.Contains(gameProduct), Is.False);
        }
Ejemplo n.º 27
0
        public async void CreateCreditCard_SuccessfulCreate_RedirectsToManageCreditCards()
        {
            Member member = new Member
            {
                UserId = memberId,
                CreditCards = new List<MemberCreditCard>()
            };

            MemberCreditCard creditCard = new MemberCreditCard();

            string stripeCardToken = "stripeCardToken";

            Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake();
            Mock<DbSet<Member>> memberDbSetStub = TestHelpers.GetFakeAsyncDbSet(new List<Member> { member }.AsQueryable());
            memberDbSetStub.
                Setup(mdb => mdb.FindAsync(memberId)).
                ReturnsAsync(member);

            dbStub.
                Setup(db => db.Members).
                Returns(memberDbSetStub.Object);
            dbStub.
                Setup(db => db.SaveChangesAsync()).
                ReturnsAsync(1);

            Mock<IStripeService> stripeServiceStub = new Mock<IStripeService>();
            stripeServiceStub.
                Setup(s => s.CreateCreditCard(It.IsAny<Member>(), It.IsAny<string>())).
                Returns(creditCard);

            Mock<IGuidUserIdGetter> idGetterStub = TestHelpers.GetSetupIUserIdGetterFake(memberId);
            Mock<ControllerContext> contextStub = TestHelpers.GetSetupControllerContextFakeWithUserIdentitySetup();

            ManageController controller = CreateManageController(veilDataAccess: dbStub.Object, idGetter: idGetterStub.Object, stripeService: stripeServiceStub.Object);
            controller.ControllerContext = contextStub.Object;

            var result = await controller.CreateCreditCard(stripeCardToken) as RedirectToRouteResult;

            Assert.That(result != null);
            Assert.That(result.RouteValues["Action"], Is.EqualTo(nameof(controller.ManageCreditCards)));
        }
        protected void SetupVeilDataAccessWithMember(Mock<IVeilDataAccess> dbFake, Member theMember)
        {
            Mock<DbSet<Member>> memberDbSetFake =
                TestHelpers.GetFakeAsyncDbSet(new List<Member> { theMember }.AsQueryable());

            if (theMember != null)
            {
                memberDbSetFake.
                    Setup(mdb => mdb.FindAsync(theMember.UserId)).
                    ReturnsAsync(theMember);
            }
            
            dbFake.
                Setup(db => db.Members).
                Returns(memberDbSetFake.Object);
        }
        public void RenderPhysicalGameProductPartial_UserWithAllInCart_ReturnsPartialViewWithTrueModelProperties()
        {
            PhysicalGameProduct gameProduct = new PhysicalGameProduct
            {
                Id = GameSKUId
            };

            Member member = new Member
            {
                UserId = new Guid("1901C42C-1094-456C-9EAA-87DDC7AFEEC8"),
                Cart = new Cart
                {
                    Items = new List<CartItem>
                    {
                        new CartItem
                        {
                            ProductId = gameProduct.Id,
                            IsNew = true
                        },
                        new CartItem
                        {
                            ProductId = gameProduct.Id,
                            IsNew = false
                        }
                    }
                },
                Wishlist = new List<Product>
                {
                    gameProduct
                }
            };

            Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake();
            Mock<DbSet<Member>> memberDbSetStub =
                TestHelpers.GetFakeAsyncDbSet(new List<Member> { member }.AsQueryable());
            memberDbSetStub.
                Setup(mdb => mdb.Find(member.UserId)).
                Returns(member);

            dbStub.
                Setup(db => db.Members).
                Returns(memberDbSetStub.Object);

            Mock<IGuidUserIdGetter> idGetterStub = TestHelpers.GetSetupIUserIdGetterFake(member.UserId);

            Mock<ControllerContext> contextStub = new Mock<ControllerContext>();
            contextStub.
                Setup(c => c.HttpContext.User.Identity).
                Returns<IIdentity>(null);

            GameProductsController controller = new GameProductsController(dbStub.Object, idGetterStub.Object)
            {
                ControllerContext = contextStub.Object
            };

            var result = controller.RenderPhysicalGameProductPartial(gameProduct);

            Assert.That(result != null);
            Assert.That(result.Model, Is.InstanceOf<PhysicalGameProductViewModel>());

            var model = (PhysicalGameProductViewModel)result.Model;

            Assert.That(model.GameProduct, Is.SameAs(gameProduct));
            Assert.That(model.NewIsInCart, Is.True);
            Assert.That(model.UsedIsInCart, Is.True);
            Assert.That(model.ProductIsOnWishlist, Is.True);
        }
        public void RenderPhysicalGameProduct_CurrentUserIsMember()
        {
            Guid gameProductId = new Guid("976ACE77-D87C-4EBE-83A0-46F911F6490E");
            PhysicalGameProduct gameProduct = new PhysicalGameProduct()
            {
                Id = gameProductId
            };

            Member wishlistOwner = new Member
            {
                UserId = Id,
                WishListVisibility = WishListVisibility.FriendsOnly,
                RequestedFriendships = new List<Friendship>(),
                ReceivedFriendships = new List<Friendship>(),
                UserAccount = new DataModels.Models.Identity.User()
                {
                    UserName = "******"
                }
            };

            Member currentMember = new Member
            {
                UserId = UserId,
                Wishlist = new List<Product>
                {
                    gameProduct
                },
                Cart = new Cart
                {
                    Items = new List<CartItem>
                    {
                        new CartItem
                        {
                            Product = gameProduct,
                            ProductId = gameProduct.Id,
                            IsNew = true,
                            MemberId = UserId,
                            Quantity = 1
                        },
                        new CartItem
                        {
                            Product = gameProduct,
                            ProductId = gameProduct.Id,
                            IsNew = false,
                            MemberId = UserId,
                            Quantity = 1
                        }
                    }
                }
            };

            List<Member> members = new List<Member>
            {
                wishlistOwner,
                currentMember
            };

            Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake();

            Mock<DbSet<Member>> memberDbSetStub = TestHelpers.GetFakeAsyncDbSet(members.AsQueryable());
            memberDbSetStub.Setup(db => db.Find(currentMember.UserId)).Returns(currentMember);
            memberDbSetStub.Setup(db => db.Find(wishlistOwner.UserId)).Returns(wishlistOwner);
            dbStub.Setup(db => db.Members).Returns(memberDbSetStub.Object);

            Mock<ControllerContext> context = new Mock<ControllerContext>();
            context.Setup(c => c.HttpContext.User.Identity).Returns<IIdentity>(null);
            context.Setup(c => c.HttpContext.User.Identity.IsAuthenticated).Returns(true);

            Mock<IGuidUserIdGetter> idGetterStub = new Mock<IGuidUserIdGetter>();
            idGetterStub.Setup(id => id.GetUserId(It.IsAny<IIdentity>())).Returns(currentMember.UserId);

            WishlistController controller = new WishlistController(dbStub.Object, idGetterStub.Object)
            {
                ControllerContext = context.Object
            };

            var result = controller.RenderPhysicalGameProduct(gameProduct, wishlistOwner.UserId) as PartialViewResult;

            Assert.That(result != null);
            Assert.That(result.Model, Is.InstanceOf<WishlistPhysicalGameProductViewModel>());

            var model = (WishlistPhysicalGameProductViewModel)result.Model;

            Assert.That(model.GameProduct.Id, Is.EqualTo(gameProduct.Id));
            Assert.That(model.NewIsInCart);
            Assert.That(model.UsedIsInCart);
            Assert.That(model.ProductIsOnWishlist);
            Assert.That(!model.MemberIsCurrentUser);
        }