package org.molgenis.ui;
import org.molgenis.security.core.MolgenisPermissionService;
import org.molgenis.security.core.Permission;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import java.util.Arrays;
import java.util.Iterator;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static org.testng.Assert.*;
public class XmlMolgenisUiMenuTest
{
private MolgenisPermissionService molgenisPermissionService;
private Authentication authentication;
@BeforeMethod
public void setUp()
{
molgenisPermissionService = mock(MolgenisPermissionService.class);
authentication = mock(Authentication.class);
SecurityContextHolder.getContext().setAuthentication(authentication);
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void XmlMolgenisUiMenu()
{
new XmlMolgenisUiMenu(null, null);
}
@Test
public void getId()
{
String menuId = "menuId";
MenuType menuType = new MenuType();
menuType.setName(menuId);
XmlMolgenisUiMenu xmlMolgenisUiMenu = new XmlMolgenisUiMenu(menuType, molgenisPermissionService);
assertEquals(xmlMolgenisUiMenu.getId(), menuId);
}
@Test
public void getName()
{
String menuId = "menuId";
String menuName = "menuName";
MenuType menuType = new MenuType();
menuType.setName(menuId);
menuType.setLabel(menuName);
XmlMolgenisUiMenu xmlMolgenisUiMenu = new XmlMolgenisUiMenu(menuType, molgenisPermissionService);
assertEquals(xmlMolgenisUiMenu.getName(), menuName);
}
@Test
public void getNameByName()
{
String menuId = "menuId";
MenuType menuType = new MenuType();
menuType.setName(menuId);
XmlMolgenisUiMenu xmlMolgenisUiMenu = new XmlMolgenisUiMenu(menuType, molgenisPermissionService);
assertEquals(xmlMolgenisUiMenu.getName(), menuId);
}
@Test
public void getType()
{
XmlMolgenisUiMenu xmlMolgenisUiMenu = new XmlMolgenisUiMenu(new MenuType(), molgenisPermissionService);
assertEquals(xmlMolgenisUiMenu.getType(), MolgenisUiMenuItemType.MENU);
}
@Test
public void getItems()
{
String menuId = "menuId";
MenuType menuType = new MenuType();
menuType.setName(menuId);
PluginType plugin1Type = new PluginType();
plugin1Type.setId("plugin1");
plugin1Type.setName("plugin1");
PluginType plugin2Type = new PluginType();
plugin2Type.setId("plugin2");
plugin2Type.setName("plugin2");
PluginType plugin3Type = new PluginType();
plugin3Type.setId("plugin3");
plugin3Type.setName("plugin3");
MenuType menu1Type = new MenuType();
menu1Type.setName("menu1");
menu1Type.getMenuOrPlugin().add(plugin3Type);
menuType.getMenuOrPlugin().add(plugin1Type);
menuType.getMenuOrPlugin().add(plugin2Type);
menuType.getMenuOrPlugin().add(menu1Type);
when(molgenisPermissionService.hasPermissionOnPlugin("plugin1", Permission.READ)).thenReturn(true);
when(molgenisPermissionService.hasPermissionOnPlugin("plugin2", Permission.READ)).thenReturn(false);
when(molgenisPermissionService.hasPermissionOnPlugin("plugin3", Permission.READ)).thenReturn(true);
XmlMolgenisUiMenu xmlMolgenisUiMenu = new XmlMolgenisUiMenu(menuType, molgenisPermissionService);
Iterator<MolgenisUiMenuItem> it = xmlMolgenisUiMenu.getItems().iterator();
assertTrue(it.hasNext());
assertEquals(it.next().getName(), "plugin1");
assertEquals(it.next().getName(), "menu1");
}
@Test
public void getActiveItem()
{
String menuId = "menuId";
MenuType menuType = new MenuType();
menuType.setName(menuId);
PluginType plugin1Type = new PluginType();
plugin1Type.setId("plugin1");
plugin1Type.setName("plugin1");
PluginType plugin2Type = new PluginType();
plugin2Type.setId("plugin2");
plugin2Type.setName("plugin2");
PluginType plugin3Type = new PluginType();
plugin3Type.setId("plugin3");
plugin3Type.setName("plugin3");
MenuType menu1Type = new MenuType();
menu1Type.setName("menu1");
menu1Type.getMenuOrPlugin().add(plugin3Type);
menuType.getMenuOrPlugin().add(plugin1Type);
menuType.getMenuOrPlugin().add(menu1Type);
menuType.getMenuOrPlugin().add(plugin2Type);
when(molgenisPermissionService.hasPermissionOnPlugin("plugin1", Permission.READ)).thenReturn(false);
when(molgenisPermissionService.hasPermissionOnPlugin("plugin2", Permission.READ)).thenReturn(true);
when(molgenisPermissionService.hasPermissionOnPlugin("plugin3", Permission.READ)).thenReturn(true);
XmlMolgenisUiMenu xmlMolgenisUiMenu = new XmlMolgenisUiMenu(menuType, molgenisPermissionService);
assertEquals(xmlMolgenisUiMenu.getActiveItem().getName(), "plugin2");
}
@Test
public void getActiveItem_noActiveItem()
{
String menuId = "menuId";
MenuType menuType = new MenuType();
menuType.setName(menuId);
PluginType plugin1Type = new PluginType();
plugin1Type.setId("plugin1");
plugin1Type.setName("plugin1");
PluginType plugin3Type = new PluginType();
plugin3Type.setId("plugin3");
plugin3Type.setName("plugin3");
MenuType menu1Type = new MenuType();
menu1Type.setName("menu1");
menu1Type.getMenuOrPlugin().add(plugin3Type);
menuType.getMenuOrPlugin().add(plugin1Type);
menuType.getMenuOrPlugin().add(menu1Type);
when(molgenisPermissionService.hasPermissionOnPlugin("plugin1", Permission.READ)).thenReturn(false);
when(molgenisPermissionService.hasPermissionOnPlugin("plugin3", Permission.READ)).thenReturn(true);
XmlMolgenisUiMenu xmlMolgenisUiMenu = new XmlMolgenisUiMenu(menuType, molgenisPermissionService);
assertNull(xmlMolgenisUiMenu.getActiveItem());
}
@Test
public void getParentMenu()
{
assertNull(new XmlMolgenisUiMenu(new MenuType(), molgenisPermissionService).getParentMenu());
MolgenisUiMenu parentMenu = new XmlMolgenisUiMenu(new MenuType(), molgenisPermissionService);
assertEquals(new XmlMolgenisUiMenu(new MenuType(), parentMenu, molgenisPermissionService).getParentMenu(),
parentMenu);
}
@Test
public void getBreadcrumb()
{
MolgenisUiMenu menu1 = new XmlMolgenisUiMenu(new MenuType(), molgenisPermissionService);
MolgenisUiMenu menu2 = new XmlMolgenisUiMenu(new MenuType(), menu1, molgenisPermissionService);
MolgenisUiMenu menu3 = new XmlMolgenisUiMenu(new MenuType(), menu2, molgenisPermissionService);
assertEquals(menu1.getBreadcrumb(), Arrays.asList(menu1));
assertEquals(menu2.getBreadcrumb(), Arrays.asList(menu1, menu2));
assertEquals(menu3.getBreadcrumb(), Arrays.asList(menu1, menu2, menu3));
}
@Test
public void isAuthorized()
{
PluginType pluginType = new PluginType();
String pluginId = "plugin1";
String pluginName = "type";
pluginType.setName(pluginName);
pluginType.setId(pluginId);
when(molgenisPermissionService.hasPermissionOnPlugin(pluginId, Permission.READ)).thenReturn(true);
MenuType menuType = new MenuType();
menuType.getMenuOrPlugin().add(pluginType);
XmlMolgenisUiMenu xmlMolgenisUiMenu = new XmlMolgenisUiMenu(menuType, molgenisPermissionService);
assertTrue(xmlMolgenisUiMenu.isAuthorized());
}
@Test
public void isAuthorized_partiallyAuthorized()
{
PluginType plugin1Type = new PluginType();
String plugin1Name = "type1";
String plugin1Id = "plugin1";
plugin1Type.setName(plugin1Name);
plugin1Type.setId(plugin1Id);
PluginType plugin2Type = new PluginType();
String plugin2Name = "type2";
String plugin2Id = "plugin2";
plugin2Type.setName(plugin2Name);
plugin2Type.setId(plugin2Id);
when(molgenisPermissionService.hasPermissionOnPlugin(plugin1Id, Permission.READ)).thenReturn(false);
when(molgenisPermissionService.hasPermissionOnPlugin(plugin2Id, Permission.READ)).thenReturn(true);
MenuType menuType = new MenuType();
menuType.getMenuOrPlugin().add(plugin1Type);
menuType.getMenuOrPlugin().add(plugin2Type);
XmlMolgenisUiMenu xmlMolgenisUiMenu = new XmlMolgenisUiMenu(menuType, molgenisPermissionService);
assertTrue(xmlMolgenisUiMenu.isAuthorized());
}
@Test
public void isAuthorized_notAuthorized()
{
PluginType pluginType = new PluginType();
when(molgenisPermissionService.hasPermissionOnPlugin("something", Permission.READ)).thenReturn(false);
MenuType menuType = new MenuType();
menuType.getMenuOrPlugin().add(pluginType);
XmlMolgenisUiMenu xmlMolgenisUiMenu = new XmlMolgenisUiMenu(menuType, molgenisPermissionService);
assertFalse(xmlMolgenisUiMenu.isAuthorized());
}
}