Exemple #1
0
        public void RepoTeamInviteTestsGetTeamInvitesByTeamID()
        {
            MainTeam mt = new MainTeam {
                MainTeamID = 0
            };
            TeamInvite invite = new TeamInvite {
                Team = mt, Accepted = true
            };
            TeamInvite invite2 = new TeamInvite {
                Team = mt, Accepted = false
            };
            List <TeamInvite> expected = new List <TeamInvite>
            {
                invite,
                invite2
            };
            List <TeamInvite> inviteDB = new List <TeamInvite>
            {
                invite,
                invite2,
                new TeamInvite {
                    Team = new MainTeam {
                        MainTeamID = 1
                    }
                }
            };

            _inviteSet.Object.AddRange(inviteDB);
            ConnectMocksToDataStore(inviteDB);
            List <TeamInvite> actual = _repo.getInvitesByTeamID(0);

            Assert.AreEqual(2, actual.Count);
            Assert.IsNotNull(_inviteSet.Object);
            CollectionAssert.AreEqual(expected, actual);
        }
Exemple #2
0
        public void RepoGamerTestsUpdateGamerInvites()
        {
            List <Gamer> gamerdb = new List <Gamer>
            {
                new Gamer {
                    GamerID = 0, Active = true, TeamInvites = new List <TeamInvite>()
                },
                new Gamer {
                    GamerID = 1, Active = true
                }
            };
            TeamInvite i = new TeamInvite {
                TeamInviteID = 1, Team = new MainTeam()
            };

            _gamerSet.Object.AddRange(gamerdb);
            ConnectMocksToDataStore(gamerdb);
            Gamer expected = new Gamer {
                GamerID = 0, Active = true, TeamInvites = new List <TeamInvite>()
            };

            expected.TeamInvites.Add(i);
            bool  result = _repo.UpdateGamerTeamInvites(0, i);
            Gamer actual = _repo.GetGamerById(0);

            Assert.IsTrue(result);
            Assert.AreEqual(expected, actual);
        }
Exemple #3
0
        public void RepoTeamInviteTestsUpdateAccepted()
        {
            Gamer g = new Gamer {
                GamerID = 0
            };
            Gamer g2 = new Gamer {
                GamerID = 1
            };
            MainTeam t = new MainTeam {
                MainTeamID = 0
            };

            List <TeamInvite> inviteDB = new List <TeamInvite>
            {
                new TeamInvite {
                    TeamInviteID = 0, Team = t, InvitedGamer = g, Accepted = false
                },
                new TeamInvite {
                    TeamInviteID = 1, Team = t, InvitedGamer = g2, Accepted = false
                },
            };

            _inviteSet.Object.AddRange(inviteDB);
            ConnectMocksToDataStore(inviteDB);

            TeamInvite expected = new TeamInvite {
                TeamInviteID = 0, Team = t, InvitedGamer = g, Accepted = true
            };
            bool       result = _repo.UpdateTeamInviteAccepted(0, true);
            TeamInvite actual = _repo.GetTeamInviteById(0);

            Assert.AreEqual(expected.Accepted, actual.Accepted);
            Assert.IsTrue(result);
        }
Exemple #4
0
 private async Task <TeamInvite> DangerouslyWithdrawInvite(TeamInvite invite)
 {
     invite.Mark(InviteState.Withdrawn);
     if (invite.UserProfileId != null && invite.UserProfileId != Guid.Empty && invite.UserProfileId.HasValue)
     {
         await this.authorizationService.RemovePermission(invite.UserProfileId.Value, AuthorizationHelper.GenerateARN(typeof(TeamInvite), invite.Id.ToString(), Shared.Permissions.TeamInvite.All));
     }
     return(invite);
 }
        public void TeamInviteTestsEnsureICanCreateAnInstance()
        {
            TeamInvite invite = new TeamInvite
            {
                Accepted     = false,
                TeamInviteID = 0,
                DateSent     = new DateTime().Date,
                InvitedGamer = new Gamer {
                    GamerID = 0
                },
                Team = new MainTeam {
                    TeamName = "Sudsy"
                }
            };

            Assert.IsNotNull(invite);
            Assert.AreEqual("Sudsy", invite.Team.TeamName);
        }
        public async Task <IActionResult> InviteToTeam(InviteModel model)
        {
            if (!await UserIsTeamAdmin(model.TeamId))
            {
                return(BadRequest("User is not team admin..."));
            }

            ApplicationUser invitingUserEntity = await GetAuthUser();

            TeamInvite invite = await _dbContext.TeamInvites.FindAsync(invitingUserEntity.Id, model.UserId, model.TeamId);

            if (invite != null)
            {
                if (invite.State != NotificationState.NotSeen)
                {
                    invite.State = NotificationState.NotSeen;
                }
            }
            else
            {
                invite = new TeamInvite()
                {
                    InvitedUserId  = model.UserId,
                    InvitingUserId = invitingUserEntity.Id,
                    TeamId         = model.TeamId
                };
                _dbContext.TeamInvites.Add(invite);
            }
            try
            {
                await _dbContext.SaveChangesAsync();
            }
            catch (DbUpdateException e)
            {
                System.Diagnostics.Trace.TraceError($"Team invite error: ${e.Message}");
                return(BadRequest("Something went wrong..."));
            }
            List <BellumGensPushSubscription> subs = await _dbContext.BellumGensPushSubscriptions.Where(sub => sub.UserId == model.UserId).ToListAsync();

            await _notificationService.SendNotificationAsync(subs, invite);

            return(Ok(model.UserId));
        }
        public IHttpActionResult InviteToTeam(InviteModel model)
        {
            CSGOTeam team = UserIsTeamAdmin(model.teamId);

            if (team == null)
            {
                return(BadRequest("User is not team admin for " + team.TeamName));
            }

            ApplicationUser invitedUserEntity  = _dbContext.Users.Find(model.userId);
            ApplicationUser invitingUserEntity = GetAuthUser();
            TeamInvite      invite             = team.Invites.SingleOrDefault(i => i.InvitingUserId == invitingUserEntity.Id && i.InvitedUserId == invitedUserEntity.Id);

            if (invite != null)
            {
                if (invite.State != NotificationState.NotSeen)
                {
                    invite.State = NotificationState.NotSeen;
                }
            }
            else
            {
                invite = new TeamInvite()
                {
                    InvitedUser    = invitedUserEntity,
                    InvitingUserId = invitingUserEntity.Id
                };
                team.Invites.Add(invite);
            }
            try
            {
                _dbContext.SaveChanges();
            }
            catch (DbUpdateException e)
            {
                System.Diagnostics.Trace.TraceError($"Team invite error: ${e.Message}");
                return(BadRequest("Something went wrong..."));
            }
            List <BellumGensPushSubscription> subs = _dbContext.PushSubscriptions.Where(sub => sub.userId == invitedUserEntity.Id).ToList();

            NotificationsService.SendNotification(subs, invite);
            return(Ok(model.userId));
        }
Exemple #8
0
        private async Task <TeamInvite> DangerouslyCreateInvite(Guid teamId, string invitee)
        {
            var invite = new TeamInvite(teamId);

            if (EmailHelper.IsEmail(invitee))
            {
                invite.Email = invitee;
                if (userUtils.GetIdFromEmail(invitee, out var userId))
                {
                    var user = await this.context.UserProfiles.Include(u => u.TeamInvites).FirstOrDefaultAsync(u => u.Id == userId);

                    if (user.TeamInvites.Any(i => i.TeamId == teamId && i.State == InviteState.Pending))
                    {
                        return(null);
                    }

                    invite.UserProfileId = userId;
                    await this.authorizationService.AddPermission(userId, AuthorizationHelper.GenerateARN(typeof(TeamInvite), invite.Id.ToString(), Shared.Permissions.TeamInvite.All));
                }
            }
            else
            {
                var user = await this.context.UserProfiles.Include(u => u.TeamInvites).FirstOrDefaultAsync(u => u.UserName == invitee);

                if (user == null)
                {
                    return(null);
                }

                if (user.TeamInvites.Any(i => i.TeamId == teamId && i.State == InviteState.Pending))
                {
                    return(null);
                }

                invite.UserProfileId = user.Id;
                invite.Email         = user.Email;
                await this.authorizationService.AddPermission(user.Id, AuthorizationHelper.GenerateARN(typeof(TeamInvite), invite.Id.ToString(), Shared.Permissions.TeamInvite.All));
            }

            return(invite);
        }
Exemple #9
0
        public void RepoEnsureICanAddInviteToDB()
        {
            List <TeamInvite> inviteDB = new List <TeamInvite>
            {
                new TeamInvite {
                    TeamInviteID = 0
                },
                new TeamInvite {
                    TeamInviteID = 1
                },
                new TeamInvite {
                    TeamInviteID = 2
                }
            };
            TeamInvite testInvite = new TeamInvite {
                TeamInviteID = 3
            };

            _inviteSet.Object.AddRange(inviteDB);
            ConnectMocksToDataStore(inviteDB);
            _inviteSet.Setup(o => o.Add(It.IsAny <TeamInvite>())).Callback((TeamInvite i) => inviteDB.Add(i));

            bool result = _repo.AddTeamInvite(testInvite);
            List <TeamInvite> actual   = _repo.GetAllTeamInvites();
            List <TeamInvite> expected = new List <TeamInvite>
            {
                new TeamInvite {
                    TeamInviteID = 0
                },
                new TeamInvite {
                    TeamInviteID = 1
                },
                new TeamInvite {
                    TeamInviteID = 2
                },
                testInvite
            };

            Assert.IsTrue(result);
            CollectionAssert.AreEqual(expected, actual);
        }
        public static void SendNotification(List <BellumGensPushSubscription> subs, TeamInvite notification, NotificationState state)
        {
            var subject = @"https://bellumgens.com";

            foreach (BellumGensPushSubscription sub in subs)
            {
                var subscription = new PushSubscription(sub.endpoint, sub.p256dh, sub.auth);
                var vapidDetails = new VapidDetails(subject, NotificationsService._publicVapidKey, NotificationsService._privateVapidKey);

                var webPushClient = new WebPushClient();
                var payload       = new BellumGensNotificationWrapper(notification, state);
                try
                {
                    webPushClient.SendNotification(subscription, payload.ToString(), vapidDetails);
                }
                catch (WebPushException exception)
                {
                    Console.WriteLine(exception);
                }
            }
        }
        public IHttpActionResult RejectTeamInvite(TeamInvite invite)
        {
            TeamInvite entity = _dbContext.TeamInvites.Find(invite.InvitingUserId, invite.InvitedUserId, invite.TeamId);

            if (entity == null)
            {
                return(NotFound());
            }

            entity.State = NotificationState.Rejected;
            try
            {
                _dbContext.SaveChanges();
            }
            catch (DbUpdateException e)
            {
                System.Diagnostics.Trace.TraceError($"User team invite reject error: ${e.Message}");
                return(BadRequest("Something went wrong... "));
            }
            return(Ok(entity));
        }
        public async Task <IActionResult> AcceptTeamInvite(TeamInvite invite)
        {
            TeamInvite entity = await _dbContext.TeamInvites.FindAsync(invite.InvitingUserId, invite.InvitedUserId, invite.TeamId);

            if (entity == null)
            {
                return(NotFound());
            }

            ApplicationUser user = await GetAuthUser();

            if (invite.InvitedUserId != user.Id)
            {
                return(BadRequest("This invite was not sent to you..."));
            }
            CSGOTeam team = await _dbContext.CSGOTeams.FindAsync(invite.TeamId);

            team.Members.Add(new TeamMember()
            {
                UserId   = user.Id,
                IsActive = true,
                IsAdmin  = false,
                IsEditor = false
            });
            entity.State = NotificationState.Accepted;
            try
            {
                await _dbContext.SaveChangesAsync();
            }
            catch (DbUpdateException e)
            {
                System.Diagnostics.Trace.TraceError($"User team invite accept error: ${e.Message}");
                return(BadRequest("Something went wrong..."));
            }
            List <BellumGensPushSubscription> subs = await _dbContext.BellumGensPushSubscriptions.Where(s => s.UserId == entity.InvitingUser.Id).ToListAsync();

            await _notificationService.SendNotificationAsync(subs, entity, NotificationState.Accepted);

            return(Ok(entity));
        }
Exemple #13
0
        public async Task SendInvite(string nickname, string teamId)
        {
            try
            {
                var player = (await _playerService.GetAllAsync(player => player.Name == nickname)).FirstOrDefault();

                if (player != null)
                {
                    var teamInvite = new TeamInvite
                    {
                        PlayerId = player.Id,
                        TeamId   = int.Parse(teamId)
                    };

                    await _teamInviteService.AddAsync(teamInvite);

                    await Clients.User(nickname).SendAsync("SendInvite", nickname, teamId);
                }
            }
            catch (Exception exception)
            { }
        }
        public async Task <int> Handle(InvitePlayerCommand request, CancellationToken cancellationToken)
        {
            request = request ?? throw new ArgumentNullException(nameof(request));

            if (string.IsNullOrWhiteSpace(request.UserName))
            {
                throw new InvalidSearchQueryException();
            }

            var desiredPlayer = await this.playersRepository
                                .AllAsNoTracking()
                                .Include(p => p.PlayerTeams)
                                .ThenInclude(pt => pt.Team)
                                .Include(p => p.Claims)
                                .SingleOrDefaultAsync(p => p.UserName == request.UserName, cancellationToken)
                                ?? throw new PlayerDoesNotExistException(request.UserName);

            if (!await CommonCheckHelper.CheckIfPlayerHasLinkedSteamAccount(desiredPlayer.Id, this.playersRepository))
            {
                throw new PlayerDoesNotHaveALinkedSteamAccountException(desiredPlayer.UserName);
            }

            if (desiredPlayer.Claims.Any(c => c.ClaimType == IS_VAC_BANNED_CLAIM_TYPE))
            {
                throw new PlayerIsVacBannedException(desiredPlayer.UserName);
            }

            var desiredTeam = await this.teamsRepository
                              .AllAsNoTracking()
                              .Include(t => t.TournamentFormat)
                              .SingleOrDefaultAsync(t => t.Id == request.TeamId, cancellationToken)
                              ?? throw new NotFoundException(nameof(Team), request.TeamId);

            if (this.CheckIfUserIsPartOfATeamWithTheSameFormat(desiredPlayer, desiredTeam.TournamentFormatId))
            {
                throw new PlayerCannotBeAMemeberOfMultipleTeamsWithTheSameFormatException(request.UserName);
            }

            if (await CommonCheckHelper.CheckIfTeamIsFull(desiredTeam.Id, this.teamsRepository))
            {
                throw new TeamIsFullException(desiredTeam.Name);
            }

            if (await this.CheckIfUserAlreadyHasAnInviteForGivenTeam(request))
            {
                throw new PlayerAlreadyHasPendingInvite(request.UserName);
            }

            var invite = new TeamInvite
            {
                PlayerId       = desiredPlayer.Id,
                TeamId         = desiredTeam.Id,
                TeamName       = desiredTeam.Name,
                SenderUsername = this.userAccessor.Username
            };

            await this.teamInvitesRepository.AddAsync(invite);

            var rowsAffected = await this.teamInvitesRepository.SaveChangesAsync(cancellationToken);

            await this.mediator.Publish(new PlayerInvitedNotification
            {
                SenderName = invite.SenderUsername,
                ReceiverId = desiredPlayer.Id,
                TeamName   = desiredTeam.Name
            });

            return(rowsAffected);
        }
Exemple #15
0
        public async Task SendNotificationAsync(List <BellumGensPushSubscription> subs, TeamInvite notification, NotificationState state)
        {
            var subject = @"https://bellumgens.com";

            foreach (BellumGensPushSubscription sub in subs)
            {
                var subscription = new PushSubscription(sub.Endpoint, sub.P256dh, sub.Auth);
                var vapidDetails = new VapidDetails(subject, _publicVapidKey, _privateVapidKey);

                var webPushClient = new WebPushClient();
                var payload       = new BellumGensNotificationWrapper(notification, state);
                try
                {
                    await webPushClient.SendNotificationAsync(subscription, payload.ToString(), vapidDetails);
                }
                catch
                {
                }
            }
        }
Exemple #16
0
        public async Task <TeamResult> CreateTeamAsync(ClaimsPrincipal signedInUser, DataTransferObjects.Team team)
        {
            // Validate team
            if (team == null)
            {
                throw new ArgumentNullException(nameof(team));
            }
            if (team.Roster == null)
            {
                throw new ArgumentNullException(nameof(team.Roster));
            }
            if (team.Roster.Count() < 5)
            {
                throw new InvalidOperationException("Teams must have at least 5 members.");
            }
            if (team.Owner == null)
            {
                throw new ArgumentNullException(nameof(team.Owner));
            }
            if (string.IsNullOrEmpty(team.Owner.Username))
            {
                throw new InvalidOperationException("Team owner invalid username");
            }
            if (string.IsNullOrEmpty(team.Name))
            {
                throw new ArgumentNullException(nameof(team.Name));
            }
            if (!Team.TeamNameRegex.IsMatch(team.Name))
            {
                throw new InvalidOperationException($"Team name {team.Name} is invalid");
            }

            // Make sure we have a default season
            var season = await _seasonManager.GetCurrentSeasonAsync();

            if (season == null)
            {
                throw new InvalidProgramException("Current season not found");
            }

            var entity = new Team {
                Name = team.Name, NormalizedName = team.Name.ToLower().Replace(' ', '-')
            };

            // Create team roster
            var roster = new List <TeamInvite>();

            foreach (var invitee in team.Roster)
            {
                // Validate invitee
                if (string.IsNullOrEmpty(invitee.Username) && string.IsNullOrEmpty(invitee.Tag))
                {
                    throw new InvalidOperationException("Team roster invalid");
                }

                if (invitee.Username != team.Owner.Username)
                {
                    Player player = null;

                    if (!string.IsNullOrEmpty(invitee.Username))
                    {
                        // If the player has a username, load the user
                        player = _db.Players
                                 .Include(x => x.User)
                                 .SingleOrDefault(x => x.User.UserName == invitee.Username);
                        if (player == null)
                        {
                            throw new InvalidProgramException($"Player entity for user {invitee.Username} not found.");
                        }
                    }
                    else
                    {
                        player = await _db.Players.FirstOrDefaultAsync(x => x.Tag == invitee.Tag);
                    }

                    if (player == null)
                    {
                        throw new InvalidProgramException($"Unable to find player");
                    }

                    var invite = new TeamInvite {
                        Player = player, Team = entity
                    };
                    roster.Add(invite);
                }
            }

            // Create team owner
            var ownerPlayer = _db.Players
                              .Include(x => x.User)
                              .SingleOrDefault(x => x.User.UserName == team.Owner.Username);

            if (ownerPlayer == null)
            {
                throw new InvalidProgramException($"Player entity for owner {team.Owner.Username} not found.");
            }
            if (ownerPlayer.User.Id != signedInUser.GetUserId())
            {
                throw new InvalidOperationException($"Team owner must be currently signed in user.");
            }

            var teamOwner = new TeamOwner {
                Player = ownerPlayer, Team = entity
            };

            // Begin transaction as this is where we begin save operations
            var transaction = await _db.Database.BeginTransactionAsync();

            var result = await _userManager.AddClaimAsync(ownerPlayer.User, new Claim($"{AuthorizationDefaults.ClaimTypeTeamOwner}:{entity.NormalizedName}", ownerPlayer.User.UserName));

            EnsureIdentitySucceeded(result);

            // Refresh the signin to add the owner cookie
            await _signInManager.RefreshSignInAsync(ownerPlayer.User);

            entity.Invitees = roster;
            entity.Owner    = teamOwner;

            _db.Add(teamOwner);
            _db.Add(entity);
            foreach (var invitee in roster)
            {
                _db.Add(invitee);
            }

            try
            {
                await _db.SaveChangesAsync();

                // Setup rank & image
                await _rankManager.CreateNewTeamRankingAsync(entity, season);

                await _imageManager.CreateDefaultImageForTeamAsync(entity);
            }
            catch (Exception e)
            {
                transaction.Rollback();

                return(TeamResult.Failed(e));
            }

            transaction.Commit();

            return(TeamResult.Success(entity));
        }
        protected override void Seed(NashGaming.Models.NashGamingContext context)
        {
            List <Gamer> Gamerdb = new List <Gamer> {
                new Gamer {
                    PSNID = "Dude", XB1Gamertag = "N/A", DisplayName = "MockUser1", Email = "*****@*****.**"
                },
                new Gamer {
                    GamerID = 6, PSNID = "Dude2", XB1Gamertag = "N/A", DisplayName = "MockUser2", Email = "*****@*****.**"
                },
                new Gamer {
                    GamerID = 7, PSNID = "Dude3", XB1Gamertag = "N/A", DisplayName = "MockUser3", Email = "*****@*****.**"
                },
                new Gamer {
                    GamerID = 8, PSNID = "Dude4", XB1Gamertag = "N/A", DisplayName = "MockUser4", Email = "*****@*****.**"
                },
                new Gamer {
                    GamerID = 9, PSNID = "Dude5", XB1Gamertag = "N/A", DisplayName = "MockUser5", Email = "*****@*****.**"
                },
                new Gamer {
                    GamerID = 10, PSNID = "Dude6", XB1Gamertag = "N/A", DisplayName = "MockUser6", Email = "*****@*****.**"
                },
                new Gamer {
                    GamerID = 11, PSNID = "Dude7", XB1Gamertag = "N/A", DisplayName = "MockUser7", Email = "*****@*****.**"
                },
                new Gamer {
                    GamerID = 12, PSNID = "Dude8", XB1Gamertag = "N/A", DisplayName = "MockUser8", Email = "*****@*****.**"
                },
                new Gamer {
                    GamerID = 13, PSNID = "Dude9", XB1Gamertag = "N/A", DisplayName = "MockUser9", Email = "*****@*****.**"
                },
                new Gamer {
                    GamerID = 14, PSNID = "Dude10", XB1Gamertag = "N/A", DisplayName = "LadderTeam1Guy1", Email = "*****@*****.**"
                },
                new Gamer {
                    GamerID = 15, PSNID = "Dude11", XB1Gamertag = "N/A", DisplayName = "LadderTeam1Guy2", Email = "*****@*****.**"
                },
                new Gamer {
                    GamerID = 16, PSNID = "Dude12", XB1Gamertag = "N/A", DisplayName = "LadderTeam1Guy3", Email = "*****@*****.**"
                },
                new Gamer {
                    GamerID = 17, PSNID = "Dude13", XB1Gamertag = "N/A", DisplayName = "LadderTeam1Guy4", Email = "*****@*****.**"
                },
                new Gamer {
                    GamerID = 18, PSNID = "Dude14", XB1Gamertag = "N/A", DisplayName = "LadderTeam2Guy1", Email = "*****@*****.**"
                },
                new Gamer {
                    GamerID = 19, PSNID = "Dude15", XB1Gamertag = "N/A", DisplayName = "LadderTeam2Guy2", Email = "*****@*****.**"
                },
                new Gamer {
                    GamerID = 20, PSNID = "Dude16", XB1Gamertag = "N/A", DisplayName = "LadderTeam2Guy3", Email = "*****@*****.**"
                },
                new Gamer {
                    GamerID = 21, PSNID = "Dude17", XB1Gamertag = "N/A", DisplayName = "LadderTeam2Guy4", Email = "*****@*****.**"
                },
                new Gamer {
                    GamerID = 22, PSNID = "Dude18", XB1Gamertag = "N/A", DisplayName = "RandomGamer1", Email = "*****@*****.**"
                },
                new Gamer {
                    GamerID = 23, PSNID = "Dude19", XB1Gamertag = "N/A", DisplayName = "RandomGamer2", Email = "*****@*****.**"
                }
            };
            List <MainTeam> MainTeamdb = new List <MainTeam>
            {
                new MainTeam {
                    MainTeamID = 0, DateFounded = new DateTime(2016, 06, 01), TeamName = "MockTeam1", Website = "https://team1.com", Active = true
                },
                new MainTeam {
                    MainTeamID = 1, DateFounded = new DateTime(2016, 06, 01), TeamName = "MockTeam2", Website = "https://team2.com", Active = true
                },
                new MainTeam {
                    MainTeamID = 2, DateFounded = new DateTime(2016, 06, 01), TeamName = "MockTeam3", Website = "https://team3.com", Active = true
                },
            };
            List <League> Leaguedb = new List <League>
            {
                new League {
                    LeagueID = 0, GamesPerWeek = 1, GameTitle = "CSGO", Platform = "PC", EndDate = new DateTime(2016, 09, 01), StartDate = new DateTime(2016, 06, 01), LeagueName = "CSGO 4v4 OBJ League", MinPlayers = 2, MaxPlayers = 4, LeagueType = "Open", Active = true, MainTeams = new List <MainTeam>(), Matches = new List <Match>(), Feed = new List <Posts>()
                },
                new League {
                    LeagueID = 1, GamesPerWeek = 2, GameTitle = "Halo", Platform = "XB1", EndDate = new DateTime(2016, 09, 01), StartDate = new DateTime(2016, 06, 01), LeagueName = "Halo 4v4 TDM League", MinPlayers = 2, MaxPlayers = 4, LeagueType = "Intermediate", Active = true, MainTeams = new List <MainTeam>(), Matches = new List <Match>(), Feed = new List <Posts>()
                },
                new League {
                    LeagueID = 2, GamesPerWeek = 1, GameTitle = "Rainbow Six: Siege", Platform = "PS4", EndDate = new DateTime(2016, 09, 01), StartDate = new DateTime(2016, 06, 01), LeagueName = "Rainbow6 Siege 5v5 League", MinPlayers = 3, MaxPlayers = 5, LeagueType = "Invite", Active = true, MainTeams = new List <MainTeam>(), Matches = new List <Match>(), Feed = new List <Posts>()
                }
            };

            Leaguedb[0].MainTeams.Add(MainTeamdb[0]);
            Leaguedb[0].MainTeams.Add(MainTeamdb[1]);
            Leaguedb[0].MainTeams.Add(MainTeamdb[2]);
            Leaguedb[1].MainTeams.Add(MainTeamdb[0]);
            Leaguedb[1].MainTeams.Add(MainTeamdb[1]);
            Leaguedb[1].MainTeams.Add(MainTeamdb[2]);
            Leaguedb[2].MainTeams.Add(MainTeamdb[0]);
            Leaguedb[2].MainTeams.Add(MainTeamdb[1]);
            Leaguedb[2].MainTeams.Add(MainTeamdb[2]);
            int l1seasonlength = Convert.ToInt16((Leaguedb[0].EndDate - Leaguedb[0].StartDate).Days / 7);
            int l2seasonlength = Convert.ToInt16((Leaguedb[1].EndDate - Leaguedb[1].StartDate).Days / 7);
            int l3seasonlength = Convert.ToInt16((Leaguedb[2].EndDate - Leaguedb[2].StartDate).Days / 7);

            Leaguedb[0].SeasonLength = l1seasonlength;
            Leaguedb[1].SeasonLength = l2seasonlength;
            Leaguedb[2].SeasonLength = l3seasonlength;
            List <Ladder> Ladderdb = new List <Ladder>
            {
                new Ladder {
                    LadderID = 0, GameTitle = "CSGO", Platform = "PC", LadderName = "2v2 Pistols Only", MinPlayers = 1, MaxPlayers = 2, Active = true, MainTeams = new List <MainTeam>(), Challenges = new List <Challenge>(), Feed = new List <Posts>(), Matches = new List <Match>()
                }
            };

            Ladderdb[0].MainTeams.Add(MainTeamdb[0]);
            Ladderdb[0].MainTeams.Add(MainTeamdb[1]);
            TeamInvite ti1 = new TeamInvite {
                TeamInviteID = 0, InvitedGamer = Gamerdb[8], Team = MainTeamdb[0], Accepted = false, DateSent = new DateTime(2016, 06, 03), DateAccepted = new DateTime(2016, 06, 12)
            };
            List <TeamInvite> TeamInviteDB = new List <TeamInvite> {
                ti1
            };
            Challenge challenge1 = new Challenge {
                ChallengeID = 0, Accepted = false, Ladder = Ladderdb[0], Initiator = MainTeamdb[0], Recipient = MainTeamdb[1], ProposedDate1 = new DateTime(2016, 06, 11), ProposedDate2 = new DateTime(2016, 06, 15), ProposedDate3 = new DateTime(2016, 06, 20)
            };

            foreach (Gamer g in Gamerdb)
            {
                context.Gamers.AddOrUpdate(g);
            }
            foreach (MainTeam t in MainTeamdb)
            {
                context.Teams.AddOrUpdate(t);
            }
            foreach (League lg in Leaguedb)
            {
                context.Leagues.AddOrUpdate(lg);
            }
            foreach (Ladder ld in Ladderdb)
            {
                context.Ladders.AddOrUpdate(ld);
            }
            context.Invites.AddOrUpdate(ti1);
            context.Challenges.AddOrUpdate(challenge1);
            context.SaveChanges();
        }