public void savePropertyDescriptorWithTags(PropertyDescriptorEntity propDesc, List<String> tags, ResourceEntity resourceEntity, ForeignableOwner owner) throws AMWException { ResourceContextEntity resourceContext = resourceEntity.getOrCreateContext(globalContext); List<PropertyTagEntity> propertyTags = createPropertyTags(tags); descriptorService.savePropertyDescriptorForOwner(owner, resourceContext, propDesc, propertyTags, resourceEntity); }
private PropertyDescriptorEntity savePropertyDescriptorResourceType(ForeignableOwner editingOwner, Integer resourceTypeId, PropertyDescriptorEntity descriptor, String propertyTagsString) throws AMWException { ResourceTypeEntity attachedResourceType = entityManager.find(ResourceTypeEntity.class, resourceTypeId); ResourceTypeContextEntity resourceTypeContextEntity = attachedResourceType.getOrCreateContext(contextService.getGlobalResourceContextEntity()); return propertyDescriptorService.savePropertyDescriptorForOwner(editingOwner, resourceTypeContextEntity, descriptor, propertyTagEditingService.convertToTags(propertyTagsString), attachedResourceType); }
@Test(expected = AMWException.class) public void savePropertyDescriptorForOwnerWhenDescriptorIsNullShouldThrowException() throws AMWException { // given ForeignableOwner changingOwner = ForeignableOwner.AMW; AbstractContext abstractContextMock = mock(AbstractContext.class); PropertyDescriptorEntity descriptor = null; List<PropertyTagEntity> tags = new ArrayList<>(); ResourceEntity resourceEntityMock = mock(ResourceEntity.class); // when service.savePropertyDescriptorForOwner(changingOwner, abstractContextMock, descriptor, tags, resourceEntityMock); }
private PropertyDescriptorEntity savePropertyDescriptorResource(ForeignableOwner editingOwner, Integer resourceId, PropertyDescriptorEntity descriptor, String propertyTagsString) throws AMWException { ResourceEntity attachedResource = entityManager.find(ResourceEntity.class, Objects.requireNonNull(resourceId)); ResourceContextEntity resourceContext = attachedResource.getOrCreateContext(contextService.getGlobalResourceContextEntity()); ResourceTypeContextEntity resourceTypeContextEntity = attachedResource.getResourceType().getOrCreateContext(contextService.getGlobalResourceContextEntity()); List<String> duplicatePropertyDescriptorNames = propertyValidationService.getDuplicatePropertyDescriptors(resourceContext, resourceTypeContextEntity, descriptor); if (!duplicatePropertyDescriptorNames.isEmpty()) { throw new AMWException("Failure - duplicate propertydescriptors: " + duplicatePropertyDescriptorNames); } return propertyDescriptorService.savePropertyDescriptorForOwner(editingOwner, resourceContext, descriptor, propertyTagEditingService.convertToTags(propertyTagsString), attachedResource); }
@Test(expected = AMWException.class) public void savePropertyDescriptorForOwnerWhenTechnicalKeyIsInvalidShouldThrowException() throws AMWException { // given ForeignableOwner changingOwner = ForeignableOwner.AMW; AbstractContext abstractContextMock = mock(AbstractContext.class); PropertyDescriptorEntity descriptor = new PropertyDescriptorEntityBuilder().build(); List<PropertyTagEntity> tags = new ArrayList<>(); Assert.assertNull(descriptor.getId()); ResourceEntity resourceEntityMock = mock(ResourceEntity.class); when(propertyValidationServiceMock.isValidTechnicalKey(descriptor.getPropertyName())).thenReturn(false); // when service.savePropertyDescriptorForOwner(changingOwner, abstractContextMock, descriptor, tags, resourceEntityMock); }
@Test public void shouldStoreResourceIdInThreadLocalDuringPropertyDescriptorCreation() throws AMWException { // given ForeignableOwner changingOwner = ForeignableOwner.AMW; Integer expectedResourceId = 99; AbstractContext abstractContextMock = mock(AbstractContext.class); PropertyDescriptorEntity newDescriptor = new PropertyDescriptorEntityBuilder().build(); List<PropertyTagEntity> tags = new ArrayList<>(); ResourceEntity resourceEntityMock = mock(ResourceEntity.class); when(propertyValidationServiceMock.isValidTechnicalKey(newDescriptor.getPropertyName())).thenReturn(true); when(resourceEntityMock.getId()).thenReturn(expectedResourceId); // when service.savePropertyDescriptorForOwner(changingOwner, abstractContextMock, newDescriptor, tags, resourceEntityMock ); // then assertThat("The resourceId Param must be stored as ThreadLocal variable for auditing (envers)", ThreadLocalUtil.getThreadVariable(ThreadLocalUtil.KEY_RESOURCE_ID), is(CoreMatchers.notNullValue())); int actualResourceId = (int) ThreadLocalUtil.getThreadVariable(ThreadLocalUtil.KEY_RESOURCE_ID); assertThat(actualResourceId, is(expectedResourceId)); }
@Test public void shouldStoreResourceTypeIdInThreadLocalDuringPropertyDescriptorCreation() throws AMWException { // given ForeignableOwner changingOwner = ForeignableOwner.AMW; Integer resourceTypeId = 2; AbstractContext abstractContextMock = mock(AbstractContext.class); PropertyDescriptorEntity newDescriptor = new PropertyDescriptorEntityBuilder().build(); List<PropertyTagEntity> tags = new ArrayList<>(); ResourceTypeEntity resourceTypeEntityMock = mock(ResourceTypeEntity.class); doReturn(resourceTypeId).when(resourceTypeEntityMock).getId(); when(propertyValidationServiceMock.isValidTechnicalKey(newDescriptor.getPropertyName())).thenReturn(true); // when service.savePropertyDescriptorForOwner(changingOwner, abstractContextMock, newDescriptor, tags, resourceTypeEntityMock); // then assertThat("The resourceTypeId Param must be stored as ThreadLocal variable for auditing (envers)", ThreadLocalUtil.getThreadVariable(ThreadLocalUtil.KEY_RESOURCE_TYPE_ID), is(CoreMatchers.notNullValue())); int actualResourceTypeId = (int) ThreadLocalUtil.getThreadVariable(ThreadLocalUtil.KEY_RESOURCE_TYPE_ID); assertThat(actualResourceTypeId, is(resourceTypeId)); }
@Test public void shouldStoreResourceTypeIdInThreadLocalDuringPropertyDescriptorUpdate() throws AMWException { // given ForeignableOwner changingOwner = ForeignableOwner.AMW; Integer resourceTypeId = 2; AbstractContext abstractContextMock = mock(AbstractContext.class); PropertyDescriptorEntity newDescriptor = new PropertyDescriptorEntityBuilder().withId(2).build(); List<PropertyTagEntity> tags = new ArrayList<>(); ResourceTypeEntity resourceTypeEntityMock = mock(ResourceTypeEntity.class); doReturn(resourceTypeId).when(resourceTypeEntityMock).getId(); when(propertyValidationServiceMock.isValidTechnicalKey(newDescriptor.getPropertyName())).thenReturn(true); when(entityManagerMock.find(PropertyDescriptorEntity.class, newDescriptor.getId())).thenReturn(newDescriptor); when(entityManagerMock.merge(newDescriptor)).thenReturn(newDescriptor); // when service.savePropertyDescriptorForOwner(changingOwner, abstractContextMock, newDescriptor, tags, resourceTypeEntityMock); // then assertThat("The resourceTypeId Param must be stored as ThreadLocal variable for auditing (envers)", ThreadLocalUtil.getThreadVariable(ThreadLocalUtil.KEY_RESOURCE_TYPE_ID), is(CoreMatchers.notNullValue())); int actualResourceTypeId = (int) ThreadLocalUtil.getThreadVariable(ThreadLocalUtil.KEY_RESOURCE_TYPE_ID); assertThat(actualResourceTypeId, is(resourceTypeId)); }
@Test public void saveTestingPropertyDescriptorForResourceShouldSaveAsSystemOwner() throws ForeignableOwnerViolationException, AMWException { // given ForeignableOwner changingOwner = ForeignableOwner.AMW; Integer resourceId = 1; PropertyDescriptorEntity descriptor = new PropertyDescriptorEntityBuilder().withId(2).build(); String propertyTagsString = "propertyTagsString"; ResourceEntity resourceEntityMock = mock(ResourceEntity.class); ResourceTypeEntity resourceTypeEntityMock = mock(ResourceTypeEntity.class); ResourceContextEntity resourceContextEntityMock = mock(ResourceContextEntity.class); ResourceTypeContextEntity resourceTypeContextEntityMock = mock(ResourceTypeContextEntity.class); when(entityManagerMock.find(ResourceEntity.class, resourceId)).thenReturn(resourceEntityMock); when(resourceEntityMock.getOrCreateContext(any(ContextEntity.class))).thenReturn(resourceContextEntityMock); when(resourceEntityMock.getResourceType()).thenReturn(resourceTypeEntityMock); when(resourceTypeEntityMock.getOrCreateContext(any(ContextEntity.class))).thenReturn(resourceTypeContextEntityMock); List<String> emptyList = new ArrayList<>(); when(propertyValidationServiceMock.getDuplicatePropertyDescriptors(resourceContextEntityMock, resourceTypeContextEntityMock, descriptor)).thenReturn(emptyList); when(permissionBoundaryMock.hasPermission(Permission.IGNORE_FOREIGNABLE_OWNER)).thenReturn(false); List<PropertyTagEntity> propertyTags = new ArrayList<>(); propertyTags.add(new PropertyTagEntity()); when(propertyTagEditingServiceMock.convertToTags(propertyTagsString)).thenReturn(propertyTags); // when editor.saveTestingPropertyDescriptorForResource(resourceId, descriptor,descriptor.foreignableFieldHashCode(), propertyTagsString); // then verify(propertyDescriptorServiceMock).savePropertyDescriptorForOwner(ForeignableOwner.getSystemOwner(), resourceContextEntityMock, descriptor, propertyTags, resourceEntityMock); }
@Test public void savePropertyDescriptorForResourceTypeShouldSaveWithOwner() throws ForeignableOwnerViolationException, AMWException { // given ForeignableOwner changingOwner = ForeignableOwner.AMW; Integer resourceTypeId = 1; PropertyDescriptorEntity descriptor = new PropertyDescriptorEntityBuilder().withId(2).build(); String propertyTagsString = "propertyTagsString"; ResourceTypeEntity resourceTypeEntityMock = mock(ResourceTypeEntity.class); ResourceTypeContextEntity resourceTypeContextEntityMock = mock(ResourceTypeContextEntity.class); when(entityManagerMock.find(ResourceTypeEntity.class, resourceTypeId)).thenReturn(resourceTypeEntityMock); when(resourceTypeEntityMock.getOrCreateContext(any(ContextEntity.class))).thenReturn(resourceTypeContextEntityMock); when(permissionBoundaryMock.hasPermission(Permission.IGNORE_FOREIGNABLE_OWNER)).thenReturn(false); List<PropertyTagEntity> propertyTags = new ArrayList<>(); propertyTags.add(new PropertyTagEntity()); when(propertyTagEditingServiceMock.convertToTags(propertyTagsString)).thenReturn(propertyTags); // when editor.savePropertyDescriptorForResourceType(changingOwner, resourceTypeId, descriptor,descriptor.foreignableFieldHashCode(), propertyTagsString); // then verify(propertyDescriptorServiceMock).savePropertyDescriptorForOwner(changingOwner, resourceTypeContextEntityMock, descriptor, propertyTags, resourceTypeEntityMock); }
@Test public void savePropertyDescriptorForOwnerWhenDescriptorIdIsNotNullAndSameOwnerShouldSavePropertyDescriptor() throws AMWException { // given ForeignableOwner changingOwner = ForeignableOwner.AMW; AbstractContext abstractContextMock = mock(AbstractContext.class); PropertyDescriptorEntity descriptor = new PropertyDescriptorEntityBuilder().withId(1).withOwner(changingOwner).build(); List<PropertyTagEntity> tags = new ArrayList<>(); when(propertyValidationServiceMock.isValidTechnicalKey(descriptor.getPropertyName())).thenReturn(true); Assert.assertNotNull(descriptor.getId()); // mock (implicit verify for merge) merging of descriptor PropertyDescriptorEntity mergedPropertyDescriptorMock = mock(PropertyDescriptorEntity.class); when(entityManagerMock.merge(descriptor)).thenReturn(mergedPropertyDescriptorMock); // mocking the manageChangeOfEncryptedPropertyDescriptor when(entityManagerMock.find(PropertyDescriptorEntity.class, descriptor.getId())).thenReturn(descriptor); when(entityManagerMock.createQuery("select p from PropertyEntity p where p.descriptor=:descriptor", PropertyEntity.class)).thenReturn(mock(TypedQuery.class)); ResourceEntity resourceEntityMock = mock(ResourceEntity.class); // when service.savePropertyDescriptorForOwner(changingOwner, abstractContextMock, descriptor, tags, resourceEntityMock); // then verify(propertyTagEditingServiceMock).updateTags(tags, mergedPropertyDescriptorMock); }
@Test public void savePropertyDescriptorForOwnerWhenDescriptorIdIsNullShouldCreateNewPropertyDescriptorForOwner() throws AMWException { // given ForeignableOwner changingOwner = ForeignableOwner.AMW; AbstractContext abstractContextMock = mock(AbstractContext.class); PropertyDescriptorEntity descriptor = new PropertyDescriptorEntityBuilder().build(); List<PropertyTagEntity> tags = new ArrayList<>(); ResourceEntity resourceEntityMock = mock(ResourceEntity.class); when(propertyValidationServiceMock.isValidTechnicalKey(descriptor.getPropertyName())).thenReturn(true); Assert.assertNull(descriptor.getId()); // when service.savePropertyDescriptorForOwner(changingOwner, abstractContextMock, descriptor, tags, resourceEntityMock); // then verify(abstractContextMock).addPropertyDescriptor(descriptor); verify(entityManagerMock).persist(descriptor); verify(propertyTagEditingServiceMock).updateTags(tags, descriptor); verify(entityManagerMock).persist(abstractContextMock); }
@Test(expected = AMWException.class) public void savePropertyDescriptorShouldNotCreateMultiplePropertyDescriptorsWithSameName() throws AMWException { // given ForeignableOwner changingOwner = ForeignableOwner.AMW; PropertyDescriptorEntity descriptor = new PropertyDescriptorEntityBuilder().withPropertyName("existing").build(); AbstractContext abstractContextMock = mock(AbstractContext.class); PropertyDescriptorEntity newDescriptor = new PropertyDescriptorEntityBuilder().withPropertyName("existing").build(); List<PropertyTagEntity> tags = new ArrayList<>(); ResourceEntity resourceEntityMock = mock(ResourceEntity.class); when(propertyValidationServiceMock.isValidTechnicalKey(descriptor.getPropertyName())).thenReturn(true); when(abstractContextMock.getPropertyDescriptors()).thenReturn(new HashSet<>(Collections.singletonList(descriptor))); // when service.savePropertyDescriptorForOwner(changingOwner, abstractContextMock, newDescriptor, tags, resourceEntityMock); }
@Test public void saveTestingPropertyDescriptorForResourceTypeShouldSaveAsSystemOwner() throws ForeignableOwnerViolationException, AMWException { // given ForeignableOwner changingOwner = ForeignableOwner.AMW; Integer resourceTypeId = 1; PropertyDescriptorEntity descriptor = new PropertyDescriptorEntityBuilder().withId(2).build(); String propertyTagsString = "propertyTagsString"; ResourceTypeEntity resourceTypeEntityMock = mock(ResourceTypeEntity.class); ResourceTypeContextEntity resourceTypeContextEntityMock = mock(ResourceTypeContextEntity.class); when(entityManagerMock.find(ResourceTypeEntity.class, resourceTypeId)).thenReturn(resourceTypeEntityMock); when(resourceTypeEntityMock.getOrCreateContext(any(ContextEntity.class))).thenReturn(resourceTypeContextEntityMock); when(permissionBoundaryMock.hasPermission(Permission.IGNORE_FOREIGNABLE_OWNER)).thenReturn(false); List<PropertyTagEntity> propertyTags = new ArrayList<>(); propertyTags.add(new PropertyTagEntity()); when(propertyTagEditingServiceMock.convertToTags(propertyTagsString)).thenReturn(propertyTags); // when editor.saveTestingPropertyDescriptorForResourceType(resourceTypeId, descriptor,descriptor.foreignableFieldHashCode(), propertyTagsString); // then verify(propertyDescriptorServiceMock).savePropertyDescriptorForOwner(ForeignableOwner.getSystemOwner(), resourceTypeContextEntityMock, descriptor, propertyTags, resourceTypeEntityMock); }
@Test public void savePropertyDescriptorForOwnerWhenDescriptorIdIsNotNullNoForeignableFieldsChangedButDifferentOwnerShouldSavePropertyDescriptor() throws AMWException { // given ForeignableOwner changingOwner = ForeignableOwner.AMW; AbstractContext abstractContextMock = mock(AbstractContext.class); PropertyDescriptorEntity descriptor = new PropertyDescriptorEntityBuilder().withId(1).withOwner(ForeignableOwner.MAIA).build(); List<PropertyTagEntity> tags = new ArrayList<>(); when(propertyValidationServiceMock.isValidTechnicalKey(descriptor.getPropertyName())).thenReturn(true); Assert.assertNotNull(descriptor.getId()); // mock (implicit verify for merge) merging of descriptor PropertyDescriptorEntity mergedPropertyDescriptorMock = mock(PropertyDescriptorEntity.class); when(entityManagerMock.merge(descriptor)).thenReturn(mergedPropertyDescriptorMock); // mocking the manageChangeOfEncryptedPropertyDescriptor when(entityManagerMock.createQuery("select p from PropertyEntity p where p.descriptor=:descriptor", PropertyEntity.class)).thenReturn(mock(TypedQuery.class)); // return descriptor with same values (not changed fields) when(entityManagerMock.find(PropertyDescriptorEntity.class, descriptor.getId())).thenReturn(descriptor); ResourceEntity resourceEntityMock = mock(ResourceEntity.class); // when service.savePropertyDescriptorForOwner(changingOwner, abstractContextMock, descriptor, tags, resourceEntityMock); // then verify(propertyTagEditingServiceMock).updateTags(tags, mergedPropertyDescriptorMock); }
@Test public void savePropertyDescriptorForResourceShouldSaveWithOwner() throws ForeignableOwnerViolationException, AMWException { // given ForeignableOwner changingOwner = ForeignableOwner.AMW; Integer resourceId = 1; PropertyDescriptorEntity descriptor = new PropertyDescriptorEntityBuilder().withId(2).build(); String propertyTagsString = "propertyTagsString"; ResourceEntity resourceEntityMock = mock(ResourceEntity.class); ResourceTypeEntity resourceTypeEntityMock = mock(ResourceTypeEntity.class); ResourceContextEntity resourceContextEntityMock = mock(ResourceContextEntity.class); ResourceTypeContextEntity resourceTypeContextEntityMock = mock(ResourceTypeContextEntity.class); when(entityManagerMock.find(ResourceEntity.class, resourceId)).thenReturn(resourceEntityMock); when(resourceEntityMock.getOrCreateContext(any(ContextEntity.class))).thenReturn(resourceContextEntityMock); when(resourceEntityMock.getResourceType()).thenReturn(resourceTypeEntityMock); when(resourceTypeEntityMock.getOrCreateContext(any(ContextEntity.class))).thenReturn(resourceTypeContextEntityMock); List<String> emptyList = new ArrayList<>(); when(propertyValidationServiceMock.getDuplicatePropertyDescriptors(resourceContextEntityMock, resourceTypeContextEntityMock, descriptor)).thenReturn(emptyList); when(permissionBoundaryMock.hasPermission(Permission.IGNORE_FOREIGNABLE_OWNER)).thenReturn(false); List<PropertyTagEntity> propertyTags = new ArrayList<>(); propertyTags.add(new PropertyTagEntity()); when(propertyTagEditingServiceMock.convertToTags(propertyTagsString)).thenReturn(propertyTags); // when editor.savePropertyDescriptorForResource(changingOwner, resourceId, descriptor, descriptor.foreignableFieldHashCode(), propertyTagsString); // then verify(propertyDescriptorServiceMock).savePropertyDescriptorForOwner(changingOwner, resourceContextEntityMock, descriptor, propertyTags, resourceEntityMock); }
@Test public void shouldStoreResourceIdInThreadLocalDuringPropertyDescriptorUpdate() throws AMWException { //given ForeignableOwner changingOwner = ForeignableOwner.AMW; Integer expectedResourceId = 99; AbstractContext abstractContextMock = mock(AbstractContext.class); PropertyDescriptorEntity descriptorToUpdate = new PropertyDescriptorEntityBuilder().withId(1).withOwner(ForeignableOwner.MAIA).build(); List<PropertyTagEntity> tags = new ArrayList<>(); when(propertyValidationServiceMock.isValidTechnicalKey(descriptorToUpdate.getPropertyName())).thenReturn(true); Assert.assertNotNull(descriptorToUpdate.getId()); // mock (implicit verify for merge) merging of descriptorToUpdate PropertyDescriptorEntity mergedPropertyDescriptorMock = mock(PropertyDescriptorEntity.class); when(entityManagerMock.merge(descriptorToUpdate)).thenReturn(mergedPropertyDescriptorMock); // mocking the manageChangeOfEncryptedPropertyDescriptor when(entityManagerMock.createQuery("select p from PropertyEntity p where p.descriptor=:descriptor", PropertyEntity.class)).thenReturn(mock(TypedQuery.class)); // return descriptorToUpdate with same values (not changed fields) when(entityManagerMock.find(PropertyDescriptorEntity.class, descriptorToUpdate.getId())).thenReturn(descriptorToUpdate); ResourceEntity resourceEntityMock = mock(ResourceEntity.class); when(resourceEntityMock.getId()).thenReturn(expectedResourceId); // when service.savePropertyDescriptorForOwner(changingOwner, abstractContextMock, descriptorToUpdate, tags, resourceEntityMock ); // then assertThat("The resourceId Param must be stored as ThreadLocal variable for auditing (envers)", ThreadLocalUtil.getThreadVariable(ThreadLocalUtil.KEY_RESOURCE_ID), is(CoreMatchers.notNullValue())); int actualResourceId = (int) ThreadLocalUtil.getThreadVariable(ThreadLocalUtil.KEY_RESOURCE_ID); assertThat(actualResourceId, is(expectedResourceId)); }