MenuBuilder { public ModuleMenu buildMenu(String username) { ModuleMenu moduleMenu = new ModuleMenu(); List<String> userRoles = userService.getRoles(username); for (ModuleRegistrationData moduleRegistrationData : getModulesWithSubMenu(userRoles)) { ModuleMenuSection menuSection = getModuleMenuSection(username, userRoles, moduleRegistrationData); if (!menuSection.getLinks().isEmpty()) { moduleMenu.addMenuSection(menuSection); } } moduleMenu.addMenuSection(serverModulesMenuSection(userRoles)); if (checkUserPermission(userRoles, REST_API_PERMISSION)) { ModuleMenuSection restSection = restDocumentationMenu(); if (CollectionUtils.isNotEmpty(restSection.getLinks())) { moduleMenu.addMenuSection(restSection); } } return moduleMenu; }  ModuleMenu buildMenu(String username);  }
@Test public void shouldBuildMenuWithAllLinks() { setUpRest(); when(userService.getRoles(USERNAME)).thenReturn(Arrays.asList("emailRole", "adminRole", "schedulerRole", "mcRole", "mdsRole", "viewRestRole")); when(dictionary.get(DOC_URL)).thenReturn("http: ModuleMenu menu = menuBuilder.buildMenu(USERNAME); assertNotNull(menu); List<ModuleMenuSection> menuSections = menu.getSections(); assertNotNull(menuSections); assertEquals(4, menuSections.size()); ModuleMenuSection adminSection = menu.getSections().get(0); verifyAdminSection(adminSection); ModuleMenuSection wsSection = menu.getSections().get(1); verifyWsSection(wsSection); ModuleMenuSection modulesSection = menu.getSections().get(2); verifyModulesSection(modulesSection, true, true); ModuleMenuSection restSection = menu.getSections().get(3); verifyRestSection(restSection, true, true); }
@Test public void shouldFilterMenuBasedOnRoles() { setUpRest(); when(userService.getRoles(USERNAME)).thenReturn(Arrays.asList("emailRole", "mcRole")); when(bundle.getHeaders().get(DOC_URL)).thenReturn("www.docs.motechproject.org"); ModuleMenu menu = menuBuilder.buildMenu(USERNAME); assertNotNull(menu); List<ModuleMenuSection> menuSections = menu.getSections(); assertNotNull(menuSections); assertEquals(2, menuSections.size()); ModuleMenuSection wsSection = menu.getSections().get(0); verifyWsSection(wsSection); ModuleMenuSection modulesSection = menu.getSections().get(1); verifyModulesSection(modulesSection, true, false); }
@Test public void shouldAddDocumentationUrls() { setUpRest(); when(userService.getRoles(USERNAME)).thenReturn(Arrays.asList("emailRole", "mcRole")); when(bundle.getHeaders().get(DOC_URL)).thenReturn("www.docs.motechproject.org"); ModuleMenu menu = menuBuilder.buildMenu(USERNAME); assertEquals(menu.getSections().get(0).getModuleDocsUrl(), "www.docs.motechproject.org"); assertNotNull(menu); }
@Test public void shouldAddDocumentationUrlForModulesTab() { setUpRest(); when(userService.getRoles(USERNAME)).thenReturn(Arrays.asList("emailRole", "mcRole")); when(bundle.getHeaders().get(DOC_URL)).thenReturn("http: ModuleMenu menu = menuBuilder.buildMenu(USERNAME); assertEquals(null, menu.getSections().get(1).getModuleDocsUrl()); assertEquals("http: assertNotNull(menu); }
@Test public void shouldNotAddLinksForSubMenusForWhichUserDoesNotHaveRequisiteRole() { setUpToTestAccessControlledSubMenuLinks(true); when(userService.getRoles(USERNAME)).thenReturn(Arrays.asList("fooRole")); when(bundle.getHeaders().get(DOC_URL)).thenReturn("http: ModuleMenu menu = menuBuilder.buildMenu(USERNAME); assertNotNull(menu); List<ModuleMenuSection> menuSections = menu.getSections(); assertNotNull(menuSections); ModuleMenuLink onlyFooHasAccessToLink = new ModuleMenuLink("Foo", "foo", "#/foo", false, null); ModuleMenuLink onlyBarHasAccessToLink = new ModuleMenuLink("Bar", "foo", "#/bar", false, null); ModuleMenuLink linkIsNotAccessControlled = new ModuleMenuLink("Random", "foo", "#/random", false, null); ModuleMenuSection fooMenuSection = menuSections.get(0); assertNotNull(fooMenuSection); assertTrue(fooMenuSection.hasLinkFor(onlyFooHasAccessToLink.getUrl())); assertTrue(fooMenuSection.hasLinkFor(linkIsNotAccessControlled.getUrl())); assertFalse(fooMenuSection.hasLinkFor(onlyBarHasAccessToLink.getUrl())); }
@Test public void shouldNotAddMenuSectionIfUserDoesNotHaveAccessToAnySubMenu() { setUpToTestAccessControlledSubMenuLinks(false); when(userService.getRoles(USERNAME)).thenReturn(Arrays.asList("someOtherRole")); when(bundle.getHeaders().get(DOC_URL)).thenReturn("http: ModuleMenu menu = menuBuilder.buildMenu(USERNAME); assertNotNull(menu); List<ModuleMenuSection> menuSections = menu.getSections(); assertFalse(menuSections.isEmpty()); assertThat(menuSections.size(), Is.is(1)); assertThat(menuSections.get(0).getName(), Is.is("server.modules")); }