public async Task PutEditEffect_CallEffectService()
        {
            var editEffectRequest      = new EditEffectRequest();
            var expectedEffectResponse = new EffectResponse();
            var effect = new Effect {
                Id = 42
            };

            _effectService.EditEffectAsync(_executionContext, 42, editEffectRequest)
            .Returns(effect);
            _mapper.Map <EffectResponse>(effect)
            .Returns(expectedEffectResponse);

            var result = await _effectsController.PutEditEffectAsync(_executionContext, 42, editEffectRequest);

            result.Value.Should().Be(expectedEffectResponse);
            await _effectService.Received(1)
            .EditEffectAsync(_executionContext, 42, editEffectRequest);
        }
        public async Task <ActionResult <EffectResponse> > PutEditEffectAsync(
            [FromServices] NaheulbookExecutionContext executionContext,
            [FromRoute] int effectId,
            EditEffectRequest request
            )
        {
            try
            {
                var effect = await _effectService.EditEffectAsync(executionContext, effectId, request);

                var effectResponse = _mapper.Map <EffectResponse>(effect);
                return(effectResponse);
            }
            catch (ForbiddenAccessException ex)
            {
                throw new HttpErrorException(StatusCodes.Status403Forbidden, ex);
            }
            catch (EffectNotFoundException ex)
            {
                throw new HttpErrorException(StatusCodes.Status404NotFound, ex);
            }
        }
        public async Task <Effect> EditEffectAsync(NaheulbookExecutionContext executionContext, int effectId, EditEffectRequest request)
        {
            await _authorizationUtil.EnsureAdminAccessAsync(executionContext);

            using (var uow = _unitOfWorkFactory.CreateUnitOfWork())
            {
                var effect = await uow.Effects.GetWithModifiersAsync(effectId);

                if (effect == null)
                {
                    throw new EffectNotFoundException();
                }

                effect.Name          = request.Name;
                effect.SubCategoryId = request.SubCategoryId;
                effect.Description   = request.Description;
                effect.Dice          = request.Dice;
                effect.TimeDuration  = request.TimeDuration;
                effect.CombatCount   = request.CombatCount;
                effect.Duration      = request.Duration;
                effect.LapCount      = request.LapCount;
                effect.DurationType  = request.DurationType;
                effect.Modifiers     = request.Modifiers.Select(s => new EffectModifier
                {
                    StatName = s.Stat, Type = s.Type, Value = s.Value
                }).ToList();

                await uow.SaveChangesAsync();

                return(effect);
            }
        }