public async void Index_Privileged_NotForSaleGame(string role) { List<Game> games = new List<Game> { new Game { GameAvailabilityStatus = AvailabilityStatus.NotForSale }, new Game { GameAvailabilityStatus = AvailabilityStatus.Available } }; Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake(); Mock<DbSet<Game>> gameDbSetStub = TestHelpers.GetFakeAsyncDbSet(games.AsQueryable()); dbStub.Setup(db => db.Games).Returns(gameDbSetStub.Object); Mock<ControllerContext> contextStub = new Mock<ControllerContext>(); contextStub.SetupUser().IsInRole(role); GamesController controller = new GamesController(dbStub.Object, idGetter: null) { ControllerContext = contextStub.Object }; var result = await controller.Index() as ViewResult; Assert.That(result != null); Assert.That(result.Model, Is.InstanceOf<GameListViewModel>()); var model = (GameListViewModel)result.Model; Assert.That(model.Games, Has.Count.EqualTo(2)); Assert.That(model.Games, Is.EqualTo(games)); }
public async void DeleteGame_ValidDeleteNoGameProduct(string role) { Game aGame = new Game { Id = gameId, GameSKUs = new List<GameProduct>() }; Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake(); Mock<DbSet<Game>> gameDbSetStub = TestHelpers.GetFakeAsyncDbSet(new List<Game> { aGame }.AsQueryable()); gameDbSetStub.Setup(g => g.FindAsync(aGame.Id)).ReturnsAsync(aGame); dbStub.Setup(db => db.Games).Returns(gameDbSetStub.Object); Mock<ControllerContext> contextStub = new Mock<ControllerContext>(); contextStub.SetupUser().IsInRole(role); GamesController controller = new GamesController(dbStub.Object, idGetter: null) { ControllerContext = contextStub.Object }; var result = await controller.Delete(aGame.Id) as ViewResult; Assert.That(result != null); Assert.That(result.Model != null); Assert.That(result.Model, Is.InstanceOf<Game>()); }
public async void AdvancedSearch_EmptySearchParameters_ReturnsViewModelWithAllPlatforms() { List<Platform> platforms = GetPlatformList(); Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake(); Mock<DbSet<Platform>> platformDbSetStub = TestHelpers.GetFakeAsyncDbSet(platforms.AsQueryable()); dbStub.Setup(db => db.Platforms).Returns(platformDbSetStub.Object); Mock<ControllerContext> contextStub = new Mock<ControllerContext>(); contextStub.SetupUser().InAllRoles(); GamesController controller = new GamesController(dbStub.Object, idGetter: null) { ControllerContext = contextStub.Object }; // Calling contains on the null Name would throw var result = await controller.AdvancedSearch(null) as ViewResult; Assert.That(result != null); Assert.That(result.Model, Is.InstanceOf<AdvancedGameSearchViewModel>()); var model = (AdvancedGameSearchViewModel)result.Model; Assert.That(model.Platforms, Has.Count.EqualTo(platforms.Count)); }
public async void Details_IdInDb_ReturnsViewWithModel() { Game matchingGame = new Game { Id = gameId, GameAvailabilityStatus = AvailabilityStatus.Available, GameSKUs = new List<GameProduct>() }; Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake(); Mock<DbSet<Game>> gameDbSetStub = TestHelpers.GetFakeAsyncDbSet(new List<Game> { matchingGame }.AsQueryable()); gameDbSetStub.SetupForInclude(); dbStub.Setup(db => db.Games).Returns(gameDbSetStub.Object); Mock<ControllerContext> contextStub = new Mock<ControllerContext>(); contextStub.SetupUser().InAllRoles(); GamesController controller = new GamesController(dbStub.Object, idGetter: null) { ControllerContext = contextStub.Object }; var result = await controller.Details(matchingGame.Id) as ViewResult; Assert.That(result != null); Assert.That(result.Model != null); Assert.That(result.Model, Is.InstanceOf<Game>()); Assert.That(result.Model, Is.EqualTo(matchingGame)); }
public async void AdvancedSearch_EmptySearchParameters_ReturnsAdvancedSearchView() { Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake(); Mock<DbSet<Game>> gameDbSetStub = TestHelpers.GetFakeAsyncDbSet(GetGameSearchList().AsQueryable()); Mock<DbSet<Tag>> tagDbSetStub = TestHelpers.GetFakeAsyncDbSet(GetTagList().AsQueryable()); Mock<DbSet<Platform>> platformDbSetStub = TestHelpers.GetFakeAsyncDbSet(GetPlatformList().AsQueryable()); dbStub.Setup(db => db.Games).Returns(gameDbSetStub.Object); dbStub.Setup(db => db.Tags).Returns(tagDbSetStub.Object); dbStub.Setup(db => db.Platforms).Returns(platformDbSetStub.Object); Mock<ControllerContext> contextStub = new Mock<ControllerContext>(); contextStub.SetupUser().InAllRoles(); GamesController controller = new GamesController(dbStub.Object, idGetter: null) { ControllerContext = contextStub.Object }; // Calling contains on the null Name would throw var result = await controller.AdvancedSearch(null) as ViewResult; Assert.That(result != null); Assert.That(result.ViewName, Is.Empty); }
public async void DeleteGame_ValidDeleteWithGameProduct(string role) { Game aGame = new Game { Id = gameId }; GameProduct aGameProduct = new PhysicalGameProduct(); aGameProduct.GameId = aGame.Id; aGameProduct.Id = new Guid("44B0752E-968B-477A-AAAD-3ED535BA3559"); Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake(); Mock<DbSet<Game>> gameDbSetStub = TestHelpers.GetFakeAsyncDbSet(new List<Game> { aGame }.AsQueryable()); Mock<DbSet<GameProduct>> gameProductsDbSetStub = TestHelpers.GetFakeAsyncDbSet(new List<GameProduct> { aGameProduct }.AsQueryable()); gameDbSetStub.Setup(g => g.FindAsync(aGame.Id)).ReturnsAsync(aGame); gameProductsDbSetStub.Setup(gp => gp.FindAsync(aGameProduct.Id)).ReturnsAsync(aGameProduct); dbStub.Setup(db => db.GameProducts).Returns(gameProductsDbSetStub.Object); dbStub.Setup(db => db.Games).Returns(gameDbSetStub.Object); Mock<ControllerContext> contextStub = new Mock<ControllerContext>(); contextStub.SetupUser().IsInRole(role); GamesController controller = new GamesController(dbStub.Object, idGetter: null) { ControllerContext = contextStub.Object }; var result = await controller.Delete(aGame.Id) as ViewResult; Assert.That(result != null); Assert.That(result.Model != null); Assert.That(result.Model, Is.InstanceOf<Game>()); }
public async void Index_WhenCalled_ReturnsViewResult() { Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake(); Mock<DbSet<Game>> gamesDbSetStub = TestHelpers.GetFakeAsyncDbSet(new List<Game> {futureGame1, futureGame2, pastGame1, pastGame2, pastGame3}.AsQueryable()); dbStub.Setup(db => db.Games).Returns(gamesDbSetStub.Object); Mock<ControllerContext> contextStub = new Mock<ControllerContext>(); contextStub.SetupUser().InAllRoles(); HomeController controller = new HomeController(dbStub.Object) { ControllerContext = contextStub.Object }; var result = await controller.Index() as ViewResult; Assert.That(result != null); Assert.That(result.Model, Is.InstanceOf<HomePageViewModel>()); var model = (HomePageViewModel)result.Model; Assert.That(model.ComingSoon.Select(g => g.GameSKUs), Has.All.Matches<List<GameProduct>>(gs => gs.Any(lgp => lgp.ReleaseDate > DateTime.Now))); Assert.That(model.NewReleases.Select(g => g.GameSKUs), Has.All.Matches<List<GameProduct>>(gs => gs.Any(lgp => lgp.ReleaseDate < DateTime.Now))); }
public async void CreateReviewForGameProduct_POST_UserNotInMemberRole_RedirectsBackToGameDetail() { Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake(); Mock<ControllerContext> contextStub = new Mock<ControllerContext>(); contextStub.SetupUser().InNoRoles(); var idGetter = TestHelpers.GetSetupIUserIdGetterFake(memberId); ReviewsController controller = new ReviewsController(dbStub.Object, idGetter.Object) { ControllerContext = contextStub.Object, }; ReviewViewModel model = new ReviewViewModel() { GameId = game.Id, GameSKUSelectList = null, Review = fullReview }; var result = await controller.CreateReviewForGameProduct(model) as RedirectToRouteResult; Assert.That(result != null); Assert.That(result.RouteValues["Action"], Is.EqualTo(nameof(GamesController.Details))); Assert.That(result.RouteValues["Controller"], Is.EqualTo("Games")); Assert.That(result.RouteValues["id"], Is.EqualTo(model.GameId)); }
public void AdvancedSearch_EmptyTitleKeyword_DoesNotFilterByName() { List<Game> games = new List<Game> { new Game { Name = null, GameSKUs = GetGameSKUsListWithAllAvailabilityStatuses() } }; List<Platform> platforms = GetPlatformList(); Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake(); Mock<DbSet<Game>> gameDbSetStub = TestHelpers.GetFakeAsyncDbSet(games.AsQueryable()); Mock<DbSet<Platform>> platformDbSetStub = TestHelpers.GetFakeAsyncDbSet(platforms.AsQueryable()); dbStub.Setup(db => db.Games).Returns(gameDbSetStub.Object); dbStub.Setup(db => db.Platforms).Returns(platformDbSetStub.Object); Mock<ControllerContext> contextStub = new Mock<ControllerContext>(); contextStub.SetupUser().InAllRoles(); GamesController controller = new GamesController(dbStub.Object, idGetter: null) { ControllerContext = contextStub.Object }; // Calling contains on the null Name would throw Assert.That(async () => await controller.AdvancedSearch(null, platform: platforms.First().PlatformCode), Throws.Nothing); }
public async void Index_Pagination_ValidPages([Range(1, 3)] int page) { List<Game> games = new List<Game> { new Game(), new Game(), new Game(), }; Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake(); Mock<DbSet<Game>> gameDbSetStub = TestHelpers.GetFakeAsyncDbSet(games.AsQueryable()); dbStub.Setup(db => db.Games).Returns(gameDbSetStub.Object); Mock<ControllerContext> contextStub = new Mock<ControllerContext>(); contextStub.SetupUser().InAllRoles(); GamesController controller = new GamesController(dbStub.Object, idGetter: null) { ControllerContext = contextStub.Object, GamesPerPage = 1 }; var result = await controller.Index(page) as ViewResult; Assert.That(result != null); Assert.That(result.Model, Is.InstanceOf<GameListViewModel>()); var model = (GameListViewModel)result.Model; Assert.That(model.Games, Has.Count.EqualTo(1)); Assert.That(model.Games, Has.Member(games[page - 1])); }
public async void Details_UserIsUnprivilegedRole_GameWithRatingMinimumAgeGreaterThanZero_CookieWithAgeLessThanMinimumAge_AddsAlert(string role) { Game matchingGame = new Game { Id = gameId, GameAvailabilityStatus = AvailabilityStatus.PreOrder, GameSKUs = GetGameSKUsListWithAllAvailabilityStatuses(), Rating = matureESRBRating, Name = "a game" }; Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake(); Mock<DbSet<Game>> gameDbSetStub = TestHelpers.GetFakeAsyncDbSet(new List<Game> { matchingGame }.AsQueryable()); gameDbSetStub.SetupForInclude(); dbStub. Setup(db => db.Games). Returns(gameDbSetStub.Object); Mock<ControllerContext> contextStub = new Mock<ControllerContext>(); contextStub. SetupUser(). IsInRole(role); contextStub. Setup(c => c.HttpContext.Request.Cookies). Returns(new HttpCookieCollection { new HttpCookie(AgeGateController.DATE_OF_BIRTH_COOKIE, DateTime.MaxValue.ToShortDateString()) }); GamesController controller = new GamesController(dbStub.Object, idGetter: null) { ControllerContext = contextStub.Object }; await controller.Details(matchingGame.Id); Assert.That(controller.TempData[AlertHelper.ALERT_MESSAGE_KEY], Has.Some.Matches<AlertMessage>(am => am.Message == AgeGateController.AgeBlockMessage)); }
public async void Index_Privileged_IncludesNotForSaleGame(string role) { futureGame1.GameAvailabilityStatus = AvailabilityStatus.NotForSale; futureGame2.GameAvailabilityStatus = AvailabilityStatus.PreOrder; pastGame1.GameAvailabilityStatus = AvailabilityStatus.NotForSale; pastGame2.GameAvailabilityStatus = AvailabilityStatus.Available; pastGame3.GameAvailabilityStatus = AvailabilityStatus.DiscontinuedByManufacturer; List<Game> games = new List<Game> { futureGame1, futureGame2, pastGame1, pastGame2, pastGame3 }; Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake(); Mock<DbSet<Game>> gameDbSetStub = TestHelpers.GetFakeAsyncDbSet(games.AsQueryable()); dbStub.Setup(db => db.Games).Returns(gameDbSetStub.Object); Mock<ControllerContext> contextStub = new Mock<ControllerContext>(); contextStub.SetupUser().IsInRole(role); HomeController controller = new HomeController(dbStub.Object) { ControllerContext = contextStub.Object }; var result = await controller.Index() as ViewResult; Assert.That(result != null); Assert.That(result.Model, Is.InstanceOf<HomePageViewModel>()); var model = (HomePageViewModel)result.Model; Assert.That(model.ComingSoon, Has.Count.EqualTo(2)); Assert.That(model.ComingSoon, Has.Member(futureGame1)); Assert.That(model.ComingSoon, Has.Member(futureGame2)); Assert.That(model.NewReleases, Has.Count.EqualTo(3)); Assert.That(model.NewReleases, Has.Member(pastGame1)); Assert.That(model.NewReleases, Has.Member(pastGame2)); Assert.That(model.NewReleases, Has.Member(pastGame3)); }
public async void AdvancedSearch_TitleMatchingAll_OrdersResultByName() { List<Game> games = GetGameSearchList(); List<Platform> platforms = GetPlatformList(); Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake(); Mock<DbSet<Game>> gameDbSetStub = TestHelpers.GetFakeAsyncDbSet(games.AsQueryable()); Mock<DbSet<Platform>> platformDbSetStub = TestHelpers.GetFakeAsyncDbSet(platforms.AsQueryable()); dbStub.Setup(db => db.Games).Returns(gameDbSetStub.Object); dbStub.Setup(db => db.Platforms).Returns(platformDbSetStub.Object); Mock<ControllerContext> contextStub = new Mock<ControllerContext>(); contextStub.SetupUser().InAllRoles(); GamesController controller = new GamesController(dbStub.Object, idGetter: null) { ControllerContext = contextStub.Object }; var result = await controller.AdvancedSearch(null, title: TITLE_FRAGMENT_COMMON_TO_ALL_SEARCH_GAMES) as ViewResult; Assert.That(result != null); Assert.That(result.Model, Is.InstanceOf<GameListViewModel>()); var model = (GameListViewModel)result.Model; Assert.That(games, Is.Not.Ordered.By(nameof(Game.Name)), "Games must not be ordered for this test to be valid"); Assert.That(model.Games, Is.Ordered.By(nameof(Game.Name))); }
public async void AdvancedSearch_KeywordIsPartOfNotForSaleTitle_Employee_ReturnsThatGame(string role) { List<Game> games = GetGameSearchList(); List<Platform> platforms = GetPlatformList(); Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake(); Mock<DbSet<Game>> gameDbSetStub = TestHelpers.GetFakeAsyncDbSet(games.AsQueryable()); Mock<DbSet<Platform>> platformDbSetStub = TestHelpers.GetFakeAsyncDbSet(platforms.AsQueryable()); dbStub.Setup(db => db.Games).Returns(gameDbSetStub.Object); dbStub.Setup(db => db.Platforms).Returns(platformDbSetStub.Object); Mock<ControllerContext> contextStub = new Mock<ControllerContext>(); contextStub.SetupUser().IsInRole(role); GamesController controller = new GamesController(dbStub.Object, idGetter: null) { ControllerContext = contextStub.Object }; var result = await controller.AdvancedSearch(null, title: "NotForSale") as ViewResult; Assert.That(result != null); Assert.That(result.Model, Is.InstanceOf<GameListViewModel>()); var model = (GameListViewModel)result.Model; Assert.That(model.Games, Has.Count.EqualTo(1)); }
public async void AdvancedSearch_KeywordIsPartOfTitle_ReturnsIEnumerableOfMatchingGames() { List<Game> games = GetGameSearchList(); List<Platform> platforms = GetPlatformList(); Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake(); Mock<DbSet<Game>> gameDbSetStub = TestHelpers.GetFakeAsyncDbSet(games.AsQueryable()); Mock<DbSet<Platform>> platformDbSetStub = TestHelpers.GetFakeAsyncDbSet(platforms.AsQueryable()); dbStub.Setup(db => db.Games).Returns(gameDbSetStub.Object); dbStub.Setup(db => db.Platforms).Returns(platformDbSetStub.Object); Mock<ControllerContext> contextStub = new Mock<ControllerContext>(); contextStub.SetupUser().InAllRoles(); GamesController controller = new GamesController(dbStub.Object, idGetter: null) { ControllerContext = contextStub.Object }; var result = await controller.AdvancedSearch(null, title: TITLE_FRAGMENT_COMMON_TO_ALL_SEARCH_GAMES) as ViewResult; Assert.That(result != null); Assert.That(result.Model, Is.InstanceOf<GameListViewModel>()); var model = (GameListViewModel)result.Model; Assert.That(model.Games, Has.Count.EqualTo(games.Count)); }
public async void AdvancedSearch_PageLessThan1_SetsPageTo1(int currentPage) { List<Game> games = GetGameSearchList(); List<Platform> platforms = GetPlatformList(); Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake(); Mock<DbSet<Game>> gameDbSetStub = TestHelpers.GetFakeAsyncDbSet(games.AsQueryable()); Mock<DbSet<Platform>> platformDbSetStub = TestHelpers.GetFakeAsyncDbSet(platforms.AsQueryable()); dbStub.Setup(db => db.Games).Returns(gameDbSetStub.Object); dbStub.Setup(db => db.Platforms).Returns(platformDbSetStub.Object); Mock<ControllerContext> contextStub = new Mock<ControllerContext>(); contextStub.SetupUser().InAllRoles(); GamesController controller = new GamesController(dbStub.Object, idGetter: null) { ControllerContext = contextStub.Object }; var result = await controller.AdvancedSearch(null, platform: platforms.First().PlatformCode, page: currentPage) as ViewResult; Assert.That(result != null); Assert.That(result.Model, Is.InstanceOf<GameListViewModel>()); var model = (GameListViewModel)result.Model; Assert.That(model.CurrentPage, Is.EqualTo(1)); }
public async void CreateReviewForGameProduct_POST_Invalid_SaveChangesNotCalled() { Mock<DbSet<GameReview>> gameReviewStub = TestHelpers.GetFakeAsyncDbSet(new List<GameReview>().AsQueryable()); gameReviewStub.Setup(rdb => rdb.FindAsync(It.IsAny<Guid>(), It.IsAny<Guid>())).ReturnsAsync(null); Mock<IVeilDataAccess> dbMock = TestHelpers.GetVeilDataAccessFake(); dbMock.Setup(db => db.GameReviews).Returns(gameReviewStub.Object); dbMock.Setup(db => db.SaveChangesAsync()).ReturnsAsync(0).Verifiable(); Mock<ControllerContext> contextStub = new Mock<ControllerContext>(); contextStub.SetupUser().InMemberRole(); var idGetter = TestHelpers.GetSetupIUserIdGetterFake(memberId); ReviewsController controller = new ReviewsController(dbMock.Object, idGetter.Object) { ControllerContext = contextStub.Object, }; controller.ModelState.AddModelError("GameId", "GameId is required"); ReviewViewModel model = new ReviewViewModel() { GameId = game.Id, GameSKUSelectList = null, Review = fullReview }; await controller.CreateReviewForGameProduct(model); Assert.That(() => dbMock.Verify(db => db.SaveChangesAsync(), Times.Never), Throws.Nothing); }
public void DeleteGame_IdNotInDb(string role) { Game aGame = new Game { Id = gameId }; Guid nonMatch = new Guid("44B0752E-968B-477A-AAAD-3ED535BA3559"); Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake(); Mock<DbSet<Game>> gameDbSetStub = TestHelpers.GetFakeAsyncDbSet(new List<Game> { aGame }.AsQueryable()); gameDbSetStub.Setup(g => g.FindAsync(aGame.Id)).ReturnsAsync(aGame); dbStub.Setup(db => db.Games).Returns(gameDbSetStub.Object); Mock<ControllerContext> contextStub = new Mock<ControllerContext>(); contextStub.SetupUser().IsInRole(role); GamesController controller = new GamesController(dbStub.Object, idGetter: null) { ControllerContext = contextStub.Object }; Assert.That(async () => await controller.Delete(nonMatch), Throws.InstanceOf<HttpException>().And.Matches<HttpException>(e => e.GetHttpCode() == 404)); }
public async void CreateReviewForGameProduct_ValidExisting_MarkAsChangedCalledOnce() { var existingReviews = new List<GameReview> { ratingOnlyReview }; var games = new List<Game> {game}; Mock<DbSet<Game>> gamesStub = TestHelpers.GetFakeAsyncDbSet(games.AsQueryable()); Mock<DbSet<GameReview>> gameReviewsStub = TestHelpers.GetFakeAsyncDbSet(existingReviews.AsQueryable()); gameReviewsStub.Setup(rdb => rdb.FindAsync(It.IsAny<Guid>(), It.IsAny<Guid>())).ReturnsAsync(fullReview); Mock<IVeilDataAccess> dbMock = TestHelpers.GetVeilDataAccessFake(); dbMock.Setup(db => db.GameReviews).Returns(gameReviewsStub.Object); dbMock.Setup(db => db.MarkAsModified(It.IsAny<GameReview>())).Verifiable(); dbMock.Setup(db => db.SaveChangesAsync()).ReturnsAsync(0).Verifiable(); dbMock.Setup(db => db.Games).Returns(gamesStub.Object); Mock<ControllerContext> contextStub = new Mock<ControllerContext>(); contextStub.SetupUser().InMemberRole(); var idGetter = TestHelpers.GetSetupIUserIdGetterFake(memberId); ReviewsController controller = new ReviewsController(dbMock.Object, idGetter.Object) { ControllerContext = contextStub.Object, }; ReviewViewModel model = new ReviewViewModel() { GameId = game.Id, GameSKUSelectList = null, Review = fullReview }; await controller.CreateReviewForGameProduct(model); Assert.That(() => dbMock.Verify(db => db.MarkAsModified(fullReview), Times.Once), Throws.Nothing); Assert.That(() => dbMock.Verify(db => db.SaveChangesAsync(), Times.Once), Throws.Nothing); }
public void Details_NotForSaleStatusAndUserInNoRoles_ReturnsErrorView() { Game matchingGame = new Game { Id = gameId, GameAvailabilityStatus = AvailabilityStatus.NotForSale }; Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake(); Mock<DbSet<Game>> gameDbSetStub = TestHelpers.GetFakeAsyncDbSet(new List<Game> { matchingGame }.AsQueryable()); gameDbSetStub.SetupForInclude(); dbStub.Setup(db => db.Games).Returns(gameDbSetStub.Object); Mock<ControllerContext> contextStub = new Mock<ControllerContext>(); contextStub.SetupUser().InNoRoles(); GamesController controller = new GamesController(dbStub.Object, idGetter: null) { ControllerContext = contextStub.Object }; Assert.That(async () => await controller.Details(matchingGame.Id), Throws.InstanceOf<HttpException>().And.Matches<HttpException>(e => e.GetHttpCode() == 404)); }
public async void AdvancedSearch_NonDefaultPage_SetsCurrentPageToPassedPage() { List<Game> games = GetGameSearchList(); List<Platform> platforms = GetPlatformList(); int currentPage = 2; Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake(); Mock<DbSet<Game>> gameDbSetStub = TestHelpers.GetFakeAsyncDbSet(games.AsQueryable()); Mock<DbSet<Platform>> platformDbSetStub = TestHelpers.GetFakeAsyncDbSet(platforms.AsQueryable()); dbStub.Setup(db => db.Games).Returns(gameDbSetStub.Object); dbStub.Setup(db => db.Platforms).Returns(platformDbSetStub.Object); Mock<ControllerContext> contextStub = new Mock<ControllerContext>(); contextStub.SetupUser().InAllRoles(); GamesController controller = new GamesController(dbStub.Object, idGetter: null) { ControllerContext = contextStub.Object }; var result = await controller.AdvancedSearch(null, title: TITLE_FRAGMENT_COMMON_TO_ALL_SEARCH_GAMES, page: currentPage) as ViewResult; Assert.That(result != null); Assert.That(result.Model, Is.InstanceOf<GameListViewModel>()); var model = (GameListViewModel)result.Model; Assert.That(model.CurrentPage, Is.EqualTo(currentPage)); }
public async void Index_Pagination_NegativePage_SetsTo1() { List<Game> games = new List<Game> { new Game() }; Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake(); Mock<DbSet<Game>> gameDbSetStub = TestHelpers.GetFakeAsyncDbSet(games.AsQueryable()); dbStub.Setup(db => db.Games).Returns(gameDbSetStub.Object); Mock<ControllerContext> contextStub = new Mock<ControllerContext>(); contextStub.SetupUser().InAllRoles(); GamesController controller = new GamesController(dbStub.Object, idGetter: null) { ControllerContext = contextStub.Object, }; var result = await controller.Index(-1) as ViewResult; Assert.That(result != null); Assert.That(result.Model, Is.InstanceOf<GameListViewModel>()); var model = (GameListViewModel)result.Model; Assert.That(model.CurrentPage, Is.EqualTo(1)); }
public async void Details_StatusShouldBeVisibleToMember_ReturnsViewWithModel(AvailabilityStatus status) { Game matchingGame = new Game { Id = gameId, GameAvailabilityStatus = status, GameSKUs = new List<GameProduct>(), Rating = everyoneESRBRating }; Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake(); Mock<DbSet<Game>> gameDbSetStub = TestHelpers.GetFakeAsyncDbSet(new List<Game> { matchingGame }.AsQueryable()); gameDbSetStub.SetupForInclude(); dbStub.Setup(db => db.Games).Returns(gameDbSetStub.Object); Mock<ControllerContext> contextStub = new Mock<ControllerContext>(); contextStub.SetupUser().InMemberRole(); GamesController controller = new GamesController(dbStub.Object, idGetter: null) { ControllerContext = contextStub.Object }; var result = await controller.Details(matchingGame.Id) as ViewResult; Assert.That(result != null); Assert.That(result.Model, Is.EqualTo(matchingGame)); }
public async void AdvancedSearch_4Games_SetsTotalPagesToListCountDividedByGamesPerPage() { List<Game> games = GetGameSearchList().GetRange(0, 4); List<Platform> platforms = GetPlatformList(); int gamesPerPage = 1; Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake(); Mock<DbSet<Game>> gameDbSetStub = TestHelpers.GetFakeAsyncDbSet(games.AsQueryable()); Mock<DbSet<Platform>> platformDbSetStub = TestHelpers.GetFakeAsyncDbSet(platforms.AsQueryable()); dbStub.Setup(db => db.Games).Returns(gameDbSetStub.Object); dbStub.Setup(db => db.Platforms).Returns(platformDbSetStub.Object); Mock<ControllerContext> contextStub = new Mock<ControllerContext>(); contextStub.SetupUser().InAllRoles(); GamesController controller = new GamesController(dbStub.Object, idGetter: null) { ControllerContext = contextStub.Object, GamesPerPage = gamesPerPage }; var result = await controller.AdvancedSearch(null, title: TITLE_FRAGMENT_COMMON_TO_ALL_SEARCH_GAMES) as ViewResult; Assert.That(result != null); Assert.That(result.Model, Is.InstanceOf<GameListViewModel>()); var model = (GameListViewModel)result.Model; Assert.That(model.TotalPages, Is.EqualTo(4 /* 4 games, one per page */)); }
public async void Details_UserIsUnprivilegedRole_GameWithRatingMinimumAgeGreaterThanZero_NoCookie_ReturnsAgeGateIndex(string role) { string rawUrl = "/Games/1234"; Game matchingGame = new Game { Id = gameId, GameAvailabilityStatus = AvailabilityStatus.PreOrder, GameSKUs = GetGameSKUsListWithAllAvailabilityStatuses(), Rating = matureESRBRating, Name = "a game" }; Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake(); Mock<DbSet<Game>> gameDbSetStub = TestHelpers.GetFakeAsyncDbSet(new List<Game> { matchingGame }.AsQueryable()); gameDbSetStub.SetupForInclude(); dbStub. Setup(db => db.Games). Returns(gameDbSetStub.Object); Mock<ControllerContext> contextStub = new Mock<ControllerContext>(); contextStub. SetupUser(). IsInRole(role); contextStub. Setup(c => c.HttpContext.Request.Cookies). Returns(new HttpCookieCollection()); contextStub. Setup(c => c.HttpContext.Request.RawUrl). Returns(rawUrl); GamesController controller = new GamesController(dbStub.Object, idGetter: null) { ControllerContext = contextStub.Object }; var result = await controller.Details(matchingGame.Id) as ViewResult; Assert.That(result != null); Assert.That(result.ViewName, Is.StringContaining("AgeGate").And.Contains("Index")); Assert.That(result.Model != null); Assert.That(result.Model, Is.InstanceOf<AgeGateViewModel>()); var model = (AgeGateViewModel) result.Model; Assert.That(model.Name, Is.SameAs(matchingGame.Name)); Assert.That(model.ReturnUrl, Is.SameAs(rawUrl)); }
public async void AdvancedSearch_PageGreaterThanPagesSupportedByGameCount_ReturnsEmptyGameList() { List<Game> games = GetGameSearchList(); List<Platform> platforms = GetPlatformList(); int gamesPerPage = games.Count; Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake(); Mock<DbSet<Game>> gameDbSetStub = TestHelpers.GetFakeAsyncDbSet(games.AsQueryable()); Mock<DbSet<Platform>> platformDbSetStub = TestHelpers.GetFakeAsyncDbSet(platforms.AsQueryable()); dbStub.Setup(db => db.Games).Returns(gameDbSetStub.Object); dbStub.Setup(db => db.Platforms).Returns(platformDbSetStub.Object); Mock<ControllerContext> contextStub = new Mock<ControllerContext>(); contextStub.SetupUser().InAllRoles(); GamesController controller = new GamesController(dbStub.Object, idGetter: null) { ControllerContext = contextStub.Object, GamesPerPage = gamesPerPage }; var result = await controller.AdvancedSearch(null, title: TITLE_FRAGMENT_COMMON_TO_ALL_SEARCH_GAMES, page: 2) as ViewResult; Assert.That(result != null); Assert.That(result.Model, Is.InstanceOf<GameListViewModel>()); var model = (GameListViewModel)result.Model; Assert.That(model.Games, Is.Empty); }
public async void Details_UserIsUnprivilegedRole_GameWithRatingMinimumAgeGreaterThanZero_CookieWithAgeLessThanMinimumAge_RedirectsToGamesIndex(string role) { Game matchingGame = new Game { Id = gameId, GameAvailabilityStatus = AvailabilityStatus.PreOrder, GameSKUs = GetGameSKUsListWithAllAvailabilityStatuses(), Rating = matureESRBRating, Name = "a game" }; Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake(); Mock<DbSet<Game>> gameDbSetStub = TestHelpers.GetFakeAsyncDbSet(new List<Game> { matchingGame }.AsQueryable()); gameDbSetStub.SetupForInclude(); dbStub. Setup(db => db.Games). Returns(gameDbSetStub.Object); Mock<ControllerContext> contextStub = new Mock<ControllerContext>(); contextStub. SetupUser(). IsInRole(role); contextStub. Setup(c => c.HttpContext.Request.Cookies). Returns(new HttpCookieCollection { new HttpCookie(AgeGateController.DATE_OF_BIRTH_COOKIE, DateTime.MaxValue.ToShortDateString()) }); GamesController controller = new GamesController(dbStub.Object, idGetter: null) { ControllerContext = contextStub.Object }; var result = await controller.Details(matchingGame.Id) as RedirectToRouteResult; Assert.That(result != null); Assert.That(result.RouteValues["Action"], Is.EqualTo(nameof(HomeController.Index))); Assert.That(result.RouteValues["Controller"], Is.EqualTo("Games")); }
public async void AdvancedSearch_DoesNotMatchAnyTag_ReturnsEmpty() { List<Game> games = GetGameSearchList(); List<Platform> platforms = GetPlatformList(); List<Tag> tags = GetTagList(); Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake(); Mock<DbSet<Game>> gameDbSetStub = TestHelpers.GetFakeAsyncDbSet(games.AsQueryable()); Mock<DbSet<Platform>> platformDbSetStub = TestHelpers.GetFakeAsyncDbSet(platforms.AsQueryable()); Mock<DbSet<Tag>> tagDbSetStub = TestHelpers.GetFakeAsyncDbSet(tags.AsQueryable()); dbStub.Setup(db => db.Games).Returns(gameDbSetStub.Object); dbStub.Setup(db => db.Platforms).Returns(platformDbSetStub.Object); dbStub.Setup(db => db.Tags).Returns(tagDbSetStub.Object); Mock<ControllerContext> contextStub = new Mock<ControllerContext>(); contextStub.SetupUser().InAllRoles(); GamesController controller = new GamesController(dbStub.Object, idGetter: null) { ControllerContext = contextStub.Object }; var result = await controller.AdvancedSearch(new List<string> { "not a match to any tag" }) as ViewResult; Assert.That(result != null); Assert.That(result.Model, Is.InstanceOf<GameListViewModel>()); var model = (GameListViewModel)result.Model; Assert.That(model.Games, Is.Empty); }
public async void Details_UserIsPrivilegedRoleWithMRatedGame_ReturnsViewWithModelContainingNotForSaleSKUs(string role) { Game matchingGame = new Game { Id = gameId, GameAvailabilityStatus = AvailabilityStatus.PreOrder, GameSKUs = GetGameSKUsListWithAllAvailabilityStatuses(), Rating = matureESRBRating }; Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake(); Mock<DbSet<Game>> gameDbSetStub = TestHelpers.GetFakeAsyncDbSet(new List<Game> { matchingGame }.AsQueryable()); gameDbSetStub.SetupForInclude(); dbStub.Setup(db => db.Games).Returns(gameDbSetStub.Object); Mock<ControllerContext> contextStub = new Mock<ControllerContext>(); contextStub.SetupUser().IsInRole(role); GamesController controller = new GamesController(dbStub.Object, idGetter: null) { ControllerContext = contextStub.Object }; var result = await controller.Details(matchingGame.Id) as ViewResult; Assert.That(result != null); Assert.That(result.Model != null); Assert.That(result.Model, Is.InstanceOf<Game>()); var model = (Game)result.Model; Assert.That(model.GameSKUs, Has.Some.Matches<Product>(p => p.ProductAvailabilityStatus == AvailabilityStatus.NotForSale)); }
public async void Index_NoGames() { Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake(); Mock<DbSet<Game>> gameDbSetStub = TestHelpers.GetFakeAsyncDbSet(new List<Game>().AsQueryable()); dbStub.Setup(db => db.Games).Returns(gameDbSetStub.Object); Mock<ControllerContext> contextStub = new Mock<ControllerContext>(); contextStub.SetupUser().InNoRoles(); GamesController controller = new GamesController(dbStub.Object, idGetter: null) { ControllerContext = contextStub.Object, GamesPerPage = 1 }; var result = await controller.Index(2) as ViewResult; Assert.That(result != null); Assert.That(result.Model, Is.InstanceOf<GameListViewModel>()); var model = (GameListViewModel)result.Model; Assert.That(model.Games, Is.Empty); }