public async Task Read_competition_by_route_returns_basic_fields()
        {
            var routeNormaliser = new Mock <IRouteNormaliser>();

            routeNormaliser.Setup(x => x.NormaliseRouteToEntity(_databaseFixture.CompetitionWithFullDetails.CompetitionRoute, "competitions")).Returns(_databaseFixture.CompetitionWithFullDetails.CompetitionRoute);
            var competitionDataSource = new SqlServerCompetitionDataSource(_databaseFixture.ConnectionFactory, routeNormaliser.Object);

            var result = await competitionDataSource.ReadCompetitionByRoute(_databaseFixture.CompetitionWithFullDetails.CompetitionRoute).ConfigureAwait(false);

            Assert.Equal(_databaseFixture.CompetitionWithFullDetails.CompetitionId, result.CompetitionId);
            Assert.Equal(_databaseFixture.CompetitionWithFullDetails.CompetitionName, result.CompetitionName);
            Assert.Equal(_databaseFixture.CompetitionWithFullDetails.PlayerType, result.PlayerType);
            Assert.Equal(_databaseFixture.CompetitionWithFullDetails.Introduction, result.Introduction);
            Assert.Equal(_databaseFixture.CompetitionWithFullDetails.UntilYear, result.UntilYear);
            Assert.Equal(_databaseFixture.CompetitionWithFullDetails.PublicContactDetails, result.PublicContactDetails);
            Assert.Equal(_databaseFixture.CompetitionWithFullDetails.PrivateContactDetails, result.PrivateContactDetails);
            Assert.Equal(_databaseFixture.CompetitionWithFullDetails.Facebook, result.Facebook);
            Assert.Equal(_databaseFixture.CompetitionWithFullDetails.Twitter, result.Twitter);
            Assert.Equal(_databaseFixture.CompetitionWithFullDetails.Instagram, result.Instagram);
            Assert.Equal(_databaseFixture.CompetitionWithFullDetails.YouTube, result.YouTube);
            Assert.Equal(_databaseFixture.CompetitionWithFullDetails.Website, result.Website);
            Assert.Equal(_databaseFixture.CompetitionWithFullDetails.CompetitionRoute, result.CompetitionRoute);
            Assert.Equal(_databaseFixture.CompetitionWithFullDetails.MemberGroupKey, result.MemberGroupKey);
            Assert.Equal(_databaseFixture.CompetitionWithFullDetails.MemberGroupName, result.MemberGroupName);
        }
        public async Task Read_minimal_competition_by_route_succeeds()
        {
            var routeNormaliser = new Mock <IRouteNormaliser>();

            routeNormaliser.Setup(x => x.NormaliseRouteToEntity(_databaseFixture.CompetitionWithMinimalDetails.CompetitionRoute, "competitions")).Returns(_databaseFixture.CompetitionWithMinimalDetails.CompetitionRoute);
            var competitionDataSource = new SqlServerCompetitionDataSource(_databaseFixture.ConnectionFactory, routeNormaliser.Object);

            var result = await competitionDataSource.ReadCompetitionByRoute(_databaseFixture.CompetitionWithMinimalDetails.CompetitionRoute).ConfigureAwait(false);

            Assert.NotNull(result);
        }
        public async Task Read_competition_by_route_returns_match_types()
        {
            var routeNormaliser = new Mock <IRouteNormaliser>();

            routeNormaliser.Setup(x => x.NormaliseRouteToEntity(_databaseFixture.CompetitionWithFullDetails.CompetitionRoute, "competitions")).Returns(_databaseFixture.CompetitionWithFullDetails.CompetitionRoute);
            var competitionDataSource = new SqlServerCompetitionDataSource(_databaseFixture.ConnectionFactory, routeNormaliser.Object);

            var result = await competitionDataSource.ReadCompetitionByRoute(_databaseFixture.CompetitionWithFullDetails.CompetitionRoute).ConfigureAwait(false);

            for (var season = 0; season < _databaseFixture.CompetitionWithFullDetails.Seasons.Count; season++)
            {
                for (var matchType = 0; matchType < _databaseFixture.CompetitionWithFullDetails.Seasons[season].MatchTypes.Count; matchType++)
                {
                    Assert.Contains(_databaseFixture.CompetitionWithFullDetails.Seasons[season].MatchTypes[matchType], result.Seasons[season].MatchTypes);
                }
            }
        }
        public async Task Read_competition_by_route_returns_default_over_sets()
        {
            var routeNormaliser = new Mock <IRouteNormaliser>();

            routeNormaliser.Setup(x => x.NormaliseRouteToEntity(_databaseFixture.CompetitionWithFullDetails.CompetitionRoute, "competitions")).Returns(_databaseFixture.CompetitionWithFullDetails.CompetitionRoute);
            var competitionDataSource = new SqlServerCompetitionDataSource(_databaseFixture.ConnectionFactory, routeNormaliser.Object);

            var result = await competitionDataSource.ReadCompetitionByRoute(_databaseFixture.CompetitionWithFullDetails.CompetitionRoute).ConfigureAwait(false);

            for (var season = 0; season < _databaseFixture.CompetitionWithFullDetails.Seasons.Count; season++)
            {
                for (var set = 0; set < _databaseFixture.CompetitionWithFullDetails.Seasons[season].DefaultOverSets.Count; set++)
                {
                    Assert.Equal(_databaseFixture.CompetitionWithFullDetails.Seasons[season].DefaultOverSets[set].OverSetId, result.Seasons[season].DefaultOverSets[set].OverSetId);
                    Assert.Equal(_databaseFixture.CompetitionWithFullDetails.Seasons[season].DefaultOverSets[set].OverSetNumber, result.Seasons[season].DefaultOverSets[set].OverSetNumber);
                    Assert.Equal(_databaseFixture.CompetitionWithFullDetails.Seasons[season].DefaultOverSets[set].Overs, result.Seasons[season].DefaultOverSets[set].Overs);
                    Assert.Equal(_databaseFixture.CompetitionWithFullDetails.Seasons[season].DefaultOverSets[set].BallsPerOver, result.Seasons[season].DefaultOverSets[set].BallsPerOver);
                }
            }
        }
        public async Task Read_competition_by_route_returns_seasons_most_recent_first()
        {
            var routeNormaliser = new Mock <IRouteNormaliser>();

            routeNormaliser.Setup(x => x.NormaliseRouteToEntity(_databaseFixture.CompetitionWithFullDetails.CompetitionRoute, "competitions")).Returns(_databaseFixture.CompetitionWithFullDetails.CompetitionRoute);
            var competitionDataSource = new SqlServerCompetitionDataSource(_databaseFixture.ConnectionFactory, routeNormaliser.Object);

            var result = await competitionDataSource.ReadCompetitionByRoute(_databaseFixture.CompetitionWithFullDetails.CompetitionRoute).ConfigureAwait(false);

            for (var season = 0; season < _databaseFixture.CompetitionWithFullDetails.Seasons.Count; season++)
            {
                Assert.Equal(_databaseFixture.CompetitionWithFullDetails.Seasons[season].FromYear, result.Seasons[season].FromYear);
                Assert.Equal(_databaseFixture.CompetitionWithFullDetails.Seasons[season].UntilYear, result.Seasons[season].UntilYear);
                Assert.Equal(_databaseFixture.CompetitionWithFullDetails.Seasons[season].SeasonRoute, result.Seasons[season].SeasonRoute);
                Assert.Equal(_databaseFixture.CompetitionWithFullDetails.Seasons[season].PlayersPerTeam, result.Seasons[season].PlayersPerTeam);
                Assert.Equal(_databaseFixture.CompetitionWithFullDetails.Seasons[season].EnableTournaments, result.Seasons[season].EnableTournaments);
                Assert.Equal(_databaseFixture.CompetitionWithFullDetails.Seasons[season].EnableLastPlayerBatsOn, result.Seasons[season].EnableLastPlayerBatsOn);
                Assert.Equal(_databaseFixture.CompetitionWithFullDetails.Seasons[season].EnableBonusOrPenaltyRuns, result.Seasons[season].EnableBonusOrPenaltyRuns);
            }
        }