package com.constellio.app.api.admin.services; import static org.assertj.core.api.Assertions.assertThat; import java.util.Arrays; import org.junit.Before; import com.constellio.app.client.entities.MetadataResource; import com.constellio.app.client.services.AdminServicesSession; import com.constellio.app.client.services.SchemaServicesClient; import com.constellio.model.entities.schemas.MetadataValueType; import com.constellio.model.services.schemas.testimpl.TestRecordValidator2; import com.constellio.model.services.security.authentification.AuthenticationService; import com.constellio.model.services.users.GlobalGroupsManager; import com.constellio.model.services.users.UserServices; import com.constellio.sdk.tests.ConstellioTest; import com.constellio.sdk.tests.setups.Users; public class SchemaServicesAcceptTest extends ConstellioTest { Users users = new Users(); UserServices userServices; AuthenticationService authService; GlobalGroupsManager globalGroupsManager; AdminServicesSession bobSession; SchemaServicesClient driver; @Before public void setUp() throws Exception { String bobPassword = "bobPassword"; prepareSystem(withZeCollection()); userServices = getModelLayerFactory().newUserServices(); authService = getModelLayerFactory().newAuthenticationService(); globalGroupsManager = getModelLayerFactory().getGlobalGroupsManager(); users.setUp(userServices); userServices.givenSystemAdminPermissionsToUser(users.bob()); String bobServiceKey = userServices.giveNewServiceToken(users.bob()); authService.changePassword(users.bob().getUsername(), bobPassword); bobSession = newRestClient(bobServiceKey, users.bob().getUsername(), bobPassword); driver = bobSession.newSchemaServicesForCollection(zeCollection); } //This test is runned by AllAdminServicesAcceptTest public void whenUsingDriverThenCanConfigureSchemaTypes() { driver.createSchemaType("zeType"); driver.createSchemaType("anotherType"); driver.createSchemaType("thirdType"); assertThat(driver.getSchemaTypes()).contains("group", "collection", "user", "zeType", "anotherType", "thirdType"); assertThat(driver.getSchemas("zeType")).containsOnly("zeType_default"); assertThat(driver.getSchemas("anotherType")).containsOnly("anotherType_default"); assertThat(driver.getSchemas("thirdType")).containsOnly("thirdType_default"); driver.createCustomSchema("zeType_custom1"); driver.createCustomSchema("zeType_custom2"); assertThat(driver.getSchemas("zeType")).containsOnly("zeType_default", "zeType_custom1", "zeType_custom2"); validateSchemaHasDefaultMetadata("zeType_default"); validateSchemaHasDefaultMetadata("zeType_custom1"); validateSchemaHasDefaultMetadata("anotherType_default"); validateCanAddAndRemoveSchemaValidators(); canAddZeTypeReferenceToSelf(); canAddAnotherTypeReferenceToSelf(); canAddThirdTypeReferencesToZeType(); canAddThirdTypeReferencesToAnotherType(); canAddContentMetadataInZeTypeCustomSchema(); canModifyCustomSchemaMetadatasInheritedFromDefaultSchema(); canDefineTaxonomies(); } private void canDefineTaxonomies() { assertThat(driver.getTaxonomies()).isEmpty(); assertThat(driver.getPrincipalTaxonomy()).isEqualTo(""); driver.createTaxonomy("aSecondaryTaxonomy", Arrays.asList("anotherType")); driver.createTaxonomy("thePrincipalTaxonomy", Arrays.asList("zeType", "thirdType")); driver.setAsPrincipalTaxonomy("thePrincipalTaxonomy"); assertThat(driver.getTaxonomies()).containsOnly("aSecondaryTaxonomy", "thePrincipalTaxonomy"); assertThat(driver.getPrincipalTaxonomy()).isEqualTo("thePrincipalTaxonomy"); assertThat(driver.getTaxonomySchemaTypes("aSecondaryTaxonomy")).containsOnly("anotherType"); assertThat(driver.getTaxonomySchemaTypes("thePrincipalTaxonomy")).containsOnly("zeType", "thirdType"); } private void canAddZeTypeReferenceToSelf() { MetadataResource resource = new MetadataResource(); resource.setCode("zeType_default_parent"); resource.setAllowedReference("zeType"); resource.setChildOfRelationship(true); resource.setEnabled(false); resource.setLabel("Ze parent"); resource.setType(MetadataValueType.REFERENCE.name()); driver.addUpdateMetadata(resource); resource = driver.getMetadata("zeType_default_parent"); assertThat(resource.getCode()).isEqualTo("zeType_default_parent"); assertThat(resource.getAllowedReference()).isEqualTo("zeType"); assertThat(resource.getCalculator()).isNull(); assertThat(resource.getDataStoreCode()).isEqualTo("parentPId_s"); assertThat(resource.getLabel()).isEqualTo("Ze parent"); assertThat(resource.getType()).isEqualTo(MetadataValueType.REFERENCE.name()); assertThat(resource.getValidators()).isEmpty(); assertThat(resource.getSearchable()).isFalse(); assertThat(resource.getChildOfRelationship()).isTrue(); assertThat(resource.getDefaultRequirement()).isFalse(); assertThat(resource.getEnabled()).isFalse(); assertThat(resource.getMultivalue()).isFalse(); assertThat(resource.getUniqueValue()).isFalse(); resource = new MetadataResource(); resource.setCode("zeType_default_parent"); resource.setEnabled(true); resource.setLabel("Ze ultimate parent"); driver.addUpdateMetadata(resource); resource = driver.getMetadata("zeType_default_parent"); assertThat(resource.getCode()).isEqualTo("zeType_default_parent"); assertThat(resource.getAllowedReference()).isEqualTo("zeType"); assertThat(resource.getCalculator()).isNull(); assertThat(resource.getDataStoreCode()).isEqualTo("parentPId_s"); assertThat(resource.getLabel()).isEqualTo("Ze ultimate parent"); assertThat(resource.getType()).isEqualTo(MetadataValueType.REFERENCE.name()); assertThat(resource.getValidators()).isEmpty(); assertThat(resource.getSearchable()).isFalse(); assertThat(resource.getChildOfRelationship()).isTrue(); assertThat(resource.getDefaultRequirement()).isFalse(); assertThat(resource.getEnabled()).isTrue(); assertThat(resource.getMultivalue()).isFalse(); assertThat(resource.getUniqueValue()).isFalse(); } private void canAddThirdTypeReferencesToZeType() { MetadataResource resource = new MetadataResource(); resource.setCode("thirdType_default_refToZetype"); resource.setAllowedReference("zeType"); resource.setType(MetadataValueType.REFERENCE.name()); resource.setDefaultRequirement(true); driver.addUpdateMetadata(resource); resource = driver.getMetadata("thirdType_default_refToZetype"); assertThat(resource.getCode()).isEqualTo("thirdType_default_refToZetype"); assertThat(resource.getAllowedReference()).isEqualTo("zeType"); assertThat(resource.getCalculator()).isNull(); assertThat(resource.getDataStoreCode()).isEqualTo("refToZetypeId_s"); assertThat(resource.getType()).isEqualTo(MetadataValueType.REFERENCE.name()); assertThat(resource.getValidators()).isEmpty(); assertThat(resource.getSearchable()).isFalse(); assertThat(resource.getChildOfRelationship()).isFalse(); assertThat(resource.getDefaultRequirement()).isTrue(); assertThat(resource.getEnabled()).isTrue(); assertThat(resource.getMultivalue()).isFalse(); assertThat(resource.getUniqueValue()).isFalse(); } private void canAddThirdTypeReferencesToAnotherType() { MetadataResource resource = new MetadataResource(); resource.setCode("thirdType_default_refToAnotherType"); resource.setAllowedReference("zeType"); resource.setType(MetadataValueType.REFERENCE.name()); resource.setMultivalue(true); driver.addUpdateMetadata(resource); resource = driver.getMetadata("thirdType_default_refToAnotherType"); assertThat(resource.getCode()).isEqualTo("thirdType_default_refToAnotherType"); assertThat(resource.getAllowedReference()).isEqualTo("zeType"); assertThat(resource.getCalculator()).isNull(); assertThat(resource.getDataStoreCode()).isEqualTo("refToAnotherTypeId_ss"); assertThat(resource.getType()).isEqualTo(MetadataValueType.REFERENCE.name()); assertThat(resource.getValidators()).isEmpty(); assertThat(resource.getSearchable()).isFalse(); assertThat(resource.getChildOfRelationship()).isFalse(); assertThat(resource.getDefaultRequirement()).isFalse(); assertThat(resource.getEnabled()).isTrue(); assertThat(resource.getMultivalue()).isTrue(); assertThat(resource.getUniqueValue()).isFalse(); } private void canAddContentMetadataInZeTypeCustomSchema() { MetadataResource resource = new MetadataResource(); resource.setCode("zeType_custom1_content"); resource.setType(MetadataValueType.CONTENT.name()); resource.setMultivalue(true); resource.setSearchable(true); driver.addUpdateMetadata(resource); resource = driver.getMetadata("zeType_custom1_content"); assertThat(resource.getCode()).isEqualTo("zeType_custom1_content"); assertThat(resource.getAllowedReference()).isNull(); assertThat(resource.getCalculator()).isNull(); assertThat(resource.getDataStoreCode()).isEqualTo("content_ss"); assertThat(resource.getType()).isEqualTo(MetadataValueType.CONTENT.name()); assertThat(resource.getValidators()).isEmpty(); assertThat(resource.getSearchable()).isTrue(); assertThat(resource.getChildOfRelationship()).isFalse(); assertThat(resource.getDefaultRequirement()).isFalse(); assertThat(resource.getEnabled()).isTrue(); assertThat(resource.getMultivalue()).isTrue(); assertThat(resource.getUniqueValue()).isFalse(); } private void canModifyCustomSchemaMetadatasInheritedFromDefaultSchema() { MetadataResource resource = new MetadataResource(); resource.setCode("zeType_custom1_title"); resource.setLabel("Ze custom title"); resource.setDefaultRequirement(true); driver.addUpdateMetadata(resource); resource = driver.getMetadata("zeType_default_title"); assertThat(resource.getLabel()).isNotEqualTo("Ze custom title"); assertThat(resource.getDefaultRequirement()).isFalse(); resource = driver.getMetadata("zeType_custom1_title"); assertThat(resource.getLabel()).isEqualTo("Ze custom title"); assertThat(resource.getDefaultRequirement()).isTrue(); } private void canAddAnotherTypeReferenceToSelf() { MetadataResource resource = new MetadataResource(); resource.setCode("anotherType_default_parent"); resource.setAllowedReference("zeType"); resource.setChildOfRelationship(true); resource.setEnabled(true); resource.setType(MetadataValueType.REFERENCE.name()); driver.addUpdateMetadata(resource); assertThat(driver.getMetadata("anotherType_default_parent").getEnabled()).isTrue(); driver.disableMetadata("anotherType_default_parent"); assertThat(driver.getMetadata("anotherType_default_parent").getEnabled()).isFalse(); resource = new MetadataResource(); resource.setCode("anotherType_default_parent"); resource.setEnabled(true); driver.addUpdateMetadata(resource); assertThat(driver.getMetadata("anotherType_default_parent").getEnabled()).isTrue(); } private void validateCanAddAndRemoveSchemaValidators() { assertThat(driver.getSchemaValidators("zeType_default")).isEmpty(); driver.addSchemaValidator("zeType_default", TestRecordValidator2.class.getCanonicalName()); assertThat(driver.getSchemaValidators("zeType_default")).containsOnly(TestRecordValidator2.class.getCanonicalName()); driver.removeSchemaValidator("zeType_default", TestRecordValidator2.class.getCanonicalName()); assertThat(driver.getSchemaValidators("zeType_default")).isEmpty(); } private void validateSchemaHasDefaultMetadata(String schema) { String titleCode = schema + "_title"; String modifiedOnCode = schema + "_modifiedOn"; String createdOnCode = schema + "_createdOn"; String modifiedByCode = schema + "_modifiedBy"; String createdByCode = schema + "_createdBy"; String schemaCode = schema + "_schema"; String idCode = schema + "_id"; String pathCode = schema + "_path"; String parentpathCode = schema + "_parentpath"; String deletedCode = schema + "_deleted"; assertThat(driver.getSchemaMetadataCodes(schema)).contains(titleCode, modifiedOnCode, createdOnCode, modifiedByCode, createdByCode, schemaCode, idCode, pathCode, parentpathCode, deletedCode); MetadataResource title = driver.getMetadata(titleCode); assertThat(title.getCode()).isEqualTo(titleCode); assertThat(title.getAllowedReference()).isNull(); assertThat(title.getCalculator()).isNull(); assertThat(title.getDataStoreCode()).isEqualTo("title_s"); assertThat(title.getType()).isEqualTo(MetadataValueType.STRING.name()); assertThat(title.getValidators()).isEmpty(); assertThat(title.getSearchable()).isTrue(); assertThat(title.getChildOfRelationship()).isFalse(); assertThat(title.getDefaultRequirement()).isFalse(); assertThat(title.getEnabled()).isTrue(); assertThat(title.getMultivalue()).isFalse(); assertThat(title.getUniqueValue()).isFalse(); MetadataResource modifiedOn = driver.getMetadata(modifiedOnCode); assertThat(modifiedOn.getCode()).isEqualTo(modifiedOnCode); assertThat(modifiedOn.getAllowedReference()).isNull(); assertThat(modifiedOn.getCalculator()).isNull(); assertThat(modifiedOn.getDataStoreCode()).isEqualTo("modifiedOn_dt"); assertThat(modifiedOn.getType()).isEqualTo(MetadataValueType.DATE_TIME.name()); assertThat(modifiedOn.getValidators()).isEmpty(); assertThat(modifiedOn.getSearchable()).isFalse(); assertThat(modifiedOn.getChildOfRelationship()).isFalse(); assertThat(modifiedOn.getDefaultRequirement()).isFalse(); assertThat(modifiedOn.getEnabled()).isTrue(); assertThat(modifiedOn.getMultivalue()).isFalse(); assertThat(modifiedOn.getUniqueValue()).isFalse(); MetadataResource createdBy = driver.getMetadata(createdByCode); assertThat(createdBy.getCode()).isEqualTo(createdByCode); assertThat(createdBy.getAllowedReference()).isEqualTo("user"); assertThat(createdBy.getCalculator()).isNull(); assertThat(createdBy.getDataStoreCode()).isEqualTo("createdById_s"); assertThat(createdBy.getType()).isEqualTo(MetadataValueType.REFERENCE.name()); assertThat(createdBy.getValidators()).isEmpty(); assertThat(createdBy.getSearchable()).isFalse(); assertThat(createdBy.getChildOfRelationship()).isFalse(); assertThat(createdBy.getDefaultRequirement()).isFalse(); assertThat(createdBy.getEnabled()).isTrue(); assertThat(createdBy.getMultivalue()).isFalse(); assertThat(createdBy.getUniqueValue()).isFalse(); MetadataResource path = driver.getMetadata(pathCode); assertThat(path.getCode()).isEqualTo(pathCode); assertThat(path.getAllowedReference()).isNull(); assertThat(path.getCalculator()).isEqualTo("com.constellio.model.services.schemas.calculators.PathCalculator"); assertThat(path.getDataStoreCode()).isEqualTo("path_ss"); assertThat(path.getType()).isEqualTo(MetadataValueType.STRING.name()); assertThat(path.getValidators()).isEmpty(); assertThat(path.getSearchable()).isFalse(); assertThat(path.getChildOfRelationship()).isFalse(); assertThat(path.getDefaultRequirement()).isFalse(); assertThat(path.getEnabled()).isTrue(); assertThat(path.getMultivalue()).isTrue(); assertThat(path.getUniqueValue()).isFalse(); MetadataResource deleted = driver.getMetadata(deletedCode); assertThat(deleted.getCode()).isEqualTo(deletedCode); assertThat(deleted.getAllowedReference()).isNull(); assertThat(deleted.getCalculator()).isNull(); assertThat(deleted.getDataStoreCode()).isEqualTo("deleted_s"); assertThat(deleted.getType()).isEqualTo(MetadataValueType.BOOLEAN.name()); assertThat(deleted.getValidators()).isEmpty(); assertThat(deleted.getSearchable()).isFalse(); assertThat(deleted.getChildOfRelationship()).isFalse(); assertThat(deleted.getDefaultRequirement()).isFalse(); assertThat(deleted.getEnabled()).isTrue(); assertThat(deleted.getMultivalue()).isFalse(); assertThat(deleted.getUniqueValue()).isFalse(); } }