Exemplo n.º 1
0
        public async Task <CreatedActionResult <MonsterResponse> > PostCreateMonsterAsync(
            [FromServices] NaheulbookExecutionContext executionContext,
            [FromRoute] int groupId,
            CreateMonsterRequest request
            )
        {
            try
            {
                var monster = await _monsterService.CreateMonsterAsync(executionContext, groupId, request);

                return(_mapper.Map <MonsterResponse>(monster));
            }
            catch (ForbiddenAccessException ex)
            {
                throw new HttpErrorException(StatusCodes.Status403Forbidden, ex);
            }
            catch (GroupNotFoundException ex)
            {
                throw new HttpErrorException(StatusCodes.Status404NotFound, ex);
            }
            catch (ItemTemplateNotFoundException ex)
            {
                throw new HttpErrorException(StatusCodes.Status400BadRequest, ex);
            }
        }
 public Monster For(CreateMonsterRequest request)
 {
     return(new Monster
     {
         Name = request.Name,
         Power = request.Power
     });
 }
Exemplo n.º 3
0
        public void PostCreateMonsterAsync_ShouldReturnExpectedHttpStatusCodeOnKnownErrors(Exception exception, int expectedStatusCode)
        {
            const int groupId = 8;
            var       createMonsterRequest = new CreateMonsterRequest();

            _monsterService.CreateMonsterAsync(_executionContext, groupId, createMonsterRequest)
            .Returns(Task.FromException <Monster>(exception));

            Func <Task> act = () => _controller.PostCreateMonsterAsync(_executionContext, groupId, createMonsterRequest);

            act.Should().Throw <HttpErrorException>().Which.StatusCode.Should().Be(expectedStatusCode);
        }
Exemplo n.º 4
0
        public async Task PostCreateMonsterAsync_ShouldCreateMonster_ThenReturnMonsterResponse()
        {
            const int groupId = 8;
            var       createMonsterRequest = new CreateMonsterRequest();
            var       createdMonster       = new Monster();
            var       monsterResponse      = new MonsterResponse();

            _monsterService.CreateMonsterAsync(_executionContext, groupId, createMonsterRequest)
            .Returns(createdMonster);
            _mapper.Map <MonsterResponse>(createdMonster)
            .Returns(monsterResponse);

            var result = await _controller.PostCreateMonsterAsync(_executionContext, groupId, createMonsterRequest);

            result.Value.Should().BeSameAs(monsterResponse);
            result.StatusCode.Should().Be(StatusCodes.Status201Created);
        }
Exemplo n.º 5
0
        public void Call_When_PowerIsBad()
        {
            Arrange(() => {});

            var result = Act(() =>
            {
                var request = new CreateMonsterRequest
                {
                    Name = "Rawrgnar"
                };
                return(SUT.Call(request));
            });

            Assert(() =>
            {
                result.Success.Should().BeFalse("Success was incorrect");
                result.Messages.Any(x => x.Contains("Power")).Should().BeTrue("It should have returned error messages");
            });
        }
Exemplo n.º 6
0
        public void Call_When_AllIsWell()
        {
            Arrange(() => {});

            var result = Act(() =>
            {
                var request = new CreateMonsterRequest
                {
                    Name  = "Rawrgnar",
                    Power = 99
                };
                return(SUT.Call(request));
            });

            Assert(() =>
            {
                result.Success.Should().BeTrue("Success was incorrect");
                result.Result.Id.Should().NotBe(default(int), "Id was not assigned");
                result.Result.Name.Should().Be("Rawrgnar", "Name was incorrect");
                result.Result.Power.Should().Be(99, "Power was incorrect");
            });
        }
        public JsonResult AddMonster([FromBody] CreateMonsterRequest request)
        {
            var result = _createMonster.Call(request);

            return(Result(HttpStatusCode.OK, result));
        }
Exemplo n.º 8
0
        public async Task <Monster> CreateMonsterAsync(NaheulbookExecutionContext executionContext, int groupId, CreateMonsterRequest request)
        {
            using (var uow = _unitOfWorkFactory.CreateUnitOfWork())
            {
                var group = await uow.Groups.GetAsync(groupId);

                if (group == null)
                {
                    throw new GroupNotFoundException(groupId);
                }

                _authorizationUtil.EnsureIsGroupOwner(executionContext, group);

                _activeStatsModifierUtil.InitializeModifierIds(request.Modifiers);

                var monster = new Monster
                {
                    Group     = group,
                    Name      = request.Name,
                    Data      = _jsonUtil.Serialize(request.Data),
                    Modifiers = _jsonUtil.Serialize(request.Modifiers)
                };

                // FIXME: test this
                uow.Monsters.Add(monster);
                monster.Items = await _itemService.CreateItemsAsync(request.Items);

                await uow.SaveChangesAsync();

                monster.Items = await uow.Items.GetWithAllDataByIdsAsync(monster.Items.Select(x => x.Id));

                var notificationSession = _notificationSessionFactory.CreateSession();
                notificationSession.NotifyGroupAddMonster(group.Id, monster);
                await notificationSession.CommitAsync();

                return(monster);
            }
        }