Esempio n. 1
0
        public async Task CreateMonsterAsync_ShouldCreateNewEntryInDatabase_AndLinkItToGroup()
        {
            const int groupId          = 42;
            var       request          = CreateRequest();
            var       executionContext = new NaheulbookExecutionContext();
            var       group            = new Group {
                Id = groupId
            };

            _unitOfWorkFactory.GetUnitOfWork().Groups.GetAsync(groupId)
            .Returns(group);
            _jsonUtil.Serialize(request.Data)
            .Returns("some-json-data");
            _jsonUtil.Serialize(request.Modifiers)
            .Returns("some-json-modifiers");

            var actualMonster = await _service.CreateMonsterAsync(executionContext, groupId, request);

            Received.InOrder(() =>
            {
                _activeStatsModifierUtil.InitializeModifierIds(request.Modifiers);
                _unitOfWorkFactory.GetUnitOfWork().Monsters.Add(actualMonster);
                _unitOfWorkFactory.GetUnitOfWork().SaveChangesAsync();
            });

            actualMonster.Should().BeEquivalentTo(new Monster
            {
                Name      = "some-monster-name",
                Data      = "some-json-data",
                Modifiers = "some-json-modifiers",
                Group     = group
            });
        }
        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);
            }
        }