public virtual GameDefinitionSummary GetGameDefinitionDetails(int id, int numberOfPlayedGamesToRetrieve) { var gameDefinition = _dataContext.GetQueryable <GameDefinition>() .Include(game => game.PlayedGames) .Include(game => game.Champion) .Include(game => game.Champion.Player) .Include(game => game.PreviousChampion) .Include(game => game.PreviousChampion.Player) .Include(game => game.GamingGroup) .SingleOrDefault(game => game.Id == id); if (gameDefinition == null) { throw new EntityDoesNotExistException <GameDefinition>(id); } BoardGameGeekInfo boardGameGeekInfo = null; if (gameDefinition.BoardGameGeekGameDefinitionId.HasValue) { boardGameGeekInfo = _boardGameGeekGameDefinitionInfoRetriever.GetResults(gameDefinition.BoardGameGeekGameDefinitionId.Value); } var gameDefinitionSummary = new GameDefinitionSummary { Active = gameDefinition.Active, BoardGameGeekGameDefinitionId = gameDefinition.BoardGameGeekGameDefinitionId, Name = gameDefinition.Name, Description = gameDefinition.Description, GamingGroup = gameDefinition.GamingGroup, GamingGroupId = gameDefinition.GamingGroupId, GamingGroupName = gameDefinition.GamingGroup.Name, Id = gameDefinition.Id, TotalNumberOfGamesPlayed = gameDefinition.PlayedGames.Count, AveragePlayersPerGame = gameDefinition.PlayedGames.Select(item => (decimal)item.NumberOfPlayers).DefaultIfEmpty(0M).Average(), ChampionId = gameDefinition.ChampionId, Champion = gameDefinition.Champion ?? new NullChampion(), PreviousChampion = gameDefinition.PreviousChampion ?? new NullChampion(), BoardGameGeekInfo = boardGameGeekInfo }; var playedGames = AddPlayedGamesToTheGameDefinition(numberOfPlayedGamesToRetrieve, gameDefinitionSummary); var distinctPlayerIds = AddPlayerGameResultsToEachPlayedGame(playedGames); AddPlayersToPlayerGameResults(playedGames, distinctPlayerIds); gameDefinitionSummary.PlayerWinRecords = _playerRepository.GetPlayerWinRecords(id, _dataContext); return(gameDefinitionSummary); }
public void SetUp() { _autoMocker = new RhinoAutoMocker <UniversalGameRetriever>(); _currentUser = new ApplicationUser { Id = "some user id", CurrentGamingGroupId = 1 }; _expectedGameDefinition = new GameDefinition { Id = 20, BoardGameGeekGameDefinitionId = _boardGameGeekGameDefinitionId, GamingGroupId = _currentUser.CurrentGamingGroupId.Value }; var otherGameDefinition = new GameDefinition { Id = 21, BoardGameGeekGameDefinitionId = _boardGameGeekGameDefinitionId }; var gameDefinitionQueryable = new List <GameDefinition> { _expectedGameDefinition, otherGameDefinition }.AsQueryable(); _autoMocker.Get <IDataContext>().Expect(mock => mock.GetQueryable <GameDefinition>()).Return(gameDefinitionQueryable); _expectedBoardGameGeekInfo = new BoardGameGeekInfo(); _autoMocker.Get <IBoardGameGeekGameDefinitionInfoRetriever>().Expect(mock => mock.GetResults(Arg <int> .Is.Anything)).Return(_expectedBoardGameGeekInfo); _expectedGameDefinitionSummary = new GameDefinitionSummary(); _expectedUniversalStats = new UniversalGameStats(); _autoMocker.Get <IUniversalStatsRetriever>().Expect(mock => mock.GetResults(Arg <int> .Is.Anything)) .Return(_expectedUniversalStats); _expectedTopChampions = new List <ChampionData>(); _autoMocker.Get <IUniversalTopChampionsRetreiver>().Expect(mock => mock.GetFromSource(Arg <int> .Is.Anything)) .Return(_expectedTopChampions); }
private void SetUpPlayedGameStuff() { _expectedBoardGameGeekInfo = new BoardGameGeekInfo { BoardGameGeekGameDefinitionId = _expectedGameDefinition.BoardGameGeekGameDefinitionId.Value }; _autoMocker.Get <IBoardGameGeekGameDefinitionInfoRetriever>() .Expect(mock => mock.GetResults(_expectedGameDefinition.BoardGameGeekGameDefinitionId.Value)) .Return(_expectedBoardGameGeekInfo); _expectedPlayedGame1 = new PlayedGame { Id = _expectedEntityId1, GameDefinition = new GameDefinition { Id = 101, BoardGameGeekGameDefinitionId = 1, Name = "game 1 name", BoardGameGeekGameDefinition = new BoardGameGeekGameDefinition { Thumbnail = "some thumbnail" } }, //--have to set PlayerGameResults with a winner so that LINQ doesn't blow up -- even though EntityFramework can handle this just fine PlayerGameResults = new List <PlayerGameResult> { new PlayerGameResult { GameRank = 1, PlayerId = 51, Player = new Player { Name = "some player name" } } }, WinnerType = WinnerTypes.PlayerWin, DatePlayed = DateTime.UtcNow }; _expectedPlayedGame2 = new PlayedGame { Id = _expectedEntityId2, GameDefinition = new GameDefinition { Id = 102, Name = "game 2 name", //--have to do this because entity framework can handle the null relationship, but pure LINQ cannot :( BoardGameGeekGameDefinition = new BoardGameGeekGameDefinition() }, PlayerGameResults = new List <PlayerGameResult> { new PlayerGameResult { GameRank = 1, PlayerId = 51, Player = new Player { Name = "some player name" } } }, WinnerType = WinnerTypes.TeamLoss, DatePlayed = DateTime.UtcNow.AddDays(-10) }; var playedGameQueryable = new List <PlayedGame> { //--add this one first to make sure that the query orders correctly _expectedPlayedGame2, _expectedPlayedGame1, new PlayedGame { PlayerGameResults = new List <PlayerGameResult> { new PlayerGameResult { GameRank = 1, PlayerId = 51, Player = new Player { Name = "some player name" } } } } }.AsQueryable(); _autoMocker.Get <IDataContext>().Expect(mock => mock.GetQueryable <PlayedGame>()).Return(playedGameQueryable); }