package com.globant.katari.core.security; import static org.easymock.EasyMock.expect; import static org.easymock.EasyMock.createMock; import static org.easymock.EasyMock.replay; import static org.easymock.EasyMock.verify; import java.util.List; import static org.junit.Assert.assertThat; import static org.hamcrest.CoreMatchers.*; import org.junit.Before; import org.junit.Test; import org.easymock.EasyMock; import com.globant.katari.core.web.MenuNode; import com.globant.katari.tools.ListFactory; public class MenuAccessFiltererTest { private static final String DENIED_URL = "/module/mocked-module/denied.do"; private static final String GRANTED_URL = "/module/mocked-module/granted.do"; /** * The MenuAccessFilterer. */ private MenuAccessFilterer filterer; /** * The {@link SecureUrlAccessHelper}. * It is never null. */ private SecureUrlAccessHelper accessHelper; @Before public void setUp() throws Exception { accessHelper = EasyMock.createMock(SecureUrlAccessHelper.class); EasyMock.expect(accessHelper.canAccessUrl(null, "/dummy-ctx" + GRANTED_URL)) .andReturn(true).anyTimes(); EasyMock.expect(accessHelper.canAccessUrl(null, "/dummy-ctx" + DENIED_URL)) .andReturn(false).anyTimes(); EasyMock.replay(accessHelper); } /** * It test the normal behavior of the MenuAccessFilterer. */ @Test public void testFilteredMenuNodes() { MenuNode node1 = createMock(MenuNode.class); MenuNode node2 = createMock(MenuNode.class); MenuNode node3 = createMock(MenuNode.class); MenuNode node4 = createMock(MenuNode.class); expect(node1.getLinkPath()).andReturn(GRANTED_URL); expect(node1.isLeaf()).andReturn(true).anyTimes(); expect(node2.getLinkPath()).andReturn(GRANTED_URL); expect(node2.isLeaf()).andReturn(true).anyTimes(); expect(node3.getLinkPath()).andReturn(GRANTED_URL); expect(node3.isLeaf()).andReturn(true).anyTimes(); expect(node4.getLinkPath()).andReturn(GRANTED_URL); expect(node4.isLeaf()).andReturn(true).anyTimes(); replay(node1); replay(node2); replay(node3); replay(node4); List<MenuNode> nodes = ListFactory.create(node1, node2, node3, node4); filterer = new MenuAccessFilterer(accessHelper); List<MenuNode> filteredNodes = filterer.filterMenuNodes(nodes); verify(node1); verify(node2); verify(node3); verify(node4); assertThat(filteredNodes.size(), is(4)); assertThat(filteredNodes.get(0), is(node1)); assertThat(filteredNodes.get(1), is(node2)); assertThat(filteredNodes.get(2), is(node3)); assertThat(filteredNodes.get(3), is(node4)); } @Test public void testFilteredMenuNodes_BranchWithDeniedChildren() { MenuNode deniedRootNode1 = createMock(MenuNode.class); MenuNode grantedRootNode2 = createMock(MenuNode.class); MenuNode grantedRootNode3 = createMock(MenuNode.class); MenuNode grantedRootNode4 = createMock(MenuNode.class); MenuNode emptyBranchNode5 = createMock(MenuNode.class); MenuNode deniedChildNode5_1 = createMock(MenuNode.class); MenuNode deniedChildNode5_2 = createMock(MenuNode.class); expect(deniedRootNode1.getLinkPath()).andReturn(DENIED_URL); expect(deniedRootNode1.isLeaf()).andReturn(true).anyTimes(); expect(grantedRootNode2.getLinkPath()).andReturn(GRANTED_URL); expect(grantedRootNode2.isLeaf()).andReturn(true).anyTimes(); expect(grantedRootNode3.getLinkPath()).andReturn(GRANTED_URL); expect(grantedRootNode3.isLeaf()).andReturn(true).anyTimes(); expect(grantedRootNode4.getLinkPath()).andReturn(GRANTED_URL); expect(grantedRootNode4.isLeaf()).andReturn(true).anyTimes(); expect(deniedChildNode5_1.getLinkPath()).andReturn(DENIED_URL); expect(deniedChildNode5_1.isLeaf()).andReturn(true).anyTimes(); expect(deniedChildNode5_2.getLinkPath()).andReturn(DENIED_URL); expect(deniedChildNode5_2.isLeaf()).andReturn(true).anyTimes(); expect(emptyBranchNode5.isLeaf()).andReturn(false).anyTimes(); List<MenuNode> children = ListFactory.create(deniedChildNode5_1, deniedChildNode5_2); expect(emptyBranchNode5.getChildNodes()).andReturn(children); replay(deniedRootNode1); replay(grantedRootNode2); replay(grantedRootNode3); replay(grantedRootNode4); replay(emptyBranchNode5); replay(deniedChildNode5_1); replay(deniedChildNode5_2); List<MenuNode> nodes = ListFactory.create(deniedRootNode1, grantedRootNode2, grantedRootNode3, grantedRootNode4, emptyBranchNode5); filterer = new MenuAccessFilterer(accessHelper); List<MenuNode> filteredNodes = filterer.filterMenuNodes(nodes); verify(deniedRootNode1); verify(grantedRootNode2); verify(grantedRootNode3); verify(grantedRootNode4); verify(emptyBranchNode5); verify(deniedChildNode5_1); verify(deniedChildNode5_2); assertThat(filteredNodes.size(), is(3)); assertThat(filteredNodes.get(0), is(grantedRootNode2)); assertThat(filteredNodes.get(1), is(grantedRootNode3)); assertThat(filteredNodes.get(2), is(grantedRootNode4)); } @Test public void testFilteredMenuNodes_BranchWithGrantedAndDeniedChildren() { MenuNode deniedRootNode1 = createMock(MenuNode.class); MenuNode grantedRootNode2 = createMock(MenuNode.class); MenuNode grantedRootNode3 = createMock(MenuNode.class); MenuNode grantedRootNode4 = createMock(MenuNode.class); MenuNode grantedBranchNode5 = createMock(MenuNode.class); MenuNode deniedChildNode5_1 = createMock(MenuNode.class); MenuNode deniedChildNode5_2 = createMock(MenuNode.class); MenuNode grantedChildNode5_3 = createMock(MenuNode.class); expect(deniedRootNode1.getLinkPath()).andReturn(DENIED_URL); expect(deniedRootNode1.isLeaf()).andReturn(true).anyTimes(); expect(grantedRootNode2.getLinkPath()).andReturn(GRANTED_URL); expect(grantedRootNode2.isLeaf()).andReturn(true).anyTimes(); expect(grantedRootNode3.getLinkPath()).andReturn(GRANTED_URL); expect(grantedRootNode3.isLeaf()).andReturn(true).anyTimes(); expect(grantedRootNode4.getLinkPath()).andReturn(GRANTED_URL); expect(grantedRootNode4.isLeaf()).andReturn(true).anyTimes(); expect(deniedChildNode5_1.getLinkPath()).andReturn(DENIED_URL).anyTimes(); expect(deniedChildNode5_1.isLeaf()).andReturn(true).anyTimes(); expect(deniedChildNode5_2.getLinkPath()).andReturn(DENIED_URL).anyTimes(); expect(deniedChildNode5_2.isLeaf()).andReturn(true).anyTimes(); expect(grantedChildNode5_3.getLinkPath()).andReturn(GRANTED_URL).anyTimes(); expect(grantedChildNode5_3.isLeaf()).andReturn(true).anyTimes(); expect(grantedBranchNode5.isLeaf()).andReturn(false).anyTimes(); List<MenuNode> children = ListFactory.create(deniedChildNode5_1, deniedChildNode5_2, grantedChildNode5_3); expect(grantedBranchNode5.getChildNodes()).andReturn(children).anyTimes(); replay(deniedRootNode1); replay(grantedRootNode2); replay(grantedRootNode3); replay(grantedRootNode4); replay(grantedBranchNode5); replay(deniedChildNode5_1); replay(deniedChildNode5_2); replay(grantedChildNode5_3); List<MenuNode> nodes = ListFactory.create(deniedRootNode1, grantedRootNode2, grantedRootNode3, grantedRootNode4, grantedBranchNode5); filterer = new MenuAccessFilterer(accessHelper); List<MenuNode> filteredNodes = filterer.filterMenuNodes(nodes); assertThat(filteredNodes.size(), is(4)); assertThat(filteredNodes.get(0), is(grantedRootNode2)); assertThat(filteredNodes.get(1), is(grantedRootNode3)); assertThat(filteredNodes.get(2), is(grantedRootNode4)); assertThat(filteredNodes.get(3), is(grantedBranchNode5)); List<MenuNode> filteredChildNodes = filterer .filterMenuNodes(grantedBranchNode5.getChildNodes()); assertThat(filteredChildNodes.size(), is(1)); assertThat(filteredChildNodes.get(0), is(grantedChildNode5_3)); verify(deniedRootNode1); verify(grantedRootNode2); verify(grantedRootNode3); verify(grantedRootNode4); verify(grantedBranchNode5); verify(deniedChildNode5_1); verify(deniedChildNode5_2); verify(grantedChildNode5_3); } @Test public void testFilteredMenuNodes_DeniedLeaf() { MenuNode deniedRootNode1 = createMock(MenuNode.class); MenuNode grantedRootNode2 = createMock(MenuNode.class); MenuNode grantedRootNode3 = createMock(MenuNode.class); MenuNode grantedRootNode4 = createMock(MenuNode.class); expect(deniedRootNode1.getLinkPath()).andReturn(DENIED_URL); expect(deniedRootNode1.isLeaf()).andReturn(true).anyTimes(); expect(grantedRootNode2.getLinkPath()).andReturn(GRANTED_URL); expect(grantedRootNode2.isLeaf()).andReturn(true).anyTimes(); expect(grantedRootNode3.getLinkPath()).andReturn(GRANTED_URL); expect(grantedRootNode3.isLeaf()).andReturn(true).anyTimes(); expect(grantedRootNode4.getLinkPath()).andReturn(GRANTED_URL); expect(grantedRootNode4.isLeaf()).andReturn(true).anyTimes(); replay(deniedRootNode1); replay(grantedRootNode2); replay(grantedRootNode3); replay(grantedRootNode4); List<MenuNode> nodes = ListFactory.create(deniedRootNode1, grantedRootNode2, grantedRootNode3, grantedRootNode4); filterer = new MenuAccessFilterer(accessHelper); List<MenuNode> filteredNodes = filterer.filterMenuNodes(nodes); verify(deniedRootNode1); verify(grantedRootNode2); verify(grantedRootNode3); verify(grantedRootNode4); assertThat(filteredNodes.size(), is(3)); assertThat(filteredNodes.get(0), is(grantedRootNode2)); assertThat(filteredNodes.get(1), is(grantedRootNode3)); assertThat(filteredNodes.get(2), is(grantedRootNode4)); } }