package com.constellio.app.api.cmis.accept;
import static org.assertj.core.api.Assertions.assertThat;
import java.util.Iterator;
import org.apache.chemistry.opencmis.client.api.ObjectType;
import org.apache.chemistry.opencmis.client.api.Session;
import org.apache.chemistry.opencmis.commons.enums.Cardinality;
import org.apache.chemistry.opencmis.commons.enums.PropertyType;
import org.apache.chemistry.opencmis.commons.enums.Updatability;
import org.junit.Before;
import org.junit.Test;
import com.constellio.app.api.cmis.accept.CmisAcceptanceTestSetup.Records;
import com.constellio.model.entities.schemas.MetadataValueType;
import com.constellio.model.services.records.RecordServices;
import com.constellio.model.services.schemas.MetadataSchemasManager;
import com.constellio.model.services.schemas.MetadataSchemasManagerException.OptimisticLocking;
import com.constellio.model.services.schemas.builders.MetadataSchemaTypesBuilder;
import com.constellio.model.services.security.authentification.AuthenticationService;
import com.constellio.model.services.taxonomies.TaxonomiesManager;
import com.constellio.model.services.taxonomies.TaxonomiesSearchServices;
import com.constellio.model.services.users.UserServices;
import com.constellio.sdk.tests.ConstellioTest;
import com.constellio.sdk.tests.annotations.DriverTest;
import com.constellio.sdk.tests.setups.Users;
@DriverTest
public class CmisTypesAcceptTest extends ConstellioTest {
String anotherCollection = "anotherCollection";
CmisAcceptanceTestSetup anotherCollectionSchemas = new CmisAcceptanceTestSetup(anotherCollection);
UserServices userServices;
TaxonomiesManager taxonomiesManager;
MetadataSchemasManager metadataSchemasManager;
RecordServices recordServices;
Users users = new Users();
CmisAcceptanceTestSetup zeCollectionSchemas = new CmisAcceptanceTestSetup(zeCollection);
Records zeCollectionRecords;
Records anotherCollectionRecords;
TaxonomiesSearchServices taxonomiesSearchServices;
AuthenticationService authenticationService;
Session cmisSession;
String bobKey = "bob-key";
String chuckNorrisKey = "chuckNorris-key";
String bobToken, chuckNorrisToken;
@Before
public void setUp()
throws Exception {
authenticationService = getModelLayerFactory().newAuthenticationService();
userServices = getModelLayerFactory().newUserServices();
taxonomiesManager = getModelLayerFactory().getTaxonomiesManager();
metadataSchemasManager = getModelLayerFactory().getMetadataSchemasManager();
recordServices = getModelLayerFactory().newRecordServices();
taxonomiesSearchServices = getModelLayerFactory().newTaxonomiesSearchService();
users.setUp(userServices);
defineSchemasManager().using(zeCollectionSchemas);
defineSchemasManager().using(anotherCollectionSchemas);
CmisAcceptanceTestSetup.allSchemaTypesSupported(getAppLayerFactory());
taxonomiesManager.addTaxonomy(zeCollectionSchemas.getTaxonomy1(), metadataSchemasManager);
taxonomiesManager.addTaxonomy(zeCollectionSchemas.getTaxonomy2(), metadataSchemasManager);
taxonomiesManager.setPrincipalTaxonomy(zeCollectionSchemas.getTaxonomy1(), metadataSchemasManager);
taxonomiesManager.addTaxonomy(anotherCollectionSchemas.getTaxonomy1(), metadataSchemasManager);
taxonomiesManager.setPrincipalTaxonomy(anotherCollectionSchemas.getTaxonomy1(), metadataSchemasManager);
zeCollectionRecords = zeCollectionSchemas.givenRecords(recordServices);
anotherCollectionRecords = anotherCollectionSchemas.givenRecords(recordServices);
userServices.addUpdateUserCredential(
userServices.getUserCredential(bobGratton).withServiceKey(bobKey).withSystemAdminPermission());
userServices.addUpdateUserCredential(
userServices.getUserCredential(chuckNorris).withServiceKey(chuckNorrisKey).withSystemAdminPermission());
bobToken = userServices.generateToken(bobGratton);
chuckNorrisToken = userServices.generateToken(chuckNorris);
userServices.addUserToCollection(users.bob(), zeCollection);
userServices.addUserToCollection(users.chuckNorris(), zeCollection);
userServices.addUserToCollection(users.chuckNorris(), anotherCollection);
CmisAcceptanceTestSetup.giveUseCMISPermissionToUsers(getModelLayerFactory());
}
@Test
public void givenCmisSessionAndTypesDefinition()
throws Exception {
cmisSession = newCmisSessionBuilder().authenticatedBy(chuckNorrisKey, chuckNorrisToken).onCollection(zeCollection)
.build();
thenCanConnectOnEachCollections();
thenAllPropertiesAreSetted();
}
private void thenCanConnectOnEachCollections() {
assertThat(cmisSession.getRootFolder().getProperty("cmis:path").getValue()).isEqualTo("/");
}
private void thenAllPropertiesAreSetted() {
ObjectType baseFolderType = cmisSession.getTypeDefinition("cmis:folder");
Iterator<ObjectType> iterator = baseFolderType.getChildren().iterator();
ObjectType classificationStationType = iterator.next();
assertThat(classificationStationType.getBaseTypeId().value()).isEqualTo("cmis:folder");
assertThat(classificationStationType.getId()).isEqualTo("administrativeUnit_classificationStation");
assertThat(classificationStationType.getDescription()).isEqualTo("administrativeUnit_classificationStation");
assertThat(classificationStationType.getDisplayName()).isEqualTo("administrativeUnit_classificationStation");
assertThat(classificationStationType.getLocalName()).isEqualTo("administrativeUnit_classificationStation");
assertThat(classificationStationType.getParentTypeId()).isEqualTo(baseFolderType.getId());
assertThat(
classificationStationType.getPropertyDefinitions()
.get("allauthorizations").getCardinality()).isEqualTo(
Cardinality.MULTI);
assertThat(
classificationStationType.getPropertyDefinitions().get("datecreation")
.getCardinality()).isEqualTo(Cardinality.SINGLE);
assertThat(
classificationStationType.getPropertyDefinitions().get("datecreation")
.getPropertyType()).isEqualTo(PropertyType.DATETIME);
assertThat(
classificationStationType.getPropertyDefinitions().get("datecreation")
.getUpdatability()).isEqualTo(Updatability.READONLY);
assertThat(
classificationStationType.getPropertyDefinitions().get("datecreation")
.isInherited()).isEqualTo(false);
assertThat(
classificationStationType.getPropertyDefinitions().get("datecreation")
.isRequired()).isEqualTo(false);
assertThat(
classificationStationType.getPropertyDefinitions().get("number")
.getPropertyType()).isEqualTo(PropertyType.DECIMAL);
assertThat(
classificationStationType.getPropertyDefinitions().get("booleanTest")
.getPropertyType()).isEqualTo(PropertyType.BOOLEAN);
assertThat(
classificationStationType.getPropertyDefinitions().get("reference")
.getPropertyType()).isEqualTo(PropertyType.STRING);
assertThat(
classificationStationType.getPropertyDefinitions().get("id")
.getCardinality()).isEqualTo(Cardinality.SINGLE);
assertThat(
classificationStationType.getPropertyDefinitions()
.get("inheritedauthorizations").getCardinality()).isEqualTo(
Cardinality.MULTI);
assertThat(
classificationStationType.getPropertyDefinitions().get("parent")
.getCardinality()).isEqualTo(Cardinality.SINGLE);
assertThat(
classificationStationType.getPropertyDefinitions().get("parentpath")
.getCardinality()).isEqualTo(Cardinality.MULTI);
assertThat(
classificationStationType.getPropertyDefinitions().get("path")
.getCardinality()).isEqualTo(Cardinality.MULTI);
assertThat(
classificationStationType.getPropertyDefinitions().get("schema")
.getCardinality()).isEqualTo(Cardinality.SINGLE);
assertThat(
classificationStationType.getPropertyDefinitions()
.get("removedauthorizations").getCardinality()).isEqualTo(
Cardinality.MULTI);
assertThat(
classificationStationType.getPropertyDefinitions().get("title")
.getCardinality()).isEqualTo(Cardinality.SINGLE);
assertThat(
classificationStationType.getPropertyDefinitions().get("tokens")
.getCardinality()).isEqualTo(Cardinality.MULTI);
ObjectType administrativeUnitDefault = iterator.next();
assertThat(administrativeUnitDefault.getBaseTypeId().value()).isEqualTo("cmis:folder");
assertThat(administrativeUnitDefault.getId()).isEqualTo("administrativeUnit_default");
assertThat(administrativeUnitDefault.getDescription()).isEqualTo("administrativeUnit_default");
assertThat(administrativeUnitDefault.getDisplayName()).isEqualTo("administrativeUnit_default");
assertThat(administrativeUnitDefault.getLocalName()).isEqualTo("administrativeUnit_default");
assertThat(administrativeUnitDefault.getParentTypeId()).isEqualTo(baseFolderType.getId());
assertThat(
administrativeUnitDefault.getPropertyDefinitions().get("allauthorizations")
.getCardinality()).isEqualTo(Cardinality.MULTI);
assertThat(administrativeUnitDefault.getPropertyDefinitions().get("id").getCardinality())
.isEqualTo(Cardinality.SINGLE);
assertThat(
administrativeUnitDefault.getPropertyDefinitions().get("inheritedauthorizations")
.getCardinality()).isEqualTo(Cardinality.MULTI);
assertThat(administrativeUnitDefault.getPropertyDefinitions().get("parent").getCardinality())
.isEqualTo(Cardinality.SINGLE);
assertThat(
administrativeUnitDefault.getPropertyDefinitions().get("parentpath").getCardinality())
.isEqualTo(Cardinality.MULTI);
assertThat(administrativeUnitDefault.getPropertyDefinitions().get("path").getCardinality())
.isEqualTo(Cardinality.MULTI);
assertThat(administrativeUnitDefault.getPropertyDefinitions().get("schema").getCardinality())
.isEqualTo(Cardinality.SINGLE);
assertThat(
administrativeUnitDefault.getPropertyDefinitions().get("removedauthorizations")
.getCardinality()).isEqualTo(Cardinality.MULTI);
assertThat(administrativeUnitDefault.getPropertyDefinitions().get("title").getCardinality())
.isEqualTo(Cardinality.SINGLE);
assertThat(administrativeUnitDefault.getPropertyDefinitions().get("tokens").getCardinality())
.isEqualTo(Cardinality.MULTI);
ObjectType authorizationDetails = iterator.next();
assertThat(authorizationDetails.getBaseTypeId().value()).isEqualTo("cmis:folder");
assertThat(authorizationDetails.getId()).isEqualTo("authorizationDetails_default");
ObjectType categoryDefault = iterator.next();
assertThat(categoryDefault.getBaseTypeId().value()).isEqualTo("cmis:folder");
assertThat(categoryDefault.getId()).isEqualTo("category_default");
assertThat(categoryDefault.getDescription()).isEqualTo("category_default");
assertThat(categoryDefault.getDisplayName()).isEqualTo("category_default");
assertThat(categoryDefault.getLocalName()).isEqualTo("category_default");
// assertThat(categoryDefault.getPropertyDefinitions().get("parent")).isNull();
assertThat(categoryDefault.getParentTypeId()).isEqualTo(baseFolderType.getId());
ObjectType collectionType = iterator.next();
assertThat(collectionType.getBaseTypeId().value()).isEqualTo("cmis:folder");
assertThat(collectionType.getId()).isEqualTo("collection_default");
assertThat(collectionType.getDescription()).isEqualTo("collection_default");
assertThat(collectionType.getDisplayName()).isEqualTo("collection_default");
assertThat(collectionType.getLocalName()).isEqualTo("collection_default");
// assertThat(collectionType.getPropertyDefinitions().get("parent")).isNull();
assertThat(collectionType.getParentTypeId()).isEqualTo(baseFolderType.getId());
ObjectType documentFondDefault = iterator.next();
assertThat(documentFondDefault.getBaseTypeId().value()).isEqualTo("cmis:folder");
assertThat(documentFondDefault.getId()).isEqualTo("documentFond_default");
assertThat(documentFondDefault.getDescription()).isEqualTo("documentFond_default");
assertThat(documentFondDefault.getDisplayName()).isEqualTo("documentFond_default");
assertThat(documentFondDefault.getLocalName()).isEqualTo("documentFond_default");
// assertThat(documentFondDefault.getPropertyDefinitions().get("parent")).isNull();
assertThat(documentFondDefault.getParentTypeId()).isEqualTo(baseFolderType.getId());
ObjectType documentDefault = iterator.next();
assertThat(documentDefault.getBaseTypeId().value()).isEqualTo("cmis:folder");
assertThat(documentDefault.getId()).isEqualTo("document_default");
assertThat(documentDefault.getDescription()).isEqualTo("document_default");
assertThat(documentDefault.getDisplayName()).isEqualTo("document_default");
assertThat(documentDefault.getLocalName()).isEqualTo("document_default");
// assertThat(documentDefault.getPropertyDefinitions().get("parent")).isNull();
assertThat(documentDefault.getParentTypeId()).isEqualTo(baseFolderType.getId());
ObjectType emailToSendDefault = iterator.next();
assertThat(emailToSendDefault.getBaseTypeId().value()).isEqualTo("cmis:folder");
assertThat(emailToSendDefault.getId()).isEqualTo("emailToSend_default");
ObjectType eventDefault = iterator.next();
assertThat(eventDefault.getBaseTypeId().value()).isEqualTo("cmis:folder");
assertThat(eventDefault.getId()).isEqualTo("event_default");
assertThat(eventDefault.getDescription()).isEqualTo("event_default");
assertThat(eventDefault.getDisplayName()).isEqualTo("event_default");
assertThat(eventDefault.getLocalName()).isEqualTo("event_default");
// assertThat(eventDefault.getPropertyDefinitions().get("parent")).isNull();
assertThat(eventDefault.getParentTypeId()).isEqualTo(baseFolderType.getId());
ObjectType facetDefault = iterator.next();
assertThat(facetDefault.getBaseTypeId().value()).isEqualTo("cmis:folder");
assertThat(facetDefault.getId()).isEqualTo("facet_default");
assertThat(facetDefault.getDescription()).isEqualTo("facet_default");
ObjectType facetField = iterator.next();
assertThat(facetField.getBaseTypeId().value()).isEqualTo("cmis:folder");
assertThat(facetField.getId()).isEqualTo("facet_field");
assertThat(facetField.getDescription()).isEqualTo("facet_field");
ObjectType facetQuery = iterator.next();
assertThat(facetQuery.getBaseTypeId().value()).isEqualTo("cmis:folder");
assertThat(facetQuery.getId()).isEqualTo("facet_query");
assertThat(facetQuery.getDescription()).isEqualTo("facet_query");
ObjectType folderDefault = iterator.next();
assertThat(folderDefault.getBaseTypeId().value()).isEqualTo("cmis:folder");
assertThat(folderDefault.getId()).isEqualTo("folder_default");
assertThat(folderDefault.getDescription()).isEqualTo("folder_default");
assertThat(folderDefault.getDisplayName()).isEqualTo("folder_default");
assertThat(folderDefault.getLocalName()).isEqualTo("folder_default");
// assertThat(folderDefault.getPropertyDefinitions().get("parent")).isNull();
assertThat(folderDefault.getParentTypeId()).isEqualTo(baseFolderType.getId());
ObjectType groupDefault = iterator.next();
assertThat(groupDefault.getBaseTypeId().value()).isEqualTo("cmis:folder");
assertThat(groupDefault.getId()).isEqualTo("group_default");
assertThat(groupDefault.getDescription()).isEqualTo("group_default");
assertThat(groupDefault.getDisplayName()).isEqualTo("group_default");
assertThat(groupDefault.getLocalName()).isEqualTo("group_default");
// assertThat(groupDefault.getPropertyDefinitions().get("parent")).isNull();
assertThat(groupDefault.getParentTypeId()).isEqualTo(baseFolderType.getId());
ObjectType printable = iterator.next();
assertThat(printable.getBaseTypeId().value()).isEqualTo("cmis:folder");
assertThat(printable.getId()).isEqualTo("printable_default");
assertThat(printable.getDescription()).isEqualTo("printable_default");
assertThat(printable.getDisplayName()).isEqualTo("printable_default");
assertThat(printable.getLocalName()).isEqualTo("printable_default");
// assertThat(report.getPropertyDefinitions().get("parent")).isNull();
assertThat(printable.getParentTypeId()).isEqualTo(baseFolderType.getId());
ObjectType report = iterator.next();
assertThat(report.getBaseTypeId().value()).isEqualTo("cmis:folder");
assertThat(report.getId()).isEqualTo("report_default");
assertThat(report.getDescription()).isEqualTo("report_default");
assertThat(report.getDisplayName()).isEqualTo("report_default");
assertThat(report.getLocalName()).isEqualTo("report_default");
// assertThat(report.getPropertyDefinitions().get("parent")).isNull();
assertThat(report.getParentTypeId()).isEqualTo(baseFolderType.getId());
ObjectType savedSearch = iterator.next();
assertThat(savedSearch.getBaseTypeId().value()).isEqualTo("cmis:folder");
assertThat(savedSearch.getId()).isEqualTo("savedSearch_default");
ObjectType approvalTask = iterator.next();
assertThat(approvalTask.getBaseTypeId().value()).isEqualTo("cmis:folder");
assertThat(approvalTask.getId()).isEqualTo("task_approval");
assertThat(approvalTask.getDescription()).isEqualTo("task_approval");
assertThat(approvalTask.getDisplayName()).isEqualTo("task_approval");
assertThat(approvalTask.getLocalName()).isEqualTo("task_approval");
// assertThat(approvalTask.getPropertyDefinitions().get("parent")).isNull();
assertThat(approvalTask.getParentTypeId()).isEqualTo(baseFolderType.getId());
ObjectType taskType = iterator.next();
assertThat(taskType.getBaseTypeId().value()).isEqualTo("cmis:folder");
assertThat(taskType.getId()).isEqualTo("task_default");
assertThat(taskType.getDescription()).isEqualTo("task_default");
assertThat(taskType.getDisplayName()).isEqualTo("task_default");
assertThat(taskType.getLocalName()).isEqualTo("task_default");
// assertThat(taskType.getPropertyDefinitions().get("parent")).isNull();
assertThat(taskType.getParentTypeId()).isEqualTo(baseFolderType.getId());
ObjectType taxonomyType = iterator.next();
assertThat(taxonomyType.getBaseTypeId().value()).isEqualTo("cmis:folder");
assertThat(taxonomyType.getId()).isEqualTo("taxonomy");
assertThat(taxonomyType.getDescription()).isEqualTo("taxonomy");
assertThat(taxonomyType.getDisplayName()).isEqualTo("taxonomy");
assertThat(taxonomyType.getLocalName()).isEqualTo("taxonomy");
// assertThat(taxonomyType.getPropertyDefinitions().get("parent")).isNull();
assertThat(taxonomyType.getParentTypeId()).isEqualTo(baseFolderType.getId());
ObjectType userDocument = iterator.next();
assertThat(userDocument.getBaseTypeId().value()).isEqualTo("cmis:folder");
assertThat(userDocument.getId()).isEqualTo("userDocument_default");
assertThat(userDocument.getDescription()).isEqualTo("userDocument_default");
assertThat(userDocument.getDisplayName()).isEqualTo("userDocument_default");
assertThat(userDocument.getLocalName()).isEqualTo("userDocument_default");
// assertThat(userDocument.getPropertyDefinitions().get("parent")).isNull();
assertThat(userDocument.getParentTypeId()).isEqualTo(baseFolderType.getId());
ObjectType userFolder = iterator.next();
assertThat(userFolder.getBaseTypeId().value()).isEqualTo("cmis:folder");
assertThat(userFolder.getId()).isEqualTo("userFolder_default");
assertThat(userFolder.getDescription()).isEqualTo("userFolder_default");
assertThat(userFolder.getDisplayName()).isEqualTo("userFolder_default");
assertThat(userFolder.getLocalName()).isEqualTo("userFolder_default");
// assertThat(userDocument.getPropertyDefinitions().get("parent")).isNull();
assertThat(userFolder.getParentTypeId()).isEqualTo(baseFolderType.getId());
ObjectType userDefault = iterator.next();
assertThat(userDefault.getBaseTypeId().value()).isEqualTo("cmis:folder");
assertThat(userDefault.getId()).isEqualTo("user_default");
assertThat(userDefault.getDescription()).isEqualTo("user_default");
assertThat(userDefault.getDisplayName()).isEqualTo("user_default");
assertThat(userDefault.getLocalName()).isEqualTo("user_default");
// assertThat(userDefault.getPropertyDefinitions().get("parent")).isNull();
assertThat(userDefault.getParentTypeId()).isEqualTo(baseFolderType.getId());
}
private void whenChangeTypeDefinitionThenRefreshProperties() {
MetadataSchemaTypesBuilder typesBuilder = metadataSchemasManager.modify(zeCollection);
typesBuilder.getSchema("administrativeUnit_classificationStation").create("newMetadata")
.setType(MetadataValueType.STRING);
try {
metadataSchemasManager.saveUpdateSchemaTypes(typesBuilder);
} catch (OptimisticLocking e) {
throw new RuntimeException(e);
}
cmisSession = newCmisSessionBuilder().authenticatedBy(chuckNorrisKey, chuckNorrisToken).onCollection(zeCollection)
.build();
ObjectType baseFolderType = cmisSession.getTypeDefinition("cmis:folder");
Iterator<ObjectType> iterator = baseFolderType.getChildren().iterator();
iterator.next();
ObjectType classificationStationType = iterator.next();
assertThat(classificationStationType.getBaseTypeId().value()).isEqualTo("cmis:folder");
assertThat(classificationStationType.getId()).isEqualTo("administrativeUnit_classificationStation");
assertThat(classificationStationType.getDescription()).isEqualTo("classificationStation");
assertThat(classificationStationType.getDisplayName()).isEqualTo("administrativeUnit_classificationStation");
assertThat(classificationStationType.getLocalName()).isEqualTo("administrativeUnit_classificationStation");
assertThat(classificationStationType.getParentTypeId()).isEqualTo(baseFolderType.getId());
assertThat(
classificationStationType.getPropertyDefinitions().get("datecreation")
.getCardinality()).isEqualTo(Cardinality.SINGLE);
assertThat(
classificationStationType.getPropertyDefinitions().get("newMetadata")
.getPropertyType()).isEqualTo(PropertyType.STRING);
}
}