public async Task CreateItemTemplate_AddANewItemTemplateInDatabase_AndReturnFullyLoadedOne() { var itemTemplateId = Guid.NewGuid(); var newItemTemplateEntity = new ItemTemplate { Id = itemTemplateId }; var fullyLoadedItemTemplate = new ItemTemplate { Id = itemTemplateId }; var createItemTemplateRequest = new ItemTemplateRequest(); _mapper.Map <ItemTemplate>(createItemTemplateRequest) .Returns(newItemTemplateEntity); _unitOfWorkFactory.GetUnitOfWork().ItemTemplates.GetWithModifiersWithRequirementsWithSkillsWithSkillModifiersWithSlotsWithUnSkillsAsync(itemTemplateId) .Returns(fullyLoadedItemTemplate); var actualItemTemplate = await _service.CreateItemTemplateAsync(new NaheulbookExecutionContext(), createItemTemplateRequest); var itemTemplateRepository = _unitOfWorkFactory.GetUnitOfWork().ItemTemplates; Received.InOrder(() => { itemTemplateRepository.Add(newItemTemplateEntity); _unitOfWorkFactory.GetUnitOfWork().SaveChangesAsync(); }); actualItemTemplate.Should().Be(fullyLoadedItemTemplate); }
public void ApplyChangesFromRequest_ChangeBasicInfo() { var itemTemplate = new ItemTemplate { Name = "some-name", Data = @"{""key"": ""value""}", Source = "some-source", TechName = "some-tech-name", SubCategoryId = 1 }; var request = new ItemTemplateRequest { Name = "some-new-name", Data = JObject.FromObject(new { newKey = "newValue" }), Source = "some-new-source", TechName = "some-new-tech-name", SubCategoryId = 2 }; _util.ApplyChangesFromRequest(itemTemplate, request); itemTemplate.Name.Should().BeEquivalentTo("some-new-name"); itemTemplate.Data.Should().Be(@"{""newKey"":""newValue""}"); itemTemplate.Source.Should().Be("some-new-source"); itemTemplate.TechName.Should().Be("some-new-tech-name"); itemTemplate.SubCategoryId.Should().Be(2); }
public async Task <ActionResult <ItemTemplateResponse> > PutItemTemplateAsync( [FromServices] NaheulbookExecutionContext executionContext, [FromRoute] Guid itemTemplateId, ItemTemplateRequest request ) { try { var itemTemplate = await _itemTemplateService.EditItemTemplateAsync( executionContext, itemTemplateId, request ); return(_mapper.Map <ItemTemplateResponse>(itemTemplate)); } catch (ItemTemplateNotFoundException ex) { throw new HttpErrorException(StatusCodes.Status404NotFound, ex); } catch (ForbiddenAccessException ex) { throw new HttpErrorException(StatusCodes.Status403Forbidden, ex); } }
public void ApplyChangesFromRequest_UpdateRequirements() { var itemTemplate = new ItemTemplate { Requirements = new List <ItemTemplateRequirement> { new ItemTemplateRequirement { Id = 1, StatName = "some-stat-name-1", MinValue = 2, MaxValue = 3 }, new ItemTemplateRequirement { Id = 2, StatName = "some-stat-name-2", MinValue = 4, MaxValue = 7 } } }; var request = new ItemTemplateRequest { Requirements = new List <ItemTemplateRequirementRequest> { new ItemTemplateRequirementRequest { Stat = "some-stat-name-2", Min = 3, Max = 8 }, new ItemTemplateRequirementRequest { Stat = "some-stat-name-3", Min = 4, Max = 12 } } }; _util.ApplyChangesFromRequest(itemTemplate, request); itemTemplate.Requirements.Should().BeEquivalentTo( new ItemTemplateRequirement { StatName = "some-stat-name-2", MinValue = 3, MaxValue = 8 }, new ItemTemplateRequirement { StatName = "some-stat-name-3", MinValue = 4, MaxValue = 12 } ); }
public void ApplyChangesFromRequest_UpdateSkills() { var itemTemplate = new ItemTemplate { Skills = new List <ItemTemplateSkill> { new ItemTemplateSkill { SkillId = new Guid("00000000-0000-0000-0000-000000000001") }, new ItemTemplateSkill { SkillId = new Guid("00000000-0000-0000-0000-000000000002") } }, UnSkills = new List <ItemTemplateUnSkill> { new ItemTemplateUnSkill { SkillId = new Guid("00000000-0000-0000-0000-000000000003") }, new ItemTemplateUnSkill { SkillId = new Guid("00000000-0000-0000-0000-000000000004") } } }; var request = new ItemTemplateRequest { SkillIds = new List <Guid> { new Guid("00000000-0000-0000-0000-000000000004"), new Guid("00000000-0000-0000-0000-000000000005") }, UnSkillIds = new List <Guid> { new Guid("00000000-0000-0000-0000-000000000006"), new Guid("00000000-0000-0000-0000-000000000007") } }; _util.ApplyChangesFromRequest(itemTemplate, request); itemTemplate.Skills.Should().BeEquivalentTo( new ItemTemplateSkill { SkillId = new Guid("00000000-0000-0000-0000-000000000004") }, new ItemTemplateSkill { SkillId = new Guid("00000000-0000-0000-0000-000000000005") } ); itemTemplate.UnSkills.Should().BeEquivalentTo( new ItemTemplateSkill { SkillId = new Guid("00000000-0000-0000-0000-000000000006") }, new ItemTemplateSkill { SkillId = new Guid("00000000-0000-0000-0000-000000000007") } ); }
public async Task CreateItemTemplate_EnsureThatUserIsAdmin_IfSourceIsOfficial_BeforeAddingInDatabase() { var executionContext = new NaheulbookExecutionContext(); var createItemTemplateRequest = new ItemTemplateRequest { Source = "official" }; _authorizationUtil.EnsureAdminAccessAsync(executionContext) .Throws(new TestException()); Func <Task <ItemTemplate> > act = () => _service.CreateItemTemplateAsync(executionContext, createItemTemplateRequest); act.Should().Throw <TestException>(); await _unitOfWorkFactory.GetUnitOfWork().DidNotReceive().SaveChangesAsync(); }
public void ApplyChangesFromRequest_UpdateSlotList() { var slot1 = CreateSlot(1); var slot2 = CreateSlot(1); var itemTemplate = new ItemTemplate { Slots = new List <ItemTemplateSlot> { new ItemTemplateSlot { SlotId = 1, Slot = slot1 }, new ItemTemplateSlot { SlotId = 2, Slot = slot2 } } }; var request = new ItemTemplateRequest { Slots = new List <IdRequest> { new IdRequest { Id = 2 }, new IdRequest { Id = 3 }, } }; _util.ApplyChangesFromRequest(itemTemplate, request); itemTemplate.Slots.Should().BeEquivalentTo( new ItemTemplateSlot { SlotId = 2 }, new ItemTemplateSlot { SlotId = 3 } ); }
public async Task PutItemTemplateAsync_CallServiceToEditItem_AndMapEditedItemIntoResponse() { var itemTemplateId = Guid.NewGuid(); var itemTemplate = new ItemTemplate(); var itemTemplateRequest = new ItemTemplateRequest(); var itemTemplateResponse = new ItemTemplateResponse(); _itemTemplateService.EditItemTemplateAsync(_executionContext, itemTemplateId, itemTemplateRequest) .Returns(itemTemplate); _mapper.Map <ItemTemplateResponse>(itemTemplate) .Returns(itemTemplateResponse); var result = await _itemTemplatesController.PutItemTemplateAsync(_executionContext, itemTemplateId, itemTemplateRequest); result.Value.Should().Be(itemTemplateResponse); }
public void ApplyChangesFromRequest_UpdateCleanName() { var itemTemplate = new ItemTemplate { Name = "some-name" }; var request = new ItemTemplateRequest { Name = "some-new-name" }; _stringCleanupUtil.RemoveAccents("some-new-name") .Returns("some-new-clean-name"); _util.ApplyChangesFromRequest(itemTemplate, request); itemTemplate.CleanName.Should().BeEquivalentTo("some-new-clean-name"); }
public async Task PostCreateItemTemplate_CallItemService() { var itemTemplateRequest = new ItemTemplateRequest(); var itemTemplate = new ItemTemplate(); var itemTemplateResponse = new ItemTemplateResponse(); _itemTemplateService.CreateItemTemplateAsync(_executionContext, itemTemplateRequest) .Returns(itemTemplate); _mapper.Map <ItemTemplateResponse>(itemTemplate) .Returns(itemTemplateResponse); var result = await _itemTemplatesController.PostCreateItemTemplateAsync(_executionContext, itemTemplateRequest); result.StatusCode.Should().Be(201); result.Value.Should().Be(itemTemplateResponse); }
public void ApplyChangesFromRequest(ItemTemplate itemTemplate, ItemTemplateRequest request) { itemTemplate.Name = request.Name; itemTemplate.TechName = request.TechName; itemTemplate.Source = request.Source; itemTemplate.SubCategoryId = request.SubCategoryId; itemTemplate.Data = JsonConvert.SerializeObject(request.Data, Formatting.None); itemTemplate.CleanName = _stringCleanupUtil.RemoveAccents(request.Name); itemTemplate.Slots = request.Slots?.Select(x => new ItemTemplateSlot { SlotId = x.Id }).ToList() ?? new List <ItemTemplateSlot>(); itemTemplate.Requirements = request.Requirements?.Select(x => new ItemTemplateRequirement { StatName = x.Stat, MaxValue = x.Max, MinValue = x.Min }).ToList() ?? new List <ItemTemplateRequirement>(); itemTemplate.Modifiers = request.Modifiers?.Select(x => new ItemTemplateModifier { StatName = x.Stat, RequiredJobId = x.JobId, RequiredOriginId = x.OriginId, Value = x.Value, Type = x.Type, Special = x.Special == null ? "" : string.Join(',', x.Special) }).ToList() ?? new List <ItemTemplateModifier>(); itemTemplate.Skills = request.SkillIds?.Select(skillId => new ItemTemplateSkill { SkillId = skillId }).ToList() ?? new List <ItemTemplateSkill>(); itemTemplate.UnSkills = request.UnSkillIds?.Select(skillId => new ItemTemplateUnSkill { SkillId = skillId }).ToList() ?? new List <ItemTemplateUnSkill>(); itemTemplate.SkillModifiers = request.SkillModifiers?.Select(x => new ItemTemplateSkillModifier { SkillId = x.SkillId, Value = x.Value }).ToList() ?? new List <ItemTemplateSkillModifier>(); }
public async Task EditItemTemplateAsync_LoadEntityWithRelatedStuff_ThenApplyChangesFromRequest_ThenSave() { var itemTemplateId = Guid.NewGuid(); var itemTemplateRequest = new ItemTemplateRequest(); var fullyLoadedItemTemplate = new ItemTemplate { Id = itemTemplateId }; _unitOfWorkFactory.GetUnitOfWork().ItemTemplates.GetWithModifiersWithRequirementsWithSkillsWithSkillModifiersWithSlotsWithUnSkillsAsync(itemTemplateId) .Returns(fullyLoadedItemTemplate); await _service.EditItemTemplateAsync(new NaheulbookExecutionContext(), itemTemplateId, itemTemplateRequest); Received.InOrder(() => { _itemTemplateUtil.ApplyChangesFromRequest(fullyLoadedItemTemplate, itemTemplateRequest); _unitOfWorkFactory.GetUnitOfWork().SaveChangesAsync(); }); }
public async Task EditItemTemplateAsync_ShouldSetNullSourceUserId_IfSourceIsOfficial() { var itemTemplateId = Guid.NewGuid(); var itemTemplateRequest = new ItemTemplateRequest { Source = "official" }; var fullyLoadedItemTemplate = new ItemTemplate { Id = itemTemplateId }; var naheulbookExecutionContext = new NaheulbookExecutionContext(); _unitOfWorkFactory.GetUnitOfWork().ItemTemplates.GetWithModifiersWithRequirementsWithSkillsWithSkillModifiersWithSlotsWithUnSkillsAsync(itemTemplateId) .Returns(fullyLoadedItemTemplate); _unitOfWorkFactory.GetUnitOfWork().When(x => x.SaveChangesAsync()) .Do(_ => fullyLoadedItemTemplate.SourceUserId.Should().BeNull()); await _service.EditItemTemplateAsync(naheulbookExecutionContext, itemTemplateId, itemTemplateRequest); await _unitOfWorkFactory.GetUnitOfWork().Received(1).SaveChangesAsync(); }
public async Task <JsonResult> PostCreateItemTemplateAsync( [FromServices] NaheulbookExecutionContext executionContext, ItemTemplateRequest request ) { try { var itemTemplate = await _itemTemplateService.CreateItemTemplateAsync(executionContext, request); var itemTemplateResponse = _mapper.Map <ItemTemplateResponse>(itemTemplate); return(new JsonResult(itemTemplateResponse) { StatusCode = StatusCodes.Status201Created }); } catch (ForbiddenAccessException ex) { throw new HttpErrorException(StatusCodes.Status403Forbidden, ex); } }
public async Task CreateItemTemplate_SetSourceUserIdForNonOfficialItem() { var itemTemplateId = Guid.NewGuid(); var executionContext = new NaheulbookExecutionContext { UserId = 42 }; var createItemTemplateRequest = new ItemTemplateRequest { Source = "non-official" }; var newItemTemplateEntity = new ItemTemplate { Id = itemTemplateId }; _mapper.Map <ItemTemplate>(createItemTemplateRequest) .Returns(newItemTemplateEntity); _unitOfWorkFactory.GetUnitOfWork().When(x => x.SaveChangesAsync()) .Do(_ => newItemTemplateEntity.SourceUserId.Should().Be(42)); await _service.CreateItemTemplateAsync(executionContext, createItemTemplateRequest); await _unitOfWorkFactory.GetUnitOfWork().Received(1).SaveChangesAsync(); }
public void ApplyChangesFromRequest_UpdateSkillModifiers() { var itemTemplate = new ItemTemplate { SkillModifiers = new List <ItemTemplateSkillModifier> { new ItemTemplateSkillModifier { SkillId = new Guid("00000000-0000-0000-0000-000000000001"), Value = 1 }, new ItemTemplateSkillModifier { SkillId = new Guid("00000000-0000-0000-0000-000000000002"), Value = 2 } } }; var request = new ItemTemplateRequest { SkillModifiers = new List <ItemTemplateSkillModifierRequest> { new ItemTemplateSkillModifierRequest { SkillId = new Guid("00000000-0000-0000-0000-000000000004"), Value = 3 }, new ItemTemplateSkillModifierRequest { SkillId = new Guid("00000000-0000-0000-0000-000000000005"), Value = 4 }, } }; _util.ApplyChangesFromRequest(itemTemplate, request); itemTemplate.SkillModifiers.Should().BeEquivalentTo( new ItemTemplateSkillModifier { SkillId = new Guid("00000000-0000-0000-0000-000000000004"), Value = 3 }, new ItemTemplateSkillModifier { SkillId = new Guid("00000000-0000-0000-0000-000000000005"), Value = 4 } ); }
public void EditItemTemplateAsync_CheckPermissionBeforeChangingSourceOfAnItemToAdmin() { var itemTemplateId = Guid.NewGuid(); var executionContext = new NaheulbookExecutionContext(); var request = new ItemTemplateRequest { Source = "official" }; var fullyLoadedItemTemplate = new ItemTemplate { Id = itemTemplateId, Source = "private" }; _unitOfWorkFactory.GetUnitOfWork().ItemTemplates.GetWithModifiersWithRequirementsWithSkillsWithSkillModifiersWithSlotsWithUnSkillsAsync(itemTemplateId) .Returns(fullyLoadedItemTemplate); _authorizationUtil.EnsureAdminAccessAsync(executionContext) .Returns(Task.FromException(new TestException())); Func <Task <ItemTemplate> > act = () => _service.EditItemTemplateAsync(executionContext, itemTemplateId, request); using (new AssertionScope()) { act.Should().Throw <TestException>(); _unitOfWorkFactory.GetUnitOfWork().DidNotReceive().SaveChangesAsync(); } }
public void ApplyChangesFromRequest_UpdateModiifers() { var itemTemplate = new ItemTemplate { Modifiers = new List <ItemTemplateModifier> { new ItemTemplateModifier { Id = 1, StatName = "some-stat-name-1", Value = 2, Special = "some-special-1" }, new ItemTemplateModifier { Id = 2, StatName = "some-stat-name-2", Value = 3, Special = "some-special-2", } } }; var request = new ItemTemplateRequest { Modifiers = new List <ItemTemplateModifierRequest> { new ItemTemplateModifierRequest { Stat = "some-stat-name-2", JobId = new Guid("00000000-0000-0000-0000-000000000011"), Type = "ADD", Value = 3 }, new ItemTemplateModifierRequest { Stat = "some-stat-name-3", OriginId = new Guid("00000000-0000-0000-0000-000000000001"), Type = "ADD", Value = 3, Special = new List <string> { "some-special-3" } } } }; _util.ApplyChangesFromRequest(itemTemplate, request); itemTemplate.Modifiers.Should().BeEquivalentTo( new ItemTemplateModifier { StatName = "some-stat-name-2", RequiredJobId = new Guid("00000000-0000-0000-0000-000000000011"), Type = "ADD", Value = 3, Special = "" }, new ItemTemplateModifier { StatName = "some-stat-name-3", RequiredOriginId = new Guid("00000000-0000-0000-0000-000000000001"), Type = "ADD", Value = 3, Special = "some-special-3" } ); }
public async Task <ItemTemplate> EditItemTemplateAsync(NaheulbookExecutionContext executionContext, Guid itemTemplateId, ItemTemplateRequest request) { using (var uow = _unitOfWorkFactory.CreateUnitOfWork()) { var itemTemplate = await uow.ItemTemplates.GetWithModifiersWithRequirementsWithSkillsWithSkillModifiersWithSlotsWithUnSkillsAsync(itemTemplateId); if (itemTemplate == null) { throw new ItemTemplateNotFoundException(itemTemplateId); } await _authorizationUtil.EnsureCanEditItemTemplateAsync(executionContext, itemTemplate); if (itemTemplate.Source != request.Source) { if (request.Source == "official") { await _authorizationUtil.EnsureAdminAccessAsync(executionContext); itemTemplate.SourceUserId = null; } else { itemTemplate.SourceUserId = executionContext.UserId; } } _itemTemplateUtil.ApplyChangesFromRequest(itemTemplate, request); await uow.SaveChangesAsync(); return((await uow.ItemTemplates.GetWithModifiersWithRequirementsWithSkillsWithSkillModifiersWithSlotsWithUnSkillsAsync(itemTemplateId)) !); } }
public async Task <ItemTemplate> CreateItemTemplateAsync(NaheulbookExecutionContext executionContext, ItemTemplateRequest request) { if (request.Source == "official") { await _authorizationUtil.EnsureAdminAccessAsync(executionContext); } var itemTemplate = _mapper.Map <ItemTemplate>(request); if (request.Source != "official") { itemTemplate.SourceUserId = executionContext.UserId; } using (var uow = _unitOfWorkFactory.CreateUnitOfWork()) { uow.ItemTemplates.Add(itemTemplate); await uow.SaveChangesAsync(); itemTemplate = (await uow.ItemTemplates.GetWithModifiersWithRequirementsWithSkillsWithSkillModifiersWithSlotsWithUnSkillsAsync(itemTemplate.Id)) !; } return(itemTemplate); }