public async Task CreateCharacterAsync_CreateANewCharacterInDatabase_SettingOwnerToCurrentUserId()
        {
            const int userId = 10;
            var       createCharacterRequest = new CreateCharacterRequest {
                Name = "some-name"
            };
            var naheulbookExecutionContext = new NaheulbookExecutionContext {
                UserId = userId
            };
            var createdCharacter = new Character();
            var initialInventory = new List <Item>();

            _characterFactory.CreateCharacter(createCharacterRequest)
            .Returns(createdCharacter);
            _itemUtil.CreateInitialPlayerInventoryAsync(createCharacterRequest.Money)
            .Returns(initialInventory);

            var actualCharacter = await _service.CreateCharacterAsync(naheulbookExecutionContext, createCharacterRequest);

            Received.InOrder(() =>
            {
                _unitOfWorkFactory.GetUnitOfWork().Characters.Add(createdCharacter);
                _unitOfWorkFactory.GetUnitOfWork().SaveChangesAsync();
            });

            actualCharacter.OwnerId.Should().Be(userId);
            createdCharacter.Should().BeSameAs(actualCharacter);
            createdCharacter.Items.Should().BeSameAs(initialInventory);
        }
Пример #2
0
        public async Task <Character> CreateCharacterAsync(NaheulbookExecutionContext executionContext, CreateCharacterRequest request)
        {
            using (var uow = _unitOfWorkFactory.CreateUnitOfWork())
            {
                var character = _characterFactory.CreateCharacter(request);

                if (request.GroupId.HasValue)
                {
                    var group = await uow.Groups.GetAsync(request.GroupId.Value);

                    if (group == null)
                    {
                        throw new GroupNotFoundException(request.GroupId.Value);
                    }
                    _authorizationUtil.EnsureIsGroupOwner(executionContext, group);
                    character.Group = group;
                }

                character.OwnerId = executionContext.UserId;
                character.Items   = await _itemUtil.CreateInitialPlayerInventoryAsync(request.Money);

                uow.Characters.Add(character);

                await uow.SaveChangesAsync();

                return(character);
            }
        }