private static MatchDateManager GetMatchDateManager() { var matchDateManager = new MatchDateManager(2018); matchDateManager.Initialize(); return(matchDateManager); }
public void CreatePreSeasonSchedule_CreatesRoundsAndMatches() { // Arrange const int numberOfTeams = 16; const int expectedNumberOfRounds = 4; var friendlyManager = new PreSeasonFriendlyManager(); var teams = GetTeams(numberOfTeams).ToList(); var season = new Season(); MatchDateManager matchDateManager = GetMatchDateManager(); // Act var schedule = friendlyManager.CreatePreSeasonSchedule(teams, season, matchDateManager); // Assert // Check the expected number of rounds. Assert.AreEqual(expectedNumberOfRounds, schedule.Rounds.Count); // There are 8 matches per round. var numberOfMatchesPerRound = schedule.Matches.GroupBy(m => m.RoundId).Select(c => c.Count()); Assert.IsTrue(numberOfMatchesPerRound.All(x => x == 8)); // Per round, check all matches have different teams. foreach (var round in schedule.Rounds) { var matches = schedule.Matches.Where(m => m.RoundId == round.Id); var teamsInThisRound = matches.Select(m => m.HomeTeamId).ToList(); teamsInThisRound.AddRange(matches.Select(m => m.AwayTeamId)); Assert.IsTrue(teamsInThisRound.Distinct().Count() == teamsInThisRound.Count(), "Per round all matches must have different teams"); } // Check every team has different opponents. foreach (var team in teams) { var opponents = schedule.Matches.Where(m => m.HomeTeam.Id == team.Id).Select(m => m.AwayTeam).ToList(); opponents.AddRange(schedule.Matches.Where(m => m.AwayTeam.Id == team.Id).Select(m => m.HomeTeam)); Assert.IsFalse(opponents.GroupBy(t => t.Id).Where(g => g.Count() > 1).Any(), "Every team must have different opponents"); } }
public CompetitionSchedule CreatePreSeasonSchedule(List <Team> teams, Season season, MatchDateManager matchDateManager) { var competitionSchedule = new CompetitionSchedule(); // Create a friendly season competition for all friendlies in the season. SeasonCompetition friendlySeasonCompetition = new SeasonCompetition { Competition = _competition, Season = season }; competitionSchedule.SeasonCompetitions.Add(friendlySeasonCompetition); var roundsAndMatches = CreatePreSeasonRoundsAndMatches(teams); foreach (var round in roundsAndMatches) { var matchDate = matchDateManager.GetNextMatchDate(CompetitionType.Friendly, round.Key); var friendlyRound = RoundFactory.CreateRound(null, friendlySeasonCompetition, matchDate, round.Key, _competition); competitionSchedule.Rounds.Add(friendlyRound); foreach (var match in round.Value) { match.Season = season; match.Round = friendlyRound; match.Date = matchDate; match.CompetitionId = _competition.Id; competitionSchedule.Matches.Add(match); } } // Add the teams to the pre-season friendly competition of this season. foreach (var team in teams) { var seasonCompetitionTeam = new SeasonCompetitionTeam { SeasonCompetition = friendlySeasonCompetition, Team = team }; competitionSchedule.SeasonCompetitionTeams.Add(seasonCompetitionTeam); } return(competitionSchedule); }