package com.constellio.app.api.cmis.accept;
import static org.assertj.core.api.Assertions.assertThat;
import java.util.HashMap;
import java.util.Map;
import org.apache.chemistry.opencmis.client.api.ObjectId;
import org.apache.chemistry.opencmis.client.api.Session;
import org.apache.chemistry.opencmis.client.runtime.ObjectIdImpl;
import org.apache.chemistry.opencmis.commons.PropertyIds;
import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
import org.joda.time.LocalDate;
import org.joda.time.LocalDateTime;
import org.junit.Before;
import org.junit.Test;
import com.constellio.app.api.cmis.accept.CmisAcceptanceTestSetup.Records;
import com.constellio.model.entities.records.Record;
import com.constellio.model.entities.schemas.Schemas;
import com.constellio.model.services.records.RecordServices;
import com.constellio.model.services.records.RecordServicesException;
import com.constellio.model.services.schemas.MetadataSchemasManager;
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 CreateFolderRequestAcceptTest extends ConstellioTest {
UserServices userServices;
TaxonomiesManager taxonomiesManager;
MetadataSchemasManager schemasManager;
RecordServices recordServices;
Users users = new Users();
CmisAcceptanceTestSetup zeCollectionSchemas = new CmisAcceptanceTestSetup(zeCollection);
Records zeCollectionRecords;
TaxonomiesSearchServices taxonomiesSearchServices;
Session cmisSession;
String chuckNorrisKey = "chuckNorrisKey";
String chuckNorrisToken;
String bobKey = "bobKey";
String bobToken;
@Before
public void setUp()
throws Exception {
userServices = getModelLayerFactory().newUserServices();
taxonomiesManager = getModelLayerFactory().getTaxonomiesManager();
schemasManager = getModelLayerFactory().getMetadataSchemasManager();
recordServices = getModelLayerFactory().newRecordServices();
taxonomiesSearchServices = getModelLayerFactory().newTaxonomiesSearchService();
users.setUp(userServices);
defineSchemasManager().using(zeCollectionSchemas);
CmisAcceptanceTestSetup.allSchemaTypesSupported(getAppLayerFactory());
taxonomiesManager.addTaxonomy(zeCollectionSchemas.getTaxonomy1(), schemasManager);
taxonomiesManager.setPrincipalTaxonomy(zeCollectionSchemas.getTaxonomy1(), schemasManager);
zeCollectionRecords = zeCollectionSchemas.givenRecords(recordServices);
userServices.addUpdateUserCredential(users.bob().withServiceKey(bobKey).withSystemAdminPermission());
userServices.addUpdateUserCredential(users.chuckNorris().withServiceKey(chuckNorrisKey).withSystemAdminPermission());
chuckNorrisToken = userServices.generateToken(chuckNorris);
bobToken = userServices.generateToken(bobGratton);
userServices.addUserToCollection(users.bob(), zeCollection);
userServices.addUserToCollection(users.chuckNorris(), zeCollection);
cmisSession = givenAdminSessionOnZeCollection();
recordServices.update(users.chuckNorrisIn(zeCollection).setCollectionWriteAccess(true).getWrappedRecord());
CmisAcceptanceTestSetup.giveUseCMISPermissionToUsers(getModelLayerFactory());
}
@Test
public void whenCreatingAFolderThenFolderHasRightValues()
throws Exception {
givenTimeIs(new LocalDate(2014, 11, 04));
String id = createNewFolderWithTestProperties("zetaxo1_category1", "folder_default");
Record createdRecord = recordServices.getDocumentById(id);
assertThat(createdRecord).isNotNull();
assertThat(createdRecord.get(Schemas.TITLE)).isEqualTo("testFolder");
assertThat(((LocalDateTime) createdRecord.get(Schemas.CREATED_ON)).toDate()).isEqualTo(
new LocalDate(2014, 11, 04).toDate());
assertThat(createdRecord.get(Schemas.CREATED_BY)).isEqualTo(users.chuckNorrisIn(zeCollection).getId());
assertThat(createdRecord.get(zeCollectionSchemas.folderSchema.taxonomy1())).isEqualTo("zetaxo1_category1");
assertThat(createdRecord.get(zeCollectionSchemas.folderSchema.numberMeta())).isEqualTo(42.666);
}
@Test
public void whenCreatingACategoryThenCategoryHasRightValues()
throws Exception {
givenTimeIs(new LocalDate(2014, 11, 04));
String id = createNewCategoryWithTestProperties("zetaxo1_fond1", "category_default");
Record createdRecord = recordServices.getDocumentById(id);
assertThat(createdRecord).isNotNull();
assertThat(createdRecord.get(Schemas.TITLE)).isEqualTo("testCategory");
assertThat(((LocalDateTime) createdRecord.get(Schemas.CREATED_ON)).toDate()).isEqualTo(
new LocalDate(2014, 11, 04).toDate());
assertThat(createdRecord.get(Schemas.CREATED_BY)).isEqualTo(users.chuckNorrisIn(zeCollection).getId());
assertThat(createdRecord.get(zeCollectionSchemas.category.parentOfDocumentFond())).isEqualTo("zetaxo1_fond1");
}
@Test
public void whenCreatingACollectionThenException()
throws Exception {
String rootId = cmisSession.getRootFolder().getId();
try {
createNewCollection(rootId, "collection_default");
} catch (CmisRuntimeException ex) {
assertThat(ex.getMessage()).isEqualTo("Cannot create collection via CMIS.");
}
}
@Test
public void whenCreatingATaxonomyThenException()
throws Exception {
try {
createNewTaxonomy(zeCollection, "taxonomy");
} catch (CmisRuntimeException ex) {
assertThat(ex.getMessage()).isEqualTo("Cannot create taxonomy via CMIS.");
}
}
private String createNewFolderWithTestProperties(String parent, String objectType) {
ObjectId parentFolderId = new ObjectIdImpl(parent);
Map<String, Object> newFolderProperties = new HashMap<>();
newFolderProperties.put(PropertyIds.OBJECT_TYPE_ID, objectType);
newFolderProperties.put("title", "testFolder");
newFolderProperties.put("numberMeta", 42.666);
return cmisSession.createFolder(newFolderProperties, parentFolderId).getId();
}
private String createNewCategoryWithTestProperties(String parent, String objectType) {
ObjectId parentFolderId = new ObjectIdImpl(parent);
Map<String, Object> newFolderProperties = new HashMap<>();
newFolderProperties.put(PropertyIds.OBJECT_TYPE_ID, objectType);
newFolderProperties.put("title", "testCategory");
return cmisSession.createFolder(newFolderProperties, parentFolderId).getId();
}
private String createNewCollection(String parent, String objectType) {
ObjectId parentFolderId = new ObjectIdImpl(parent);
Map<String, Object> newFolderProperties = new HashMap<>();
newFolderProperties.put(PropertyIds.OBJECT_TYPE_ID, objectType);
newFolderProperties.put("title", "testCollection");
return cmisSession.createFolder(newFolderProperties, parentFolderId).getId();
}
private String createNewTaxonomy(String parent, String objectType) {
ObjectId parentFolderId = new ObjectIdImpl(parent);
Map<String, Object> newFolderProperties = new HashMap<>();
newFolderProperties.put(PropertyIds.OBJECT_TYPE_ID, objectType);
return cmisSession.createFolder(newFolderProperties, parentFolderId).getId();
}
private Session givenAdminSessionOnZeCollection()
throws RecordServicesException {
return newCmisSessionBuilder().authenticatedBy(chuckNorrisKey, chuckNorrisToken).onCollection(zeCollection).build();
}
}