/******************************************************************************
* HierarchyUtilsTest.java - created by aaronz on Jul 31, 2007
*
* Copyright (c) 2007 Centre for Academic Research in Educational Technologies
* Licensed under the Educational Community License version 1.0
*
* A copy of the Educational Community License has been included in this
* distribution and is available at: http://www.opensource.org/licenses/ecl1.php
*
*****************************************************************************/
package org.sakaiproject.hierarchy.impl.test;
import java.util.HashSet;
import java.util.Set;
import junit.framework.TestCase;
import org.sakaiproject.hierarchy.dao.model.HierarchyNodeMetaData;
import org.sakaiproject.hierarchy.dao.model.HierarchyPersistentNode;
import org.sakaiproject.hierarchy.impl.utils.HierarchyImplUtils;
import org.sakaiproject.hierarchy.model.HierarchyNode;
/**
* Testing the utils class to make sure we can count on it
*
* @author Aaron Zeckoski (aaronz@vt.edu)
*/
public class HierarchyImplUtilsTest extends TestCase {
private char s = HierarchyImplUtils.SEPERATOR;
private String NODE1 = "1";
private String NODE2 = "2";
private String NODE3 = "3";
private String NODE30 = "30";
private String NODE41 = "41";
private String NODE42 = "42";
private String NODE50 = "50";
private String ENCODED_NODE1 = s + NODE1 + s;
private String ENCODED_1 = s + NODE1 + s + NODE3 + s + NODE30 + s;
private String ENCODED_2 = s + NODE2 + s + NODE30 + s + NODE41 + s + NODE50 + s;
private String ENCODED_3 = s + NODE30 + s + NODE42 + s;
private String ENCODED_1_41 = ENCODED_1 + NODE41 + s;
private String ENCODED_2_1 = s + NODE1 + ENCODED_2;
private String ENCODED_3_41 = s + NODE30 + s + NODE41 + s + NODE42 + s;
/* (non-Javadoc)
* @see junit.framework.TestCase#setUp()
*/
protected void setUp() throws Exception {
super.setUp();
}
/**
* Test method for {@link org.sakaiproject.hierarchy.impl.utils.HierarchyImplUtils#makeNode(org.sakaiproject.hierarchy.dao.model.HierarchyPersistentNode, org.sakaiproject.hierarchy.dao.model.HierarchyNodeMetaData)}.
*/
public void testMakeNodeHierarchyPersistentNodeHierarchyNodeMetaData() {
HierarchyNode node = null;
HierarchyNodeMetaData metaData = new HierarchyNodeMetaData(null, "HID", Boolean.FALSE, "aaronz", "Title", "Desc", "KEY", Boolean.FALSE);
HierarchyPersistentNode pNode = new HierarchyPersistentNode(ENCODED_NODE1, ENCODED_1);
pNode.setId( new Long(100) );
node = HierarchyImplUtils.makeNode(pNode, metaData);
assertNotNull(node);
assertEquals("100", node.id);
assertEquals("HID", node.hierarchyId);
assertEquals("Title", node.title);
assertEquals("Desc", node.description);
assertEquals("KEY", node.permToken);
assertNotNull(node.directParentNodeIds);
assertTrue(node.directParentNodeIds.contains(NODE1));
assertNotNull(node.parentNodeIds);
assertTrue(node.parentNodeIds.contains(NODE1));
assertTrue(node.parentNodeIds.contains(NODE3));
assertNotNull(node.directChildNodeIds);
assertTrue(node.directChildNodeIds.isEmpty());
assertNotNull(node.childNodeIds);
assertTrue(node.childNodeIds.isEmpty());
}
/**
* Test method for {@link org.sakaiproject.hierarchy.impl.utils.HierarchyImplUtils#makeNode(org.sakaiproject.hierarchy.dao.model.HierarchyNodeMetaData)}.
*/
public void testMakeNodeHierarchyNodeMetaData() {
HierarchyNode node = null;
// test that null meta causes null
node = HierarchyImplUtils.makeNode(null);
assertNull(node);
HierarchyPersistentNode pNode = null;
HierarchyNodeMetaData metaData = new HierarchyNodeMetaData(pNode, "HID", Boolean.FALSE, "aaronz", "Title", "Desc", null, Boolean.FALSE);
// test that invalid pNode causes death
try {
node = HierarchyImplUtils.makeNode(metaData);
fail("Should have thrown exception");
} catch (IllegalArgumentException e) {
assertNotNull(e);
}
pNode = new HierarchyPersistentNode(ENCODED_NODE1, ENCODED_1);
pNode.setId( new Long(100) );
metaData.setNode(pNode);
node = HierarchyImplUtils.makeNode(metaData);
assertNotNull(node);
assertEquals("100", node.id);
assertEquals("HID", node.hierarchyId);
assertEquals("Title", node.title);
assertEquals("Desc", node.description);
assertNotNull(node.directParentNodeIds);
assertTrue(node.directParentNodeIds.contains(NODE1));
assertNotNull(node.parentNodeIds);
assertTrue(node.parentNodeIds.contains(NODE1));
assertTrue(node.parentNodeIds.contains(NODE3));
assertNotNull(node.directChildNodeIds);
assertTrue(node.directChildNodeIds.isEmpty());
assertNotNull(node.childNodeIds);
assertTrue(node.childNodeIds.isEmpty());
}
/**
* Test method for {@link org.sakaiproject.hierarchy.impl.utils.HierarchyImplUtils#makeNodeIdSet(java.lang.String)}.
*/
public void testMakeNodeIdSet() {
Set<String> nodeIds = null;
nodeIds = HierarchyImplUtils.makeNodeIdSet(null);
assertNotNull(nodeIds);
assertTrue(nodeIds.isEmpty());
nodeIds = HierarchyImplUtils.makeNodeIdSet(ENCODED_1);
assertNotNull(nodeIds);
assertEquals(3, nodeIds.size());
assertTrue(nodeIds.contains(NODE1));
assertTrue(nodeIds.contains(NODE3));
assertTrue(nodeIds.contains(NODE30));
}
/**
* Test method for {@link org.sakaiproject.hierarchy.impl.utils.HierarchyImplUtils#makeEncodedNodeIdString(java.util.Set)}.
*/
public void testMakeEncodedNodeIdString() {
String encoded = null;
Set<String> nodeIds = new HashSet<String>();
// check that empty set generates null string
encoded = HierarchyImplUtils.makeEncodedNodeIdString(nodeIds);
assertNull(encoded);
nodeIds.add(NODE1);
nodeIds.add(NODE30);
nodeIds.add(NODE3);
// test converting set to string
encoded = HierarchyImplUtils.makeEncodedNodeIdString(nodeIds);
assertNotNull(encoded);
assertEquals(ENCODED_1, encoded);
nodeIds.add(NODE41);
// test converting set to string
encoded = HierarchyImplUtils.makeEncodedNodeIdString(nodeIds);
assertNotNull(encoded);
assertEquals(ENCODED_1_41, encoded);
}
/**
* Test method for {@link org.sakaiproject.hierarchy.impl.utils.HierarchyImplUtils#makeSingleEncodedNodeIdString(java.lang.String)}.
*/
public void testMakeSingleEncodedNodeIdString() {
String encoded = null;
// encoding a string
encoded = HierarchyImplUtils.makeSingleEncodedNodeIdString(NODE1);
assertNotNull(encoded);
assertEquals(ENCODED_NODE1, encoded);
encoded = HierarchyImplUtils.makeSingleEncodedNodeIdString(null);
assertNull(encoded);
}
/**
* Test method for {@link org.sakaiproject.hierarchy.impl.utils.HierarchyImplUtils#addSingleNodeIdToEncodedString(java.lang.String, java.lang.String)}.
*/
public void testAddSingleNodeIdToEncodedString() {
String encoded = null;
// try adding strings to various points in the encoded string
encoded = HierarchyImplUtils.addSingleNodeIdToEncodedString(ENCODED_2, NODE1);
assertNotNull(encoded);
assertEquals(ENCODED_2_1, encoded);
encoded = HierarchyImplUtils.addSingleNodeIdToEncodedString(ENCODED_3, NODE41);
assertNotNull(encoded);
assertEquals(ENCODED_3_41, encoded);
encoded = HierarchyImplUtils.addSingleNodeIdToEncodedString(ENCODED_1, NODE41);
assertNotNull(encoded);
assertEquals(ENCODED_1_41, encoded);
// try adding string that already exist
encoded = HierarchyImplUtils.addSingleNodeIdToEncodedString(ENCODED_1, NODE3);
assertNotNull(encoded);
assertEquals(ENCODED_1, encoded);
encoded = HierarchyImplUtils.addSingleNodeIdToEncodedString(ENCODED_2, NODE2);
assertNotNull(encoded);
assertEquals(ENCODED_2, encoded);
encoded = HierarchyImplUtils.addSingleNodeIdToEncodedString(ENCODED_3, NODE42);
assertNotNull(encoded);
assertEquals(ENCODED_3, encoded);
// now try out the edge cases
encoded = HierarchyImplUtils.addSingleNodeIdToEncodedString(null, NODE1);
assertNotNull(encoded);
assertEquals(ENCODED_NODE1, encoded);
encoded = HierarchyImplUtils.addSingleNodeIdToEncodedString(ENCODED_1, null);
assertNotNull(encoded);
assertEquals(ENCODED_1, encoded);
}
}