public async Task CreateMonsterTemplate_InsertNewEntityInDatabase()
        {
            const int subCategoryId  = 10;
            const int locationId     = 12;
            var       itemTemplateId = Guid.NewGuid();

            var executionContext   = new NaheulbookExecutionContext();
            var monsterSubCategory = CreateMonsterSubCategory(subCategoryId);
            var request            = CreateRequest(subCategoryId, itemTemplateId, locationId);
            var itemTemplate       = new ItemTemplate {
                Id = itemTemplateId
            };
            var expectedMonsterTemplate = CreateMonsterTemplate(monsterSubCategory, itemTemplate);

            _unitOfWorkFactory.GetUnitOfWork().MonsterSubCategories.GetAsync(subCategoryId)
            .Returns(monsterSubCategory);
            _unitOfWorkFactory.GetUnitOfWork().ItemTemplates.GetByIdsAsync(Arg.Is <IEnumerable <Guid> >(x => x.SequenceEqual(new[] { itemTemplateId })))
            .Returns(new List <ItemTemplate> {
                itemTemplate
            });

            var monsterTemplate = await _service.CreateMonsterTemplateAsync(executionContext, request);

            var monsterTemplateRepository = _unitOfWorkFactory.GetUnitOfWork().MonsterTemplates;

            Received.InOrder(() =>
            {
                monsterTemplateRepository.Add(monsterTemplate);
                _unitOfWorkFactory.GetUnitOfWork().Received(1).SaveChangesAsync();
            });
            monsterTemplate.Should().BeEquivalentTo(expectedMonsterTemplate);
        }
예제 #2
0
        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 async Task CreateItemTemplateSection_AddANewItemTemplateSectionInDatabase()
        {
            var expectedItemTemplateSection      = CreateItemTemplateSection();
            var createItemTemplateSectionRequest = AutoFill <CreateItemTemplateSectionRequest> .One(settings : new AutoFillSettings {
                MaxDepth = 0
            });

            var itemTemplateSection = await _service.CreateItemTemplateSectionAsync(new NaheulbookExecutionContext(), createItemTemplateSectionRequest);

            var itemTemplateSectionRepository = _unitOfWorkFactory.GetUnitOfWork().ItemTemplateSections;

            Received.InOrder(() =>
            {
                itemTemplateSectionRepository.Add(itemTemplateSection);
                _unitOfWorkFactory.GetUnitOfWork().SaveChangesAsync();
            });
            itemTemplateSection.Should().BeEquivalentTo(expectedItemTemplateSection);
        }
        public async Task GetEventsForGroupAsync_ShouldLoadEventsListAndReturnIt()
        {
            const int groupId          = 42;
            var       executionContext = new NaheulbookExecutionContext();
            var       group            = new Group {
                Id = groupId
            };
            var expectedEvents = new List <Event>();

            _unitOfWorkFactory.GetUnitOfWork().Groups.GetAsync(groupId)
            .Returns(group);
            _unitOfWorkFactory.GetUnitOfWork().Events.GetByGroupIdAsync(groupId)
            .Returns(expectedEvents);

            var events = await _service.GetEventsForGroupAsync(executionContext, groupId);

            events.Should().BeSameAs(expectedEvents);
        }
예제 #5
0
        public async Task WhenCreatingUser_CreateUserInDatabase_AndHashPassword()
        {
            _passwordHashingService.HashPassword(SomePassword)
            .Returns(SomeEncryptedPassword);

            await _service.CreateUserAsync(SomeUsername, SomePassword);


            var userRepository = _unitOfWorkFactory.GetUnitOfWork().Users;

            Received.InOrder(() =>
            {
                userRepository.Add(Arg.Is <User>(u =>
                                                 u.Username == SomeUsername &&
                                                 u.HashedPassword == SomeEncryptedPassword &&
                                                 !string.IsNullOrEmpty(u.ActivationCode))
                                   );
                _unitOfWorkFactory.GetUnitOfWork().SaveChangesAsync();
            });
        }
예제 #6
0
        public async Task CreateGroupAsync_CreateANewGroupInDatabase_SettingMasterToCurrentUserId()
        {
            var createGroupRequest = new CreateGroupRequest {
                Name = "some-name"
            };
            var naheulbookExecutionContext = new NaheulbookExecutionContext {
                UserId = 10
            };

            var actualGroup = await _service.CreateGroupAsync(naheulbookExecutionContext, createGroupRequest);

            Received.InOrder(() =>
            {
                _unitOfWorkFactory.GetUnitOfWork().Groups.Add(actualGroup);
                _unitOfWorkFactory.GetUnitOfWork().SaveChangesAsync();
            });

            actualGroup.Name.Should().Be("some-name");
            actualGroup.MasterId.Should().Be(10);
        }
        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);
        }
예제 #8
0
        public async Task GetItemTemplateAsync_LoadItemTemplateFromDbWithFullData_AndReturnsIt()
        {
            var itemTemplateId       = Guid.NewGuid();
            var expectedItemTemplate = new ItemTemplate();

            _unitOfWorkFactory.GetUnitOfWork().ItemTemplates.GetWithModifiersWithRequirementsWithSkillsWithSkillModifiersWithSlotsWithUnSkillsAsync(itemTemplateId)
            .Returns(expectedItemTemplate);

            var itemTemplate = await _service.GetItemTemplateAsync(itemTemplateId);

            itemTemplate.Should().Be(expectedItemTemplate);
        }
예제 #9
0
        public async Task AddItemToAsync_ShouldCreateAnItemInDatabase_ThenReturnsAFullyLoadedItem()
        {
            const int itemId         = 25;
            const int characterId    = 10;
            var       itemTemplateId = Guid.NewGuid();
            var       itemData       = new ItemData();
            var       itemTemplate   = new ItemTemplate();
            var       request        = new CreateItemRequest {
                ItemData = itemData, ItemTemplateId = itemTemplateId
            };
            var createdItem = new Item {
                Id = itemId
            };
            var fullyLoadedItem = new Item();

            _unitOfWorkFactory.GetUnitOfWork().ItemTemplates.GetAsync(itemTemplateId)
            .Returns(itemTemplate);
            _itemFactory.CreateItem(ItemOwnerType.Character, characterId, itemTemplate, itemData)
            .Returns(createdItem);
            _unitOfWorkFactory.GetUnitOfWork().Items.GetWithAllDataAsync(itemId)
            .Returns(fullyLoadedItem);

            var actualItem = await _service.AddItemToAsync(ItemOwnerType.Character, characterId, request);

            Received.InOrder(() =>
            {
                _unitOfWorkFactory.GetUnitOfWork().Items.Add(createdItem);
                _unitOfWorkFactory.GetUnitOfWork().SaveChangesAsync();
            });
            actualItem.Should().BeSameAs(fullyLoadedItem);
        }
        public async Task GetOrCreateUserFromFacebookAsync_ShouldReturnAlreadyExistingUser()
        {
            const string facebookId   = "some-facebook-id";
            var          expectedUser = new User();

            _fakeUnitOfWorkFactory.GetUnitOfWork().Users.GetByFacebookIdAsync(facebookId)
            .Returns(expectedUser);

            var actual = await _service.GetOrCreateUserFromFacebookAsync("some-name", facebookId);

            actual.Should().BeSameAs(expectedUser);
            await _fakeUnitOfWorkFactory.GetUnitOfWork().DidNotReceive().SaveChangesAsync();
        }
예제 #11
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
            });
        }