public async Task DeleteNotExistingTeamPosition()
        {
            var clubsList = new List <Club>
            {
                new Club {
                    Id = 1, Name = "Manchester United"
                }
            };
            var seasonsList = new List <Season> {
                new Season {
                    Id = 1, Name = "2020/21"
                }
            };
            var teamPositionsList = new List <TeamPosition>();

            var mockClubRepo         = new Mock <IRepository <Club> >();
            var mockSeasonRepo       = new Mock <IRepository <Season> >();
            var mockTeamPositionRepo = new Mock <IRepository <TeamPosition> >();

            mockTeamPositionRepo.Setup(r => r.All()).Returns(teamPositionsList.AsQueryable());

            var teamPositionService = new TeamPositionService(mockTeamPositionRepo.Object, mockSeasonRepo.Object, mockClubRepo.Object);

            await Assert.ThrowsAsync <Exception>(() => teamPositionService.DeleteAsync(1));
        }
        public async Task SaveAndUpdateTeamPosition()
        {
            var clubsList = new List <Club>
            {
                new Club {
                    Id = 1, Name = "Manchester United"
                },
                new Club {
                    Id = 2, Name = "Chelsea"
                }
            };
            var seasonsList = new List <Season> {
                new Season {
                    Id = 1, Name = "2020/21"
                }
            };
            var teamPositionsList = new List <TeamPosition>();

            var mockClubRepo = new Mock <IRepository <Club> >();

            mockClubRepo.Setup(r => r.Get(It.IsAny <int>())).Returns <int>(id => clubsList.FirstOrDefault(c => c.Id == id));

            var mockSeasonRepo = new Mock <IRepository <Season> >();

            mockSeasonRepo.Setup(r => r.Get(It.IsAny <int>())).Returns <int>(id => seasonsList.FirstOrDefault(c => c.Id == id));

            var mockTeamPositionRepo = new Mock <IRepository <TeamPosition> >();

            mockTeamPositionRepo.Setup(r => r.All()).Returns(teamPositionsList.AsQueryable());
            mockTeamPositionRepo.Setup(r => r.AddAsync(It.IsAny <TeamPosition>())).Callback <TeamPosition>(teamPosition => teamPositionsList.Add(new TeamPosition
            {
                Id     = 1,
                Season = teamPosition.Season,
                Club   = teamPosition.Club
            }));

            var teamPositionService = new TeamPositionService(mockTeamPositionRepo.Object, mockSeasonRepo.Object, mockClubRepo.Object);

            var teamPositionViewModel = new TeamPositionViewModel
            {
                SeasonId = 1,
                ClubId   = 1
            };

            await teamPositionService.CreateAsync(teamPositionViewModel);

            var updatedViewModel = new TeamPositionViewModel
            {
                Id       = 1,
                SeasonId = 1,
                ClubId   = 2
            };

            await teamPositionService.UpdateAsync(updatedViewModel);

            var savedTeamPosition = teamPositionService.Get(1);

            Assert.Equal(1, savedTeamPosition.Id);
        }
        public async Task SaveTwoTeamPositionsWithSameClubsAndSeasons()
        {
            var clubsList = new List <Club>
            {
                new Club {
                    Id = 1, Name = "Manchester United"
                }
            };
            var seasonsList = new List <Season> {
                new Season {
                    Id = 1, Name = "2020/21"
                }
            };
            var teamPositionsList = new List <TeamPosition>();

            var mockClubRepo = new Mock <IRepository <Club> >();

            mockClubRepo.Setup(r => r.Get(It.IsAny <int>())).Returns <int>(id => clubsList.FirstOrDefault(c => c.Id == id));

            var mockSeasonRepo = new Mock <IRepository <Season> >();

            mockSeasonRepo.Setup(r => r.Get(It.IsAny <int>())).Returns <int>(id => seasonsList.FirstOrDefault(c => c.Id == id));

            var mockTeamPositionRepo = new Mock <IRepository <TeamPosition> >();

            mockTeamPositionRepo.Setup(r => r.All()).Returns(teamPositionsList.AsQueryable());
            mockTeamPositionRepo.Setup(r => r.AddAsync(It.IsAny <TeamPosition>())).Callback <TeamPosition>(teamPosition => teamPositionsList.Add(teamPosition));

            var teamPositionService = new TeamPositionService(mockTeamPositionRepo.Object, mockSeasonRepo.Object, mockClubRepo.Object);

            var firstTeamPositionViewModel = new TeamPositionViewModel
            {
                SeasonId = 1,
                ClubId   = 1
            };

            var secondTeamPositionViewModel = new TeamPositionViewModel
            {
                SeasonId = 1,
                ClubId   = 1
            };

            await teamPositionService.CreateAsync(firstTeamPositionViewModel);

            await Assert.ThrowsAsync <Exception>(() => teamPositionService.CreateAsync(secondTeamPositionViewModel));
        }
        public async Task GetChampionshipSeasonPositions()
        {
            var championshipList = new List <Championship>
            {
                new Championship {
                    Id = 1, Name = "Premier League"
                }
            };
            var countriesList = new List <Country>
            {
                new Country {
                    Id = 1, Name = "England", Code = "EN"
                }
            };
            var stadiumsList = new List <Stadium>
            {
                new Stadium {
                    Id = 1, Name = "Old Trafford", Capacity = 76000
                }
            };
            var clubsList = new List <Club>
            {
                new Club {
                    Id = 1, Name = "Manchester United"
                }
            };
            var seasonsList = new List <Season> {
                new Season {
                    Id = 1, Name = "2020/21", Championship = championshipList[0]
                }
            };
            var teamPositionsList = new List <TeamPosition>();

            var mockChampionshipRepo = new Mock <IRepository <Championship> >();

            mockChampionshipRepo.Setup(r => r.All()).Returns(championshipList.AsQueryable());
            mockChampionshipRepo.Setup(r => r.Get(It.IsAny <int>())).Returns <int>(id => championshipList.FirstOrDefault(c => c.Id == id));

            var mockCountryRepo = new Mock <IRepository <Country> >();

            mockCountryRepo.Setup(r => r.All()).Returns(countriesList.AsQueryable());
            mockCountryRepo.Setup(r => r.Get(It.IsAny <int>())).Returns <int>(id => countriesList.FirstOrDefault(c => c.Id == id));

            var mockStadiumRepo = new Mock <IRepository <Stadium> >();

            mockStadiumRepo.Setup(r => r.All()).Returns(stadiumsList.AsQueryable());
            mockStadiumRepo.Setup(r => r.Get(It.IsAny <int>())).Returns <int>(id => stadiumsList.FirstOrDefault(c => c.Id == id));

            var mockClubRepo = new Mock <IRepository <Club> >();

            mockClubRepo.Setup(r => r.All()).Returns(clubsList.AsQueryable());
            mockClubRepo.Setup(r => r.Get(It.IsAny <int>())).Returns <int>(id => clubsList.FirstOrDefault(c => c.Id == id));

            var mockSeasonRepo = new Mock <IRepository <Season> >();

            mockSeasonRepo.Setup(r => r.All()).Returns(seasonsList.AsQueryable());
            mockSeasonRepo.Setup(r => r.Get(It.IsAny <int>())).Returns <int>(id => seasonsList.FirstOrDefault(c => c.Id == id));

            var mockTeamPositionRepo = new Mock <IRepository <TeamPosition> >();

            mockTeamPositionRepo.Setup(r => r.All()).Returns(teamPositionsList.AsQueryable());
            mockTeamPositionRepo.Setup(r => r.AddAsync(It.IsAny <TeamPosition>())).Callback <TeamPosition>(teamPosition => teamPositionsList.Add(new TeamPosition
            {
                Id     = 1,
                Season = teamPosition.Season,
                Club   = teamPosition.Club
            }));

            var teamPositionService = new TeamPositionService(mockTeamPositionRepo.Object, mockSeasonRepo.Object, mockClubRepo.Object);

            var positions = teamPositionService.GetChampionshipSeasonPositions(1);

            Assert.NotNull(positions);
        }
        public async Task GetAllRelatedDataAsKeyValuePairs()
        {
            var championshipList = new List <Championship>
            {
                new Championship {
                    Id = 1, Name = "Premier League"
                }
            };
            var countriesList = new List <Country>
            {
                new Country {
                    Id = 1, Name = "England", Code = "EN"
                }
            };
            var stadiumsList = new List <Stadium>
            {
                new Stadium {
                    Id = 1, Name = "Old Trafford", Capacity = 76000
                }
            };
            var clubsList = new List <Club>
            {
                new Club {
                    Id = 1, Name = "Manchester United"
                }
            };
            var seasonsList = new List <Season> {
                new Season {
                    Id = 1, Name = "2020/21", Championship = championshipList[0]
                }
            };
            var teamPositionsList = new List <TeamPosition>();

            var mockChampionshipRepo = new Mock <IRepository <Championship> >();

            mockChampionshipRepo.Setup(r => r.All()).Returns(championshipList.AsQueryable());
            mockChampionshipRepo.Setup(r => r.Get(It.IsAny <int>())).Returns <int>(id => championshipList.FirstOrDefault(c => c.Id == id));

            var mockCountryRepo = new Mock <IRepository <Country> >();

            mockCountryRepo.Setup(r => r.All()).Returns(countriesList.AsQueryable());
            mockCountryRepo.Setup(r => r.Get(It.IsAny <int>())).Returns <int>(id => countriesList.FirstOrDefault(c => c.Id == id));

            var mockStadiumRepo = new Mock <IRepository <Stadium> >();

            mockStadiumRepo.Setup(r => r.All()).Returns(stadiumsList.AsQueryable());
            mockStadiumRepo.Setup(r => r.Get(It.IsAny <int>())).Returns <int>(id => stadiumsList.FirstOrDefault(c => c.Id == id));

            var mockClubRepo = new Mock <IRepository <Club> >();

            mockClubRepo.Setup(r => r.All()).Returns(clubsList.AsQueryable());
            mockClubRepo.Setup(r => r.Get(It.IsAny <int>())).Returns <int>(id => clubsList.FirstOrDefault(c => c.Id == id));

            var mockSeasonRepo = new Mock <IRepository <Season> >();

            mockSeasonRepo.Setup(r => r.All()).Returns(seasonsList.AsQueryable());
            mockSeasonRepo.Setup(r => r.Get(It.IsAny <int>())).Returns <int>(id => seasonsList.FirstOrDefault(c => c.Id == id));

            var mockTeamPositionRepo = new Mock <IRepository <TeamPosition> >();

            mockTeamPositionRepo.Setup(r => r.All()).Returns(teamPositionsList.AsQueryable());
            mockTeamPositionRepo.Setup(r => r.AddAsync(It.IsAny <TeamPosition>())).Callback <TeamPosition>(teamPosition => teamPositionsList.Add(new TeamPosition
            {
                Id     = 1,
                Season = teamPosition.Season,
                Club   = teamPosition.Club
            }));

            var teamPositionService = new TeamPositionService(mockTeamPositionRepo.Object, mockSeasonRepo.Object, mockClubRepo.Object);

            var teamPositionViewModel = new TeamPositionViewModel
            {
                SeasonId   = 1,
                ClubId     = 1,
                ClubsItems = new ClubService(
                    mockClubRepo.Object,
                    mockCountryRepo.Object,
                    mockStadiumRepo.Object)
                             .GetAllAsKeyValuePairs(),
                SeasonsItems = new SeasonService(mockSeasonRepo.Object, mockChampionshipRepo.Object)
                               .GetAllAsKeyValuePairs()
            };

            await teamPositionService.CreateAsync(teamPositionViewModel);

            Assert.True(teamPositionViewModel.ClubsItems.Count() == 1);
            Assert.True(teamPositionViewModel.SeasonsItems.Count() == 1);
        }
        public async Task SaveAndUpdateTeamPositionWithDataOfAnotherdExistingTeamPosition()
        {
            var clubsList = new List <Club>
            {
                new Club {
                    Id = 1, Name = "Manchester United"
                },
                new Club {
                    Id = 2, Name = "Chelsea"
                }
            };
            var seasonsList = new List <Season> {
                new Season {
                    Id = 1, Name = "2020/21"
                }
            };
            var teamPositionsList = new List <TeamPosition>();
            var id = 1;

            var mockClubRepo = new Mock <IRepository <Club> >();

            mockClubRepo.Setup(r => r.Get(It.IsAny <int>())).Returns <int>(id => clubsList.FirstOrDefault(c => c.Id == id));

            var mockSeasonRepo = new Mock <IRepository <Season> >();

            mockSeasonRepo.Setup(r => r.Get(It.IsAny <int>())).Returns <int>(id => seasonsList.FirstOrDefault(c => c.Id == id));

            var mockTeamPositionRepo = new Mock <IRepository <TeamPosition> >();

            mockTeamPositionRepo.Setup(r => r.All()).Returns(teamPositionsList.AsQueryable());
            mockTeamPositionRepo.Setup(r => r.AddAsync(It.IsAny <TeamPosition>())).Callback <TeamPosition>(teamPosition => teamPositionsList.Add(new TeamPosition
            {
                Id     = id++,
                Season = teamPosition.Season,
                Club   = teamPosition.Club
            }));

            var teamPositionService = new TeamPositionService(mockTeamPositionRepo.Object, mockSeasonRepo.Object, mockClubRepo.Object);

            var firstTeamPositionViewModel = new TeamPositionViewModel
            {
                SeasonId = 1,
                ClubId   = 1
            };

            var secondTeamPositionViewModel = new TeamPositionViewModel
            {
                SeasonId = 1,
                ClubId   = 2
            };

            await teamPositionService.CreateAsync(firstTeamPositionViewModel);

            await teamPositionService.CreateAsync(secondTeamPositionViewModel);

            var secondUpdatedViewModel = new TeamPositionViewModel
            {
                Id       = 2,
                SeasonId = 1,
                ClubId   = 1
            };

            await Assert.ThrowsAsync <Exception>(() => teamPositionService.UpdateAsync(secondUpdatedViewModel));
        }
        public async Task SaveAndLoadTeamPosition()
        {
            var clubsList = new List <Club>
            {
                new Club {
                    Id = 1, Name = "Manchester United"
                }
            };
            var seasonsList = new List <Season> {
                new Season {
                    Id = 1, Name = "2020/21"
                }
            };
            var teamPositionsList = new List <TeamPosition>();

            var mockClubRepo = new Mock <IRepository <Club> >();

            mockClubRepo.Setup(r => r.Get(It.IsAny <int>())).Returns <int>(id => clubsList.FirstOrDefault(c => c.Id == id));

            var mockSeasonRepo = new Mock <IRepository <Season> >();

            mockSeasonRepo.Setup(r => r.Get(It.IsAny <int>())).Returns <int>(id => seasonsList.FirstOrDefault(c => c.Id == id));

            var mockTeamPositionRepo = new Mock <IRepository <TeamPosition> >();

            mockTeamPositionRepo.Setup(r => r.All()).Returns(teamPositionsList.AsQueryable());
            mockTeamPositionRepo.Setup(r => r.AddAsync(It.IsAny <TeamPosition>())).Callback <TeamPosition>(teamPosition => teamPositionsList.Add(teamPosition));
            mockTeamPositionRepo.Setup(r => r.Get(It.IsAny <int>())).Returns <int>(id => teamPositionsList.FirstOrDefault(c => c.Id == id));

            var teamPositionService = new TeamPositionService(mockTeamPositionRepo.Object, mockSeasonRepo.Object, mockClubRepo.Object);

            var teamPositionViewModel = new TeamPositionViewModel
            {
                ClubId       = 1,
                ClubName     = "Manchester United",
                SeasonId     = 1,
                SeasonName   = "2020/21",
                Points       = 50,
                Won          = 15,
                Drawn        = 5,
                Lost         = 0,
                GoalsFor     = 60,
                GoalsAgainst = 10
            };

            await teamPositionService.CreateAsync(teamPositionViewModel);

            var savedTeamPosition     = teamPositionService.Get(10, false);
            var lastSavedTeamPosition = teamPositionService.GetAll().LastOrDefault();

            Assert.Null(savedTeamPosition);
            Assert.Equal("2020/21", teamPositionViewModel.SeasonName);
            Assert.Equal("Manchester United", teamPositionViewModel.ClubName);
            Assert.Equal(50, teamPositionViewModel.Points);
            Assert.Equal(15, teamPositionViewModel.Won);
            Assert.Equal(5, teamPositionViewModel.Drawn);
            Assert.Equal(0, teamPositionViewModel.Lost);
            Assert.Equal(60, teamPositionViewModel.GoalsFor);
            Assert.Equal(10, teamPositionViewModel.GoalsAgainst);
            Assert.NotNull(lastSavedTeamPosition.Season);
            Assert.NotNull(lastSavedTeamPosition.Club);
        }