Example #1
0
        public async Task <Item> AddItemToCharacterAsync(NaheulbookExecutionContext executionContext, int characterId, CreateItemRequest 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 item = await _itemService.AddItemToAsync(ItemOwnerType.Character, characterId, request);

            using (var uow = _unitOfWorkFactory.CreateUnitOfWork())
            {
                uow.CharacterHistoryEntries.Add(_characterHistoryUtil.CreateLogAddItem(characterId, item));
                await uow.SaveChangesAsync();
            }

            var session = _notificationSessionFactory.CreateSession();

            session.NotifyCharacterAddItem(characterId, item);
            await session.CommitAsync();

            return(item);
        }
        public async Task AddItemToCharacterAsync_ShouldAddACharacterHistoryEntry()
        {
            const int characterId = 4;
            var       item        = new Item();
            var       expectedCharacterHistoryEntry = new CharacterHistoryEntry();

            _unitOfWorkFactory.GetUnitOfWork().Characters.GetWithGroupAsync(Arg.Any <int>())
            .Returns(new Character {
                Id = characterId
            });
            _itemService.AddItemToAsync(Arg.Any <ItemOwnerType>(), Arg.Any <int>(), Arg.Any <CreateItemRequest>())
            .Returns(item);
            _characterHistoryUtil.CreateLogAddItem(characterId, item)
            .Returns(expectedCharacterHistoryEntry);

            await _service.AddItemToCharacterAsync(new NaheulbookExecutionContext(), characterId, new CreateItemRequest());

            Received.InOrder(() =>
            {
                _unitOfWorkFactory.GetUnitOfWork(1).CharacterHistoryEntries.Add(expectedCharacterHistoryEntry);
                _unitOfWorkFactory.GetUnitOfWork(1).SaveChangesAsync();
            });
        }