public async Task <CreatedActionResult <ActiveStatsModifier> > PostAddModifiersAsync(
            [FromServices] NaheulbookExecutionContext executionContext,
            [FromRoute] int characterId,
            AddCharacterModifierRequest request
            )
        {
            try
            {
                var item = await _characterService.AddModifiersAsync(executionContext, characterId, request);

                return(_mapper.Map <ActiveStatsModifier>(item));
            }
            catch (ForbiddenAccessException ex)
            {
                throw new HttpErrorException(StatusCodes.Status403Forbidden, ex);
            }
            catch (CharacterNotFoundException ex)
            {
                throw new HttpErrorException(StatusCodes.Status404NotFound, ex);
            }
        }
        public async Task AddModifiersAsync_ShouldAddCharacterModifier()
        {
            const int characterId       = 4;
            var       executionContext  = new NaheulbookExecutionContext();
            var       character         = new Character();
            var       request           = new AddCharacterModifierRequest();
            var       characterModifier = new CharacterModifier();

            _mapper.Map <CharacterModifier>(request)
            .Returns(characterModifier);
            _unitOfWorkFactory.GetUnitOfWork().Characters.GetWithGroupAsync(characterId)
            .Returns(character);

            var actualCharacterModifier = await _service.AddModifiersAsync(executionContext, characterId, request);

            Received.InOrder(() =>
            {
                _unitOfWorkFactory.GetUnitOfWork().CharacterModifiers.Add(characterModifier);
                _unitOfWorkFactory.GetUnitOfWork().Received(1).SaveChangesAsync();
            });
            actualCharacterModifier.Should().BeSameAs(characterModifier);
        }
        public async Task AddModifiersAsync_ShouldLog()
        {
            const int characterId           = 4;
            var       character             = new Character();
            var       characterHistoryEntry = new CharacterHistoryEntry();
            var       request           = new AddCharacterModifierRequest();
            var       characterModifier = new CharacterModifier();

            _mapper.Map <CharacterModifier>(request)
            .Returns(characterModifier);

            _unitOfWorkFactory.GetUnitOfWork().Characters.GetWithGroupAsync(characterId)
            .Returns(character);
            _characterHistoryUtil.CreateLogAddModifier(character, characterModifier)
            .Returns(characterHistoryEntry);

            await _service.AddModifiersAsync(new NaheulbookExecutionContext(), characterId, request);

            Received.InOrder(() =>
            {
                _unitOfWorkFactory.GetUnitOfWork().CharacterHistoryEntries.Add(characterHistoryEntry);
                _unitOfWorkFactory.GetUnitOfWork().Received(1).SaveChangesAsync();
            });
        }
Esempio n. 4
0
        public async Task <CharacterModifier> AddModifiersAsync(NaheulbookExecutionContext executionContext, int characterId, AddCharacterModifierRequest request)
        {
            using (var uow = _unitOfWorkFactory.CreateUnitOfWork())
            {
                var character = await uow.Characters.GetWithGroupAsync(characterId);

                if (character == null)
                {
                    throw new CharacterNotFoundException(characterId);
                }

                _authorizationUtil.EnsureCharacterAccess(executionContext, character);

                var characterModifier = _mapper.Map <CharacterModifier>(request);
                characterModifier.Character = character;

                uow.CharacterModifiers.Add(characterModifier);
                uow.CharacterHistoryEntries.Add(_characterHistoryUtil.CreateLogAddModifier(character, characterModifier));

                await uow.SaveChangesAsync();

                var session = _notificationSessionFactory.CreateSession();
                session.NotifyCharacterAddModifier(characterId, characterModifier);
                await session.CommitAsync();

                return(characterModifier);
            }
        }