public async Task CreateLootAsync_CreateALootInDb_AndReturnIt() { const int groupId = 42; var createLootRequest = new CreateLootRequest { Name = "some-name" }; var naheulbookExecutionContext = new NaheulbookExecutionContext(); var group = new Group { Id = groupId }; _unitOfWorkFactory.GetUnitOfWork().Groups.GetAsync(groupId) .Returns(group); var actualLoot = await _service.CreateLootAsync(naheulbookExecutionContext, groupId, createLootRequest); Received.InOrder(() => { _unitOfWorkFactory.GetUnitOfWork().Loots.Add(actualLoot); _unitOfWorkFactory.GetUnitOfWork().SaveChangesAsync(); }); actualLoot.Name.Should().Be("some-name"); actualLoot.Group.Should().BeSameAs(group); }
public void PostCreateLootAsync_ShouldReturnExpectedHttpStatusCodeOnKnownErrors(Exception exception, int expectedStatusCode) { const int groupId = 8; var createLootRequest = new CreateLootRequest(); _lootService.CreateLootAsync(_executionContext, groupId, createLootRequest) .Returns(Task.FromException <Loot>(exception)); Func <Task> act = () => _controller.PostCreateLootAsync(_executionContext, groupId, createLootRequest); act.Should().Throw <HttpErrorException>().Which.StatusCode.Should().Be(expectedStatusCode); }
public async Task PostCreateLootAsync_ShouldCreateLoot_ThenReturnLootResponse() { const int groupId = 8; var createLootRequest = new CreateLootRequest(); var createdLoot = new Loot(); var lootResponse = new LootResponse(); _lootService.CreateLootAsync(_executionContext, groupId, createLootRequest) .Returns(createdLoot); _mapper.Map <LootResponse>(createdLoot) .Returns(lootResponse); var result = await _controller.PostCreateLootAsync(_executionContext, groupId, createLootRequest); result.Value.Should().BeSameAs(lootResponse); result.StatusCode.Should().Be(StatusCodes.Status201Created); }
public async Task <CreatedActionResult <LootResponse> > PostCreateLootAsync( [FromServices] NaheulbookExecutionContext executionContext, [FromRoute] int groupId, CreateLootRequest request ) { try { var loot = await _lootService.CreateLootAsync(executionContext, groupId, request); return(_mapper.Map <LootResponse>(loot)); } catch (ForbiddenAccessException ex) { throw new HttpErrorException(StatusCodes.Status403Forbidden, ex); } catch (GroupNotFoundException ex) { throw new HttpErrorException(StatusCodes.Status404NotFound, ex); } }
public async Task <Loot> CreateLootAsync(NaheulbookExecutionContext executionContext, int groupId, CreateLootRequest request) { using (var uow = _unitOfWorkFactory.CreateUnitOfWork()) { var group = await uow.Groups.GetAsync(groupId); if (group == null) { throw new GroupNotFoundException(groupId); } _authorizationUtil.EnsureIsGroupOwner(executionContext, group); var loot = new Loot { Group = group, Name = request.Name, IsVisibleForPlayer = false }; uow.Loots.Add(loot); await uow.SaveChangesAsync(); return(loot); } }