// Calculates TeamInMatchStats for one team private void FillTeamInMatchStats(Match match, TeamInMatchStats stats, TeamInMatchStatsDTO statsDTO) { statsDTO.Id = stats.Id; statsDTO.BallPossesion = stats.BallPossesion; statsDTO.Clearances = (uint)match.InteractionsBetweenPlayers .Where(x => x.InteractionType == InteractionType.ShotOnGoal && stats.Team.Players.Contains(x.Player2)).Count(); statsDTO.CornerKicks = (uint)match.Activities .Where(x => x.ActivityType == ActivityType.CornerKick && stats.Team.Players.Contains(x.Player)).Count(); statsDTO.Formation = stats.Formation; statsDTO.Fouls = (uint)match.InteractionsBetweenPlayers .Where(x => x.InteractionType == InteractionType.Foul && stats.Team.Players.Contains(x.Player1)).Count(); statsDTO.FreeKicks = (uint)match.Activities .Where(x => x.ActivityType == ActivityType.FreeKick && stats.Team.Players.Contains(x.Player)).Count(); statsDTO.Goals = _mapper.Map <IEnumerable <InteractionBetweenPlayersDTO> >(match.InteractionsBetweenPlayers .Where(x => x.InteractionType == InteractionType.Goal && stats.Team.Players.Contains(x.Player1))); statsDTO.Injuries = _mapper.Map <IEnumerable <ActivityDTO> >(match.Activities .Where(x => x.ActivityType == ActivityType.Injury && stats.Team.Players.Contains(x.Player))); statsDTO.Offsides = (uint)match.Activities .Where(x => x.ActivityType == ActivityType.Offside && stats.Team.Players.Contains(x.Player)).Count(); statsDTO.Pass = stats.Pass; statsDTO.PassSuccess = stats.PassSuccess; statsDTO.PassSuccessPercentage = stats.PassSuccess != 0 ? (uint)(stats.Pass / stats.PassSuccess) : 0; statsDTO.PenaltyKicks = (uint)match.Activities .Where(x => x.ActivityType == ActivityType.PenaltyKick && stats.Team.Players.Contains(x.Player)).Count(); statsDTO.Players = _mapper.Map <IEnumerable <PlayerBasicDTO> >(match.Activities .Where(x => x.ActivityType == ActivityType.Squad && stats.Team.Players.Contains(x.Player)).Select(x => x.Player)); statsDTO.RedCards = (uint)match.Activities .Where(x => x.ActivityType == ActivityType.RedCard && stats.Team.Players.Contains(x.Player)).Count(); statsDTO.Shots = (uint)match.Activities .Where(x => x.ActivityType == ActivityType.MissedShot && stats.Team.Players.Contains(x.Player)).Count() + (uint)match.InteractionsBetweenPlayers .Where(x => x.InteractionType == InteractionType.ShotOnGoal && stats.Team.Players.Contains(x.Player1)).Count() + (uint)match.InteractionsBetweenPlayers .Where(x => x.InteractionType == InteractionType.Goal && stats.Team.Players.Contains(x.Player1)).Count(); statsDTO.ShotsOnGoal = (uint)match.InteractionsBetweenPlayers .Where(x => x.InteractionType == InteractionType.ShotOnGoal && stats.Team.Players.Contains(x.Player1)).Count() + (uint)match.InteractionsBetweenPlayers .Where(x => x.InteractionType == InteractionType.Goal && stats.Team.Players.Contains(x.Player1)).Count(); statsDTO.ShotsOnGoalPercentage = statsDTO.ShotsOnGoalPercentage != 0 ? (uint)(statsDTO.ShotsOnGoal / statsDTO.ShotsOnGoalPercentage) : 0; statsDTO.Substitutions = _mapper.Map <IEnumerable <InteractionBetweenPlayersDTO> >(match.InteractionsBetweenPlayers .Where(x => x.InteractionType == InteractionType.Change && stats.Team.Players.Contains(x.Player1))); statsDTO.Team = _mapper.Map <TeamBasicDTO>(stats.Team); statsDTO.YellowCards = (uint)match.Activities .Where(x => x.ActivityType == ActivityType.YellowCard && stats.Team.Players.Contains(x.Player)).Count(); }
public async void ReturnMatchWhichExistsInDbByGivenId() { // Arrange var stadium = new Stadium { Id = 1, Name = "Old Trafford", Country = "England", City = "Manchester", BuiltAt = 1910, Capacity = 75_797, FieldSize = "105:68", Cost = 151_233M, VipCapacity = 4000, IsForDisabled = true, Lighting = 100_000, Architect = "Archibald Leitch", IsNational = false }; var player1 = new Player() { Id = 1, Name = "Paul", Surname = "Pogba", }; var player2 = new Player() { Id = 2, Name = "Juan", Surname = "Mata" }; var player3 = new Player() { Id = 3, Name = "David", Surname = "Silva", }; var player4 = new Player() { Id = 4, Name = "Raheem", Surname = "Sterling" }; var team1 = new Team() { Id = 1, FullName = "Manchester United FC", Players = new List <Player>() { player1, player2 } }; var team2 = new Team() { Id = 2, FullName = "Manchester City FC", Players = new List <Player>() { player3, player4 } }; var match = new Match { Id = 1, Stadium = stadium, AmountOfFans = 60_123, Date = new DateTime(2015, 3, 4), TeamOneStats = new TeamInMatchStats() { Id = 1, Team = team1 }, TeamTwoStats = new TeamInMatchStats() { Id = 2, Team = team2 }, Round = new Round() { Id = 1, Name = "Round 1" }, Activities = new List <Activity>() { new Activity() { Id = 1, ActivityType = ActivityType.Squad, Player = player1 }, new Activity() { Id = 2, ActivityType = ActivityType.Squad, Player = player2 }, new Activity() { Id = 3, ActivityType = ActivityType.Squad, Player = player3 }, new Activity() { Id = 4, ActivityType = ActivityType.Squad, Player = player4 }, new Activity() { Id = 5, ActivityType = ActivityType.RedCard, Player = player2 }, new Activity() { Id = 6, ActivityType = ActivityType.MissedShot, Player = player3 } }, InteractionsBetweenPlayers = new List <InteractionBetweenPlayers>() { new InteractionBetweenPlayers() { Id = 1, InteractionType = InteractionType.Goal, Player1 = player1, Player2 = player3 } } }; MatchDTO testMatch = null; var matchRepositoryMock = new Mock <IMatchRepository>(); matchRepositoryMock.Setup(r => r.GetByIdAsync(It.IsAny <uint>())).ThrowsAsync(new ArgumentException()); matchRepositoryMock.Setup(r => r.GetByIdAsync(1)).ReturnsAsync(match); var configuration = new MapperConfiguration(cfg => { cfg.AddProfile <AutoMapperPlayerProfile>(); cfg.AddProfile <AutoMapperTeamProfile>(); cfg.AddProfile <AutoMapperStadiumProfile>(); cfg.AddProfile <AutoMapperActivityProfile>(); cfg.AddProfile <AutoMapperRoundProfile>(); cfg.AddProfile <AutoMapperMatchProfile>(); cfg.AddProfile <AutoMapperInteractionBetweenPlayersProfile>(); }); var mapper = new Mapper(configuration); MatchDTO expectedMatch = mapper.Map <MatchDTO>(match); FillTeamsInMatchStats(match, expectedMatch, mapper); var service = new MatchService(matchRepositoryMock.Object, mapper); //Act var err = await Record.ExceptionAsync(async() => testMatch = await service.GetByIdAsync(1)); // Assert err.Should().BeNull(); testMatch.Should().NotBeNull(); testMatch.Should().BeEquivalentTo(expectedMatch); }