public async Task UpdateNotExistingTeamPosition()
        {
            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);

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

            await Assert.ThrowsAsync <Exception>(() => teamPositionService.UpdateAsync(updatedViewModel));
        }
        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 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));
        }