public void ItReturnsTheNewChampionIfItWasChanged()
        {
            ChampionData championData = new ChampionData {PlayerId = 10000};
            _autoMocker.Get<IChampionRepository>().Expect(mock => mock.GetChampionData(_gameDefinitionId))
                .Return(championData);

            List<Champion> championList = new List<Champion>();
            Champion existingChampion = new Champion
            {
                Id = _previousChampionId,
                PlayerId = _playerChampionId
            };
            championList.Add(existingChampion);
            _autoMocker.Get<IDataContext>().Expect(mock => mock.GetQueryable<Champion>())
                .Return(championList.AsQueryable());

            Champion actualChampion = _autoMocker.ClassUnderTest.RecalculateChampion(_gameDefinitionId, _applicationUser);

            Assert.That(actualChampion, Is.SameAs(_savedChampion));
        }
        public void ItUpdatesTheExistingChampionIfOnlyTheDataHasChanged()
        {
            int championPlayerId = 1;
            int winPercentage = 1;
            ChampionData championData = new ChampionData
            {
                WinPercentage = winPercentage,
                PlayerId = championPlayerId,
                GameDefinitionId = _gameDefinitionId
            };
            _autoMocker.Get<IChampionRepository>().Expect(mock => mock.GetChampionData(_gameDefinitionId))
                .Return(championData);

            List<Champion> championList = new List<Champion>();
            Champion existingChampion = new Champion
            {
                Id = _previousChampionId,
                PlayerId = championPlayerId,
                WinPercentage = winPercentage + 1,
                GameDefinitionId = _gameDefinitionId,
                GameDefinition = new GameDefinition()
            };
            championList.Add(existingChampion);

            _autoMocker.Get<IDataContext>().Expect(mock => mock.GetQueryable<Champion>())
                .Return(championList.AsQueryable());

            _autoMocker.ClassUnderTest.RecalculateChampion(_gameDefinitionId, _applicationUser);

            _autoMocker.Get<IDataContext>().AssertWasCalled(mock => mock.Save(
                Arg<Champion>.Matches(champion => champion.GameDefinitionId == _gameDefinitionId
                                        && champion.PlayerId == championPlayerId
                                        && champion.WinPercentage == winPercentage),
                Arg<ApplicationUser>.Is.Anything));
        }
        public void ItSetsThePreviousChampionIfTheCurrentOneChangesButItIsTheSamePlayer()
        {
            ChampionData championData = new ChampionData {PlayerId = -1};
            _autoMocker.Get<IChampionRepository>().Expect(mock => mock.GetChampionData(_gameDefinitionId))
                .Return(championData);

            _autoMocker.Get<IDataContext>().Expect(mock => mock.GetQueryable<Champion>())
                .Return(new List<Champion>().AsQueryable());

            _autoMocker.ClassUnderTest.RecalculateChampion(_gameDefinitionId, _applicationUser);

            _autoMocker.Get<IDataContext>().AssertWasCalled(mock => mock.Save(
                Arg<GameDefinition>.Matches(definition => definition.PreviousChampionId == _previousChampionId),
                Arg<ApplicationUser>.Is.Same(_applicationUser)));
        }
        public void ItDoesntSaveTheChampionIfNothingChanged()
        {
            int championPlayerId = 1;
            int winPercentage = 1;
            ChampionData championData = new ChampionData
            {
                GameDefinitionId = _gameDefinitionId,
                PlayerId = championPlayerId,
                WinPercentage = winPercentage
            };

            _autoMocker.Get<IChampionRepository>().Expect(mock => mock.GetChampionData(_gameDefinitionId))
                .Return(championData);

            List<Champion> championList = new List<Champion>();
            championList.Add(new Champion
            {
                Id = _previousChampionId,
                PlayerId = championPlayerId,
                GameDefinitionId = _gameDefinitionId,
                WinPercentage = winPercentage,
                GameDefinition = new GameDefinition { ChampionId = _previousChampionId }
            });
            _autoMocker.Get<IDataContext>().Expect(mock => mock.GetQueryable<Champion>())
                .Return(championList.AsQueryable());

            _autoMocker.ClassUnderTest.RecalculateChampion(_gameDefinitionId, _applicationUser);

            _autoMocker.Get<IDataContext>().AssertWasNotCalled(mock => mock.Save(
                Arg<Champion>.Is.Anything,
                Arg<ApplicationUser>.Is.Anything));
        }
        public void ItSetsTheNewChampionIfItChanged()
        {
            ChampionData championData = new ChampionData { PlayerId = -1 };
            _autoMocker.Get<IChampionRepository>().Expect(mock => mock.GetChampionData(_gameDefinitionId))
                .Return(championData);

            _autoMocker.Get<IDataContext>().Expect(mock => mock.GetQueryable<Champion>())
                .Return(new List<Champion>().AsQueryable());

            _autoMocker.ClassUnderTest.RecalculateChampion(_gameDefinitionId, _applicationUser);

            _autoMocker.Get<IDataContext>().AssertWasCalled(mock => mock.Save(
                Arg<Champion>.Matches(champion => champion.GameDefinitionId == _gameDefinitionId
                && champion.PlayerId == championData.PlayerId
                && champion.WinPercentage == championData.WinPercentage), 
                Arg<ApplicationUser>.Is.Same(_applicationUser)));
            _autoMocker.Get<IDataContext>().AssertWasCalled(mock => mock.Save(
                Arg<GameDefinition>.Matches(definition => definition.ChampionId == _newChampionId), 
                Arg<ApplicationUser>.Is.Same(_applicationUser)));
        }