use of eu.bcvsolutions.idm.core.api.domain.ExternalIdentifiable in project CzechIdMng by bcvsolutions.
the class AbstractReadWriteDtoControllerRestTest method testFindByExternalId.
/**
* Test search by external identifier, if DTO implements {@link ExternalIdentifiable}
*
* @throws Exception
*/
@Test
@SuppressWarnings("unchecked")
public void testFindByExternalId() {
DTO dto = prepareDto();
if (!(dto instanceof ExternalIdentifiable)) {
// ignore test
return;
}
//
ExternalIdentifiable externalIdentifiableDto = (ExternalIdentifiable) dto;
externalIdentifiableDto.setExternalId(getHelper().createName());
//
DTO createdDto = createDto(dto);
//
// create another mock dto
ExternalIdentifiable dtoTwo = (ExternalIdentifiable) prepareDto();
dtoTwo.setExternalId(getHelper().createName());
createDto((DTO) dtoTwo);
//
MultiValueMap<String, String> parameters = new LinkedMultiValueMap<>();
parameters.set(ExternalIdentifiable.PROPERTY_EXTERNAL_ID, externalIdentifiableDto.getExternalId());
//
List<DTO> results = find(parameters);
//
Assert.assertEquals(1, results.size());
Assert.assertEquals(createdDto.getId(), results.get(0).getId());
//
if (supportsAutocomplete()) {
results = autocomplete(parameters);
//
Assert.assertEquals(1, results.size());
Assert.assertEquals(createdDto.getId(), results.get(0).getId());
} else {
LOG.info("Controller [{}] doesn't support autocomplete method. Method will not be tested.", getController().getClass());
}
//
Assert.assertEquals(1, count(parameters));
}
use of eu.bcvsolutions.idm.core.api.domain.ExternalIdentifiable in project CzechIdMng by bcvsolutions.
the class AbstractReadWriteDtoControllerRestTest method testDuplicateExternalId.
@Test
public void testDuplicateExternalId() throws Exception {
if (!DataFilter.class.isAssignableFrom(getController().getFilterClass())) {
LOG.warn("Controller [{}] doesn't support DataFilter. Find by external id will not be tested.", getController().getClass());
return;
}
//
DTO dto = prepareDto();
if (!(dto instanceof ExternalIdentifiable)) {
// ignore test
return;
}
//
ExternalIdentifiable externalIdentifiableDto = (ExternalIdentifiable) dto;
String name = getHelper().createName();
externalIdentifiableDto.setExternalId(name);
//
DTO original = createDto(dto);
DTO duplicate = prepareDto();
((ExternalIdentifiable) duplicate).setExternalId(name);
//
if (!supportsPost()) {
try {
createDto(duplicate);
Assert.fail();
} catch (DuplicateExternalIdException ex) {
Assert.assertEquals(original.getId(), ex.getDuplicateId());
}
} else {
getMockMvc().perform(post(getBaseUrl()).with(authentication(getAdminAuthentication())).content(getMapper().writeValueAsString(duplicate)).contentType(TestHelper.HAL_CONTENT_TYPE)).andExpect(status().isConflict());
}
}
use of eu.bcvsolutions.idm.core.api.domain.ExternalIdentifiable in project CzechIdMng by bcvsolutions.
the class AbstractReadWriteDtoService method validateEntity.
/**
* Validates JRS303 before entity is saved
*
* @param dto
* @return
*/
@SuppressWarnings({ "unchecked" })
protected E validateEntity(E entity) {
entity = validate(entity);
// unique external id in business logic (external id can be null)
if (entity instanceof ExternalIdentifiable) {
if (!ExternalIdentifiable.class.isAssignableFrom(getFilterClass())) {
throw new EntityTypeNotExternalIdentifiableException(getFilterClass().getCanonicalName());
}
ExternalIdentifiable externalIdentifiable = (ExternalIdentifiable) entity;
if (StringUtils.isNotEmpty(externalIdentifiable.getExternalId())) {
// empty string are not valid external id
try {
ExternalIdentifiable filter = (ExternalIdentifiable) getFilterClass().getDeclaredConstructor().newInstance();
filter.setExternalId(externalIdentifiable.getExternalId());
List<DTO> dtos = find((F) filter, null).getContent();
DTO other = dtos.stream().filter(dto -> !dto.getId().equals(((E) externalIdentifiable).getId())).findFirst().orElse(null);
if (other != null) {
throw new DuplicateExternalIdException(getEntityClass().getCanonicalName(), externalIdentifiable.getExternalId(), other.getId());
}
} catch (ReflectiveOperationException ex) {
throw new EntityTypeNotExternalIdentifiableException(getFilterClass().getCanonicalName(), ex);
}
}
}
// unique external code in business logic (external id can be null)
if (entity instanceof ExternalCodeable) {
if (!ExternalCodeable.class.isAssignableFrom(getFilterClass())) {
throw new EntityTypeNotExternalCodeableException(getFilterClass().getCanonicalName());
}
ExternalCodeable externalCodeable = (ExternalCodeable) entity;
if (StringUtils.isNotEmpty(externalCodeable.getExternalCode())) {
// empty string are not valid external code
try {
ExternalCodeable filter = (ExternalCodeable) getFilterClass().getDeclaredConstructor().newInstance();
filter.setExternalCode(externalCodeable.getExternalCode());
List<DTO> dtos = find((F) filter, null).getContent();
DTO other = dtos.stream().filter(dto -> !dto.getId().equals(((E) externalCodeable).getId())).findFirst().orElse(null);
if (other != null) {
throw new DuplicateExternalCodeException(getEntityClass().getCanonicalName(), externalCodeable.getExternalCode(), other.getId());
}
} catch (ReflectiveOperationException ex) {
throw new EntityTypeNotExternalCodeableException(getFilterClass().getCanonicalName(), ex);
}
}
}
return entity;
}
Aggregations