public void CalculateUserGameResultsTestAllFavoriteWins()
        {
            var adminController = new AdminController();
            int userId = 1;
            int gameFilterId = 1;
            int extraPointFactorPerBetOverMin = 2;
            Team noBetPickTeam = new Team() { TeamId = 1, TeamLongName = "No Bet", TeamOtherName = "No Bet", TeamShortName = "X  " };
            var gameResults = new List<GameResult>()
                                    {
                                        new GameResult(){ GameSpreadId = 1, WinnerTeamId = 10, GameSpread = new GameSpread(){UnderdogTeamId = 11, Game = new Game(){GameFilterId =1}}},
                                        new GameResult(){ GameSpreadId = 2, WinnerTeamId = 20, GameSpread = new GameSpread(){UnderdogTeamId = 21, Game = new Game(){GameFilterId =1}}},
                                        new GameResult(){ GameSpreadId = 3, WinnerTeamId = 30, GameSpread = new GameSpread(){UnderdogTeamId = 31, Game = new Game(){GameFilterId =1}}}
                                    };
            var userGameSelections = new List<UserGameSelection>()
                                    {
                                        new UserGameSelection(){ UserGameSelectionId = 1, UserId = 1, GameSpreadId = 1, PickTeamId = 10, Bet = 3, GameSpread = new GameSpread(){Game = new Game(){GameFilterId =1}}},
                                        new UserGameSelection(){ UserGameSelectionId = 2, UserId = 1, GameSpreadId = 2, PickTeamId = 20, Bet = 2, GameSpread = new GameSpread(){Game = new Game(){GameFilterId =1}}},
                                        new UserGameSelection(){ UserGameSelectionId = 3, UserId = 1, GameSpreadId = 3, PickTeamId = 30, Bet = 1, GameSpread = new GameSpread(){Game = new Game(){GameFilterId =1}}}
                                    };

            var expected = new List<UserGameResult>()
                                    {
                                        new UserGameResult(){ UserGameSelectionId=1, BetResult=1, BetPoints=3},
                                        new UserGameResult(){ UserGameSelectionId=2, BetResult=1, BetPoints=2},
                                        new UserGameResult(){ UserGameSelectionId=3, BetResult=1, BetPoints=1}
                                    };
            var actual = adminController.CalculateUserGameResults(userId, gameFilterId, gameResults, userGameSelections, noBetPickTeam, extraPointFactorPerBetOverMin);

            Assert.AreEqual(expected.Count, actual.Count);
            foreach (var exp in expected)
            {
                Assert.AreEqual(exp.UserGameSelectionId, actual.FirstOrDefault(a => a.UserGameSelectionId == exp.UserGameSelectionId).UserGameSelectionId);
                Assert.AreEqual(exp.BetPoints, actual.FirstOrDefault(a => a.UserGameSelectionId == exp.UserGameSelectionId).BetPoints);
                Assert.AreEqual(exp.BetResult, actual.FirstOrDefault(a => a.UserGameSelectionId == exp.UserGameSelectionId).BetResult);
            }
        }
        public void CalculateUserGameResultsTestWrongUserIdShouldError()
        {
            var adminController = new AdminController();
            int userId = 1;
            int gameFilterId = 1;
            int extraPointFactorPerBetOverMin = 2;
            Team noBetPickTeam = new Team() { TeamId = 1, TeamLongName = "No Bet", TeamOtherName = "No Bet", TeamShortName = "X  " };
            var gameResults = new List<GameResult>()
                                    {
                                        new GameResult(){ GameSpreadId = 1, WinnerTeamId = 10, GameSpread = new GameSpread(){UnderdogTeamId = 11, Game = new Game(){GameFilterId =1}}},
                                        new GameResult(){ GameSpreadId = 2, WinnerTeamId = 20, GameSpread = new GameSpread(){UnderdogTeamId = 21, Game = new Game(){GameFilterId =1}}},
                                        new GameResult(){ GameSpreadId = 3, WinnerTeamId = 30, GameSpread = new GameSpread(){UnderdogTeamId = 31, Game = new Game(){GameFilterId =1}}}
                                    };
            var userGameSelections = new List<UserGameSelection>()
                                    {
                                        new UserGameSelection(){ UserGameSelectionId = 1, UserId = 1, GameSpreadId = 1, PickTeamId = 10, Bet = 3, GameSpread = new GameSpread(){Game = new Game(){GameFilterId =1}}},
                                        new UserGameSelection(){ UserGameSelectionId = 2, UserId = 2, GameSpreadId = 2, PickTeamId = 20, Bet = 2, GameSpread = new GameSpread(){Game = new Game(){GameFilterId =1}}},
                                        new UserGameSelection(){ UserGameSelectionId = 3, UserId = 1, GameSpreadId = 4, PickTeamId = 30, Bet = 1, GameSpread = new GameSpread(){Game = new Game(){GameFilterId =1}}}
                                    };

            var expected = new List<UserGameResult>()
                                    {
                                        new UserGameResult(){ UserGameSelectionId=1, BetResult=1, BetPoints=3},
                                        new UserGameResult(){ UserGameSelectionId=2, BetResult=1, BetPoints=2},
                                        new UserGameResult(){ UserGameSelectionId=3, BetResult=1, BetPoints=1}
                                    };
            try
            {
                var actual = adminController.CalculateUserGameResults(userId, gameFilterId, gameResults, userGameSelections, noBetPickTeam, extraPointFactorPerBetOverMin);
                Assert.Fail("Should have thrown an exception");
            }
            catch (Exception ex)
            {
                Assert.IsInstanceOfType(ex, typeof(ArgumentException));
                Assert.IsTrue(ex.Message.Contains("The user game selection list has records for the wrong user (1) and/or game filter (0)"));
            }
        }