/**
* Copyright (C) 2010 eXo Platform SAS.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.xcmis.spi.tck;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import org.xcmis.spi.CmisConstants;
import org.xcmis.spi.ItemsList;
import org.xcmis.spi.model.CmisObject;
import org.xcmis.spi.model.RelationshipDirection;
import org.xcmis.spi.model.TypeDefinition;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
public class RelationshipTest extends BaseTest
{
private static String document0;
private static String document1;
private static String document2;
private static String relationship0_1;
private static String relationship1_2;
private static String relationship2_0;
private static TypeDefinition relationshipType;
private static String testRootFolderId;
@BeforeClass
public static void start() throws Exception
{
TypeDefinition folderType = connection.getTypeDefinition(CmisConstants.FOLDER);
testRootFolderId = createFolder(rootFolderID, folderType.getId(), "relationship_testroot", null, null, null);
if (isRelationshipsSupported)
{
relationshipType = connection.getTypeDefinition(CmisConstants.RELATIONSHIP);
TypeDefinition documentType = connection.getTypeDefinition(CmisConstants.DOCUMENT);
document0 =
createDocument(testRootFolderId, documentType.getId(), generateName(documentType, null), null, null, null,
null, null);
document1 =
createDocument(testRootFolderId, documentType.getId(), generateName(documentType, null), null, null, null,
null, null);
document2 =
createDocument(testRootFolderId, documentType.getId(), generateName(documentType, null), null, null, null,
null, null);
relationship0_1 =
createRelationship(relationshipType.getId(), generateName(relationshipType, null), document0, document1,
null, null, null);
relationship1_2 =
createRelationship(relationshipType.getId(), generateName(relationshipType, null), document1, document2,
null, null, null);
relationship2_0 =
createRelationship(relationshipType.getId(), generateName(relationshipType, null), document2, document0,
null, null, null);
}
System.out.println("Running Relationship Service tests");
}
@AfterClass
public static void stop() throws Exception
{
if (testRootFolderId != null)
{
clear(testRootFolderId);
}
}
/**
* 2.2.8.1 getObjectRelationships.
* <p>
* See section 2.2.1.1 "Paging". If optional attribute 'maxItems' specified
* then number of items contained in the response must not exceed specified
* value.
* </p>
*
* @throws Exception
*/
@Test
public void testGetChildren_MaxItems() throws Exception
{
if (!isRelationshipsSupported)
{
return;
}
ItemsList<CmisObject> relationships =
connection
.getObjectRelationships(document0, RelationshipDirection.EITHER, null, true, false, true, null, 1, 0);
assertTrue("Wrong number of items in result. ", relationships.getItems().size() <= 1);
}
/**
* 2.2.8.1 getObjectRelationships.
* <p>
* Gets all or a subset of relationships associated with an independent
* object.
* </p>
*
* @throws Exception
*/
@Test
public void testGetObjectRelationships() throws Exception
{
if (!isRelationshipsSupported)
{
return;
}
ItemsList<CmisObject> relationships =
connection.getObjectRelationships(document0, RelationshipDirection.EITHER, null, true, false, true, null, -1,
0);
Set<String> ids = new HashSet<String>(relationships.getItems().size());
for (CmisObject o : relationships.getItems())
{
ids.add(o.getObjectInfo().getId());
}
assertEquals(2, ids.size());
assertTrue("Expected relationship " + relationship0_1 + "is not found in result. ", ids.contains(relationship0_1));
assertTrue("Expected relationship " + relationship2_0 + "is not found in result. ", ids.contains(relationship2_0));
}
/**
* 2.2.8.1 getObjectRelationships.
* <p>
* Gets all or a subset of relationships associated with an independent
* object and include allowable actions.
* </p>
*
* @throws Exception
*/
@Test
public void testGetObjectRelationships_AllowableActions() throws Exception
{
if (!isRelationshipsSupported)
{
return;
}
ItemsList<CmisObject> relationships =
connection
.getObjectRelationships(document0, RelationshipDirection.EITHER, null, true, true, true, null, -1, 0);
for (CmisObject o : relationships.getItems())
{
assertNotNull("Allowable actions must be include in response. ", o.getAllowableActions());
}
}
/**
* 2.2.8.1 getObjectRelationships.
* <p>
* Gets all or a subset of relationships associated with an independent
* object with respect to direction argument.
* </p>
*
* @throws Exception
*/
@Test
public void testGetObjectRelationships_Direction() throws Exception
{
if (!isRelationshipsSupported)
{
return;
}
ItemsList<CmisObject> relationships =
connection.getObjectRelationships(document0, RelationshipDirection.SOURCE, null, true, false, true, null, -1,
0);
Set<String> ids = new HashSet<String>(relationships.getItems().size());
for (CmisObject o : relationships.getItems())
{
ids.add(o.getObjectInfo().getId());
}
assertEquals(1, ids.size());
assertTrue("Expected relationship " + relationship0_1 + "is not found in result. ", ids.contains(relationship0_1));
}
/**
* 2.2.8.1 getObjectRelationships.
* <p>
* See section 2.2.1.1 "Paging". If optional attribute 'skipCount' is
* specified then specified number of items must be skipped in result.
* </p>
*
* @throws Exception
*/
@Test
public void testGetObjectRelationships_SkipCount() throws Exception
{
if (!isRelationshipsSupported)
{
return;
}
ItemsList<CmisObject> relationships =
connection.getObjectRelationships(document0, RelationshipDirection.EITHER, null, true, false, true, null, -1,
0);
// Get all items first.
List<String> relationshipIDs = new ArrayList<String>(2);
for (CmisObject o : relationships.getItems())
{
relationshipIDs.add(o.getObjectInfo().getId());
}
assertEquals(2, relationshipIDs.size());
relationships =
connection.getObjectRelationships(document0, RelationshipDirection.EITHER, null, true, false, true, null, -1,
1);
List<String> relationshipIDsPage = new ArrayList<String>(6);
for (CmisObject o : relationships.getItems())
{
relationshipIDsPage.add(o.getObjectInfo().getId());
}
assertEquals(1, relationshipIDsPage.size());
// Skip 1 items.
Iterator<String> iterator0 = relationshipIDs.iterator();
iterator0.next();
iterator0.remove();
assertEquals(relationshipIDs, relationshipIDsPage);
}
}