blob: e264edbc168f4213f2c7d644f00da42c9f24e80f [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.chemistry.opencmis.tck.tests.crud;
import java.math.BigInteger;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.chemistry.opencmis.client.api.CmisObject;
import org.apache.chemistry.opencmis.client.api.Document;
import org.apache.chemistry.opencmis.client.api.Folder;
import org.apache.chemistry.opencmis.client.api.OperationContext;
import org.apache.chemistry.opencmis.client.api.Property;
import org.apache.chemistry.opencmis.client.api.Session;
import org.apache.chemistry.opencmis.commons.data.ObjectData;
import org.apache.chemistry.opencmis.commons.data.ObjectInFolderData;
import org.apache.chemistry.opencmis.commons.data.ObjectInFolderList;
import org.apache.chemistry.opencmis.commons.data.ObjectParentData;
import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
import org.apache.chemistry.opencmis.tck.CmisTestResult;
import org.apache.chemistry.opencmis.tck.CmisTestResultStatus;
import org.apache.chemistry.opencmis.tck.impl.AbstractSessionTest;
public class OperationContextTest extends AbstractSessionTest {
private static final String CONTENT = "TCK test content.";
@Override
public void init(Map<String, String> parameters) {
super.init(parameters);
setName("Operation Context");
setDescription("Creates a document, retrieves a minimal set of details, checks it, and finally deletes the document.");
}
@Override
public void run(Session session) {
// create a test folder
Folder testFolder = createTestFolder(session);
try {
// create a test document
Document document = createDocument(session, testFolder, "testdoc.txt", CONTENT);
// high-level API tests
runHighLevelApiTests(session, testFolder, document);
// low-level API tests
runLowLevelApiTests(session, testFolder, document);
// clean up
document.delete(true);
} finally {
// delete the test folder
deleteTestFolder();
}
}
/**
* Checks for not requested properties, Allowable Actions, ACLs, renditions,
* relationships, and policies.
*/
public void runHighLevelApiTests(Session session, Folder testFolder, Document testDocument) {
CmisTestResult f;
// only select some base properties
Set<String> properties = new HashSet<String>();
properties.add("cmis:objectId");
properties.add("cmis:baseTypeId");
properties.add("cmis:objectTypeId");
OperationContext context = session.createOperationContext();
context.setCacheEnabled(false);
context.setFilter(properties);
context.setIncludeAcls(false);
context.setIncludeAllowableActions(false);
context.setIncludePathSegments(false);
context.setIncludePolicies(false);
context.setIncludeRelationships(IncludeRelationships.NONE);
context.setLoadSecondaryTypeProperties(false);
context.setRenditionFilterString("cmis:none");
// get the object with the OperationContext
Document doc1 = (Document) session.getObject(testDocument, context);
// check properties
for (Property<?> prop : doc1.getProperties()) {
if (!properties.contains(prop.getDefinition().getQueryName())) {
addResult(createResult(CmisTestResultStatus.WARNING,
"getObject() delivered the property '" + prop.getId()
+ "', although it has not been requested."));
}
}
// check other details
f = createResult(CmisTestResultStatus.WARNING,
"getObject() delivered ACLs, although they have not been requested.");
addResult(assertNull(doc1.getAcl(), null, f));
f = createResult(CmisTestResultStatus.WARNING,
"getObject() delivered Allowable Actions, although they have not been requested.");
addResult(assertNull(doc1.getAllowableActions(), null, f));
f = createResult(CmisTestResultStatus.WARNING,
"getObject() delivered policies, although they have not been requested.");
addResult(assertListNullOrEmpty(doc1.getPolicies(), null, f));
f = createResult(CmisTestResultStatus.WARNING,
"getObject() delivered relationships, although they have not been requested.");
addResult(assertListNullOrEmpty(doc1.getRelationships(), null, f));
f = createResult(CmisTestResultStatus.WARNING,
"getObject() delivered renditions, although they have not been requested.");
addResult(assertListNullOrEmpty(doc1.getRenditions(), null, f));
// get the test folder children with the OperationContext
for (CmisObject child : testFolder.getChildren(context)) {
if (child.getId().equals(testDocument.getId())) {
// check properties
for (Property<?> prop : child.getProperties()) {
if (!properties.contains(prop.getDefinition().getQueryName())) {
addResult(createResult(CmisTestResultStatus.WARNING, "getChildren() delivered the property '"
+ prop.getId() + "', although it has not been requested."));
}
}
// check other details
f = createResult(CmisTestResultStatus.INFO, "getChildren() delivered ACLs, which is not required.");
addResult(assertNull(child.getAcl(), null, f));
f = createResult(CmisTestResultStatus.WARNING,
"getChildren() delivered Allowable Actions, although they have not been requested.");
addResult(assertNull(child.getAllowableActions(), null, f));
f = createResult(CmisTestResultStatus.INFO, "getChildren() delivered policies, which is not required.");
addResult(assertListNullOrEmpty(child.getPolicies(), null, f));
f = createResult(CmisTestResultStatus.WARNING,
"getChildren() delivered relationships, although they have not been requested.");
addResult(assertListNullOrEmpty(child.getRelationships(), null, f));
f = createResult(CmisTestResultStatus.WARNING,
"getChildren() delivered renditions, although they have not been requested.");
addResult(assertListNullOrEmpty(child.getRenditions(), null, f));
break;
}
}
}
/**
* Checks for change events and path segments.
*/
public void runLowLevelApiTests(Session session, Folder testFolder, Document testDocument) {
CmisTestResult f;
String repositoryId = session.getRepositoryInfo().getId();
String filter = "cmis:objectId,cmis:baseTypeId,cmis:objectTypeId";
// get the object
ObjectData doc1 = session
.getBinding()
.getObjectService()
.getObject(repositoryId, testDocument.getId(), filter, Boolean.FALSE, IncludeRelationships.NONE,
"cmis:none", Boolean.FALSE, Boolean.FALSE, null);
// check for change events
f = createResult(CmisTestResultStatus.WARNING,
"getObject() delivered a change event, which doesn't make sense.");
addResult(assertNull(doc1.getChangeEventInfo(), null, f));
// get the test folder children
ObjectInFolderList children = session
.getBinding()
.getNavigationService()
.getChildren(repositoryId, testFolder.getId(), filter, null, Boolean.FALSE, IncludeRelationships.NONE,
"cmis:none", Boolean.FALSE, null, BigInteger.ZERO, null);
// check for path segments
for (ObjectInFolderData child : children.getObjects()) {
f = createResult(CmisTestResultStatus.WARNING,
"getChildren() delivered a path segment, although it hasn't been requested.");
addResult(assertNull(child.getPathSegment(), null, f));
}
// get the document parent
List<ObjectParentData> parents = session
.getBinding()
.getNavigationService()
.getObjectParents(repositoryId, testDocument.getId(), filter, Boolean.FALSE, IncludeRelationships.NONE,
"cmis:none", Boolean.FALSE, null);
// check for relative path segments
for (ObjectParentData parent : parents) {
f = createResult(CmisTestResultStatus.WARNING,
"getObjectParents() delivered a relative path segment, although it hasn't been requested.");
addResult(assertNull(parent.getRelativePathSegment(), null, f));
}
}
}