/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License (the "License"). * You may not use this file except in compliance with the License. * * See LICENSE.txt included in this distribution for the specific * language governing permissions and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at LICENSE.txt. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved. */ package org.opensolaris.opengrok.web; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Set; import java.util.TreeSet; import javax.servlet.http.Cookie; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; import org.opensolaris.opengrok.configuration.Group; import org.opensolaris.opengrok.configuration.Project; import org.opensolaris.opengrok.configuration.RuntimeEnvironment; import org.opensolaris.opengrok.history.RepositoryInfo; public class ProjectHelperExtendedTest extends ProjectHelperTestBase { @BeforeClass public static void setUpClass() { ProjectHelperTest.setUpClass(); List<Group> grps = new ArrayList<>(env.getGroups()); Map<String,Project> projects = env.getProjects(); List<RepositoryInfo> rps = env.getRepositories(); Map<Project, List<RepositoryInfo>> map = getRepositoriesMap(); /** * Extend the original groups with some subgroups - structure should be * now like this. * * allowed_group_2 group_1 * / \ / \ * group_0 allowed_group_3 group_0 allowed_group_3 */ Group.getByName("allowed_group_2").addGroup(Group.getByName("group_0")); Group.getByName("allowed_group_2").addGroup(Group.getByName("allowed_group_3")); Group.getByName("group_1").addGroup(Group.getByName("group_0")); Group.getByName("group_1").addGroup(Group.getByName("allowed_group_3")); setRepositoriesMap(map); env.setProjects(projects); env.setGroups(new TreeSet<>(grps)); env.setRepositories(rps); env.register(); } private void setupPageConfigRequest(final String cookie) { cfg = PageConfig.get(new DummyHttpServletRequest() { @Override public Cookie[] getCookies() { Cookie[] ret = new Cookie[1]; ret[0] = new Cookie("OpenGrokProject", cookie); return ret; } }); helper = cfg.getProjectHelper(); } protected static Project createProject(String name) { Project p = new Project(name); return p; } private Group getAllowedGroupWithSubgroups() { for (Group g : RuntimeEnvironment.getInstance().getGroups()) { if (g.getName().startsWith("allowed") && !g.getSubgroups().isEmpty()) { return g; } } return null; } private Group getAllowedGroupWithoutSubgroups() { for (Group g : RuntimeEnvironment.getInstance().getGroups()) { if (g.getName().startsWith("allowed") && g.getSubgroups().isEmpty()) { return g; } } return null; } private Group getUnAllowedGroupWithSubgroups() { for (Group g : RuntimeEnvironment.getInstance().getGroups()) { if (g.getName().startsWith("group") && !g.getSubgroups().isEmpty()) { return g; } } return null; } private Group getUnAllowedGroupWithoutSubgroups() { for (Group g : RuntimeEnvironment.getInstance().getGroups()) { if (g.getName().startsWith("group") && g.getSubgroups().isEmpty()) { return g; } } return null; } @Test public void testGetAllowedGroupSubgroups() { Set<Group> result = helper.getSubgroups(getAllowedGroupWithSubgroups()); Assert.assertEquals(1, result.size()); for (Group p : result) { Assert.assertTrue(p.getName().startsWith("allowed_")); } } @Test public void testGetUnAllowedGroupSubgroups() { Set<Group> result = helper.getSubgroups(getUnAllowedGroupWithSubgroups()); Assert.assertEquals(0, result.size()); } @Test public void testHasAllowedSubgroupAllowedSubgroups() { Group g = getAllowedGroupWithSubgroups(); Assert.assertTrue(helper.hasAllowedSubgroup(g)); } @Test public void testHasAllowedSubgroupUnAllowedSubgroups() { Group g = getUnAllowedGroupWithSubgroups(); Assert.assertFalse(helper.hasAllowedSubgroup(g)); } @Test public void testHasAllowedSubgroupAllowedNoSubgroups() { Group g = getAllowedGroupWithoutSubgroups(); Assert.assertFalse(helper.hasAllowedSubgroup(g)); } @Test public void testHasAllowedSubgroupUnAllowedNoSubgroups() { Group g = getUnAllowedGroupWithoutSubgroups(); Assert.assertFalse(helper.hasAllowedSubgroup(g)); } @Test public void testIsFavourite() { setupPageConfigRequest("grouped_project_0_1," + "grouped_repository_2_2," + "allowed_grouped_repository_0_2," + "allowed_grouped_project_1_2," + "allowed_ungrouped_project_2_1," + "allowed_ungrouped_repository_2_1," + "ungrouped_repository_1_1," + "ungrouped_project_0_1"); Assert.assertTrue(helper.isFavourite(createProject("grouped_project_0_1"))); Assert.assertTrue(helper.isFavourite(createProject("grouped_repository_2_2"))); Assert.assertTrue(helper.isFavourite(createProject("allowed_grouped_repository_0_2"))); Assert.assertTrue(helper.isFavourite(createProject("allowed_grouped_project_1_2"))); Assert.assertTrue(helper.isFavourite(createProject("allowed_ungrouped_project_2_1"))); Assert.assertTrue(helper.isFavourite(createProject("allowed_ungrouped_repository_2_1"))); Assert.assertTrue(helper.isFavourite(createProject("ungrouped_repository_1_1"))); Assert.assertTrue(helper.isFavourite(createProject("ungrouped_project_0_1"))); Assert.assertFalse(helper.isFavourite(createProject("uknown"))); Assert.assertFalse(helper.isFavourite(createProject("ungrouped_project_0_2"))); Assert.assertFalse(helper.isFavourite(createProject("ungrouped_epository_1_1"))); Assert.assertFalse(helper.isFavourite(createProject("allowed_grouped_repository_2_1"))); Assert.assertFalse(helper.isFavourite(createProject("grouped_project__0_1"))); Assert.assertFalse(helper.isFavourite(createProject("gd6sf8g718fd7gsd68dfg"))); Assert.assertFalse(helper.isFavourite(createProject("Chuck Norris"))); } @Test public void testHasUngroupedFavouritePositive() { setupPageConfigRequest("grouped_project_0_1," + "grouped_repository_2_2," + "allowed_grouped_repository_0_2," + "allowed_grouped_project_1_2," + "allowed_ungrouped_repository_2_1," + "ungrouped_repository_1_1," + "ungrouped_project_0_1"); Assert.assertTrue(helper.hasUngroupedFavourite()); } @Test public void testHasUngroupedFavouriteNegative() { setupPageConfigRequest("grouped_project_0_1," + "grouped_repository_2_2," + "allowed_grouped_repository_0_2," + "allowed_grouped_project_1_2," + "ungrouped_repository_1_1," + "ungrouped_project_0_1"); Assert.assertFalse(helper.hasUngroupedFavourite()); } @Test public void testHasFavourite() { String[] cookie = new String[]{ "grouped_project_2_1", "allowed_grouped_project_2_1", "ungrouped_project_2_1", "uknown", "allowed_grouped_project_0_1", "grouped_project_0_1",}; boolean[] exp = new boolean[]{ false, true, false, false, false, false,}; Group[] groups = new Group[]{ Group.getByName("allowed_group_2"), Group.getByName("allowed_group_2"), Group.getByName("allowed_group_2"), Group.getByName("allowed_group_2"), Group.getByName("group_0"), Group.getByName("group_0"),}; Assert.assertTrue(groups.length == exp.length && exp.length == cookie.length); for (int i = 0; i < exp.length; i++) { setupPageConfigRequest(cookie[i]); Assert.assertEquals(exp[i], helper.hasFavourite(groups[i])); } } }