public async Task Read_competitions_sorts_by_most_recently_active_then_no_seasons_then_inactive() { var routeNormaliser = new Mock <IRouteNormaliser>(); var competitionDataSource = new SqlServerCompetitionDataSource(_databaseFixture.ConnectionFactory, routeNormaliser.Object); var result = await competitionDataSource.ReadCompetitions(new CompetitionFilter { Paging = new Paging { PageSize = _databaseFixture.Competitions.Count } }).ConfigureAwait(false); var expectedActiveStatus = true; var hasSeasonsIfActive = true; foreach (var competition in result) { // The first time an active competition with no seasons is seen, set a flag to say they must all have no seasons if active if (hasSeasonsIfActive && !competition.UntilYear.HasValue && competition.Seasons.Count == 0) { hasSeasonsIfActive = false; } if (!competition.UntilYear.HasValue) { Assert.Equal(hasSeasonsIfActive, competition.Seasons.Any()); } // The first time an inactive competition is seen, set a flag to say they must all be inactive if (expectedActiveStatus && competition.UntilYear.HasValue) { expectedActiveStatus = false; } Assert.Equal(expectedActiveStatus, !competition.UntilYear.HasValue); } }
public async Task Read_competitions_returns_latest_season_with_route_and_teams() { var routeNormaliser = new Mock <IRouteNormaliser>(); var competitionDataSource = new SqlServerCompetitionDataSource(_databaseFixture.ConnectionFactory, routeNormaliser.Object); var results = await competitionDataSource.ReadCompetitions(new CompetitionFilter { Paging = new Paging { PageSize = _databaseFixture.Competitions.Count } }).ConfigureAwait(false); foreach (var competition in _databaseFixture.Competitions) { var result = results.SingleOrDefault(x => x.CompetitionId == competition.CompetitionId); Assert.NotNull(result); var expectedSeason = competition.Seasons.OrderByDescending(x => x.FromYear).FirstOrDefault(); if (expectedSeason != null) { var resultSeason = result.Seasons.SingleOrDefault(x => x.SeasonId == expectedSeason.SeasonId); Assert.NotNull(resultSeason); Assert.Equal(expectedSeason.SeasonRoute, resultSeason.SeasonRoute); foreach (var team in expectedSeason.Teams) { var resultTeam = resultSeason.Teams.SingleOrDefault(x => x.Team.TeamId == team.Team.TeamId); Assert.NotNull(resultTeam); } } else { Assert.Empty(result.Seasons); } } }
public async Task Read_competitions_supports_no_filter() { var routeNormaliser = new Mock <IRouteNormaliser>(); var competitionDataSource = new SqlServerCompetitionDataSource(_databaseFixture.ConnectionFactory, routeNormaliser.Object); var result = await competitionDataSource.ReadCompetitions(new CompetitionFilter { Paging = new Paging { PageSize = _databaseFixture.Competitions.Count } }).ConfigureAwait(false); foreach (var competition in _databaseFixture.Competitions) { Assert.NotNull(result.Single(x => x.CompetitionId == competition.CompetitionId)); } }
public async Task Read_competitions_supports_case_insensitive_filter_by_partial_player_type() { var routeNormaliser = new Mock <IRouteNormaliser>(); var competitionDataSource = new SqlServerCompetitionDataSource(_databaseFixture.ConnectionFactory, routeNormaliser.Object); var query = new CompetitionFilter { Query = "JuNioR", Paging = new Paging { PageSize = _databaseFixture.Competitions.Count } }; var result = await competitionDataSource.ReadCompetitions(query).ConfigureAwait(false); foreach (var competition in _databaseFixture.Competitions.Where(x => x.PlayerType.ToString().Contains(query.Query, StringComparison.OrdinalIgnoreCase))) { Assert.NotNull(result.Single(x => x.CompetitionId == competition.CompetitionId)); } }
public async Task Read_competitions_returns_basic_fields() { var routeNormaliser = new Mock <IRouteNormaliser>(); var competitionDataSource = new SqlServerCompetitionDataSource(_databaseFixture.ConnectionFactory, routeNormaliser.Object); var results = await competitionDataSource.ReadCompetitions(new CompetitionFilter { Paging = new Paging { PageSize = _databaseFixture.Competitions.Count } }).ConfigureAwait(false); foreach (var competition in _databaseFixture.Competitions) { var result = results.SingleOrDefault(x => x.CompetitionId == competition.CompetitionId); Assert.NotNull(result); Assert.Equal(competition.CompetitionName, result.CompetitionName); Assert.Equal(competition.CompetitionRoute, result.CompetitionRoute); Assert.Equal(competition.UntilYear, result.UntilYear); Assert.Equal(competition.PlayerType, result.PlayerType); } }
public async Task Read_competitions_pages_results() { var routeNormaliser = new Mock <IRouteNormaliser>(); var competitionDataSource = new SqlServerCompetitionDataSource(_databaseFixture.ConnectionFactory, routeNormaliser.Object); const int pageSize = 10; var pageNumber = 1; var remaining = _databaseFixture.Competitions.Count; while (remaining > 0) { var result = await competitionDataSource.ReadCompetitions(new CompetitionFilter { Paging = new Paging { PageNumber = pageNumber, PageSize = pageSize } }).ConfigureAwait(false); var expected = pageSize > remaining ? remaining : pageSize; Assert.Equal(expected, result.Count); pageNumber++; remaining -= pageSize; } }