/* vim: set ts=2 et sw=2 cindent fo=qroca: */
package com.globant.katari.core.web;
import java.util.HashMap;
import java.util.Map;
import java.util.Locale;
import org.junit.Test;
import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;
import com.globant.katari.core.spring.KatariMessageSource;
/* Test case for the menu node component
*/
public class MenuNodeTest {
@Test
public void testMenuNode_new() {
// create the menu bar
MenuBar menuBar = new MenuBar("root", "root");
// create children nodes
MenuNode childA = new MenuNode(menuBar, "admin", "Users", 0, null, "link");
MenuNode childB = new MenuNode(menuBar, "admin", "Clients", 1, null,
"link");
assertEquals(menuBar, childA.getParent());
assertEquals(menuBar, childB.getParent());
assertEquals(2, menuBar.getChildNodes().size());
}
@Test
public void testGetChildNodes_sorted() {
// create the menu bar
MenuBar menuBar = new MenuBar("root", "rott");
// create children nodes
MenuNode childA = new MenuNode(menuBar, "admin", "Users", 0, null, "link");
MenuNode childB = new MenuNode(menuBar, "admin", "Clients", 1,
null, "link");
assertEquals(childA, menuBar.getChildNodes().get(0));
assertEquals(childB, menuBar.getChildNodes().get(1));
}
@Test
public void testGetChildNodes_count() {
// create the menu bar
MenuBar menuBar = new MenuBar("root", "root");
// create children nodes
new MenuNode(menuBar, "admin", "Users", 0, null, "link");
new MenuNode(menuBar, "admin", "Clients", 1, null, "link");
assertEquals(2, menuBar.getChildNodes().size());
}
@Test
public void testGetChildNodes_index() {
// create the menu bar
MenuBar menuBar = new MenuBar("root", "root");
// create children nodes
MenuNode childA = new MenuNode(menuBar, "admin", "Users", 0, null,
"link");
MenuNode childB = new MenuNode(menuBar, "admin", "Clients", 1,
null, "link");
assertEquals(0, menuBar.getChildNodes().indexOf(childA));
assertEquals(1, menuBar.getChildNodes().indexOf(childB));
}
@Test
public void testGetPath() {
// create the menu bar
MenuBar menuBar = new MenuBar("root", "root");
// create children nodes
MenuNode levelA = new MenuNode(menuBar, "admin", "levelA", 0, null);
MenuNode levelB = new MenuNode(levelA, "admin", "levelB", 0, null);
MenuNode levelC = new MenuNode(levelB, "admin", "levelC", 0, null, "link");
assertEquals("/root/levelA/levelB/levelC", levelC.getPath());
}
@Test
public void testEquals() {
// create the menu bar
MenuBar menuBar = new MenuBar("root", "root");
// create children nodes
MenuNode levelA = new MenuNode(menuBar, "admin", "levelA", 0, null);
MenuNode levelB1 = new MenuNode(levelA, "admin", "levelB", 0, null);
MenuNode levelB2 = new MenuNode(levelA, "admin", "levelB", 0, null, "link");
assertEquals(true, levelB1.equals(levelB2));
}
@Test
public void testMerge() {
// create the menu bar
MenuBar menuBar1 = new MenuBar("root", "root");
// create children nodes
MenuNode levelA1 = new MenuNode(menuBar1, "admin", "levelA", 0, null);
MenuNode levelB1 = new MenuNode(levelA1, "admin", "levelB", 0, null);
MenuNode levelC1 = new MenuNode(levelB1, "admin", "levelC1", 0,
null, "link");
// create the menu bar
MenuBar menuBar2 = new MenuBar("root", "root");
// create children nodes
MenuNode levelA2 = new MenuNode(menuBar2, "admin", "levelA", 0, null);
MenuNode levelB2 = new MenuNode(levelA2, "admin", "levelB", 0, null);
MenuNode levelC2 = new MenuNode(levelB2, "admin", "levelC2", 0,
null, "link");
// merge
menuBar1.merge(menuBar2, new HashMap<String, String>(), "");
assertEquals(1, menuBar1.getChildNodes().size());
assertEquals(1, menuBar1.getChildNodes().get(0).getChildNodes()
.size());
assertEquals(2, menuBar1.getChildNodes().get(0).getChildNodes()
.get(0).getChildNodes().size());
assertEquals(levelB1, levelC1.getParent());
assertEquals(levelB1, levelC2.getParent());
}
// Tests a merge with variable replacement.
@Test
public void testMergeWithReplacement() {
MenuBar topBar = new MenuBar("root", "root");
// create the menu bar
MenuBar menuBar1 = new MenuBar("root", "root");
// create children nodes
new MenuNode(menuBar1, "admin", "levelA1", 0, null, "link-1");
// create the menu bar
MenuBar menuBar2 = new MenuBar("root", "root");
// create children nodes
new MenuNode(menuBar2, "admin", "levelA2", 0, null, "${var1}/link-2");
Map<String, String> variables = new HashMap<String, String>();
variables.put("var1", "value-1");
// merge
topBar.merge(menuBar1, variables, "prefix");
topBar.merge(menuBar2, variables, "prefix");
assertEquals(2, topBar.getChildNodes().size());
assertEquals("/prefix/link-1", topBar.getChildNodes().get(0).getLinkPath());
assertEquals("/value-1/link-2", topBar.getChildNodes().get(1).getLinkPath());
}
// Tests tha that merge correctly prepends the module prefix to the merged
// nodes.
@Test
public void testMerge_rootModule() {
// create the menu bar
MenuBar menuBar1 = new MenuBar("root", "root");
// create children nodes
new MenuNode(menuBar1, "admin", "levelA", 0, null);
new MenuNode(menuBar1, "admin", "levelB1", 0, null, "link");
// create the menu bar
MenuBar menuBar2 = new MenuBar("root", "root");
// create children nodes
new MenuNode(menuBar2, "admin", "levelA", 0, null);
MenuNode levelB2 = new MenuNode(menuBar2, "admin", "levelB2", 0,
null, "");
// merge
menuBar1.merge(menuBar2, new HashMap<String, String>(), "somepref");
assertEquals("/somepref/", levelB2.getLinkPath());
}
// Tests tha that merge correctly adds the default home of a non leaf
// node.
@Test
public void testMerge_defaultHome() {
// create the menu bar
MenuBar menuBar1 = new MenuBar("root", "root");
// create children nodes
MenuNode levelA1 = new MenuNode(menuBar1, "admin", "levelA", 0, null);
new MenuNode(menuBar1, "admin", "levelB1", 0, null, "link");
// create the menu bar
MenuBar menuBar2 = new MenuBar("root", "root");
// create children nodes
new MenuNode(menuBar2, "admin", "levelA", 0, null);
new MenuNode(menuBar2, "admin", "levelB2", 0, null, "");
// merge
menuBar1.merge(menuBar2, new HashMap<String, String>(), "somepref");
menuBar1.getHome().equals(levelA1);
}
// Tests that merge correctly adds the default home of a non leaf node
// when the target menu is empty.
@Test
public void testMerge_defaultHomeEmptyTarget() {
// create the menu bar
MenuBar menuBar1 = new MenuBar("root", "root");
// create the menu bar
MenuBar menuBar2 = new MenuBar("root", "root");
// create children nodes
MenuNode levelA2 = new MenuNode(menuBar2, "admin", "levelA", 0, null);
new MenuNode(menuBar2, "admin", "levelB2", 0, null, "");
// merge
menuBar1.merge(menuBar2, new HashMap<String, String>(), "somepref");
menuBar1.getHome().equals(levelA2);
}
@Test(expected = IllegalArgumentException.class)
public void testChildrenNotAllowedInLeaf() {
// create the menu bar
MenuBar menuBar = new MenuBar("root", "root");
// create children nodes
MenuNode child = new MenuNode(menuBar, "admin", "Users", 0, null, "link");
// Get the children. Should throw an exception.
child.getChildNodes();
}
/* Tests that all ancestors of a node has the home correctly set.
*/
@Test
public void testHomeAncestors() {
// create the menu bar
MenuBar menuBar = new MenuBar("root", "root");
// create children nodes
MenuNode levelA = new MenuNode(menuBar, "admin", "levelA", 0, null);
MenuNode levelB = new MenuNode(levelA, "admin", "levelB", 0, null);
MenuNode levelC = new MenuNode(levelB, "admin", "levelC", 0, null, "link");
assertEquals(levelC, levelB.getHome());
assertEquals(levelC, levelA.getHome());
assertEquals(levelC, menuBar.getHome());
}
@Test public void getDisplayName() {
MenuBar menuBar = new MenuBar("root", "root");
MenuNode menuNode = new MenuNode(menuBar, "admin", "levelA", 0, null);
assertThat(menuNode.getDisplayName(), is("admin"));
}
@Test public void getDisplayName_withMessageSource() {
MenuBar menuBar = new MenuBar("root", "root");
MenuNode menuNode = new MenuNode(menuBar, "admin", "levelA", 0, null);
KatariMessageSource messageSource = new KatariMessageSource(Locale.US);
messageSource.setBasename("classpath:katariMessageSource");
menuBar.setMessageSource(messageSource);
assertThat(menuNode.getDisplayName(), is("Administration"));
}
@Test public void getDisplayName_mergeWithOtherMessageSource() {
MenuBar menuBar1 = new MenuBar("root", "root");
MenuNode menuNode1 = new MenuNode(menuBar1, "admin", "levelA", 0, null);
MenuBar menuBar2 = new MenuBar("root", "root");
MenuNode menuNode2 = new MenuNode(menuBar2, "admin", "levelA", 0, null);
KatariMessageSource messageSource = new KatariMessageSource(Locale.US);
messageSource.setBasename("classpath:katariMessageSource");
menuBar2.setMessageSource(messageSource);
assertThat(menuNode1.getDisplayName(), is("admin"));
assertThat(menuNode2.getDisplayName(), is("Administration"));
menuBar1.merge(menuBar2, new HashMap<String, String>(), "");
assertThat(menuNode1.getDisplayName(), is("Administration"));
assertThat(menuNode2.getDisplayName(), is("Administration"));
}
@Test public void getDisplayName_mergeWithThisMessageSource() {
MenuBar menuBar1 = new MenuBar("root", "root");
MenuNode menuNode1 = new MenuNode(menuBar1, "admin", "levelA", 0, null);
MenuBar menuBar2 = new MenuBar("root", "root");
MenuNode menuNode2 = new MenuNode(menuBar2, "admin", "levelA", 0, null);
KatariMessageSource messageSource = new KatariMessageSource(Locale.US);
messageSource.setBasename("classpath:katariMessageSource");
menuBar2.setMessageSource(messageSource);
assertThat(menuNode1.getDisplayName(), is("admin"));
assertThat(menuNode2.getDisplayName(), is("Administration"));
menuBar2.merge(menuBar1, new HashMap<String, String>(), "");
assertThat(menuNode1.getDisplayName(), is("admin"));
assertThat(menuNode2.getDisplayName(), is("Administration"));
}
}