/* * Copyright 2016 ThoughtWorks, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.thoughtworks.go.config; import org.junit.Test; import java.util.List; import static java.util.Arrays.asList; import static org.hamcrest.Matchers.hasSize; import static org.hamcrest.Matchers.contains; import static org.hamcrest.core.Is.is; import static org.junit.Assert.*; public class RolesConfigTest { @Test public void shouldReturnTrueIfUserIsMemberOfRole() { RolesConfig rolesConfig = new RolesConfig(new RoleConfig(new CaseInsensitiveString("role1"), new RoleUser(new CaseInsensitiveString("user1")))); assertThat("shouldReturnTrueIfUserIsMemberOfRole", rolesConfig.isUserMemberOfRole(new CaseInsensitiveString("user1"), new CaseInsensitiveString("role1")), is(true)); } @Test public void shouldReturnFalseIfUserIsNotMemberOfRole() { RolesConfig rolesConfig = new RolesConfig(new RoleConfig(new CaseInsensitiveString("role1"), new RoleUser(new CaseInsensitiveString("user1")))); assertThat("shouldReturnFalseIfUserIsNotMemberOfRole", rolesConfig.isUserMemberOfRole(new CaseInsensitiveString("user2"), new CaseInsensitiveString("role1")), is(false)); } @Test public void shouldThrowExceptionIfRoleDoesNotExist() { RolesConfig rolesConfig = new RolesConfig(new RoleConfig(new CaseInsensitiveString("role1"), new RoleUser(new CaseInsensitiveString("user1")))); try { rolesConfig.isUserMemberOfRole(new CaseInsensitiveString("anyone"), new CaseInsensitiveString("invalid-role-name")); } catch (Exception e) { assertThat(e.getMessage(), is("Role \"invalid-role-name\" does not exist!")); } } @Test public void shouldGiveAListOfAllRolesAUserBelongsTo() { Role firstRole = new RoleConfig(new CaseInsensitiveString("role1"), new RoleUser(new CaseInsensitiveString("USER1")), new RoleUser(new CaseInsensitiveString("user2"))); Role secondRole = new RoleConfig(new CaseInsensitiveString("role2"), new RoleUser(new CaseInsensitiveString("user1")), new RoleUser(new CaseInsensitiveString("user3"))); Role thirdRole = new RoleConfig(new CaseInsensitiveString("role3"), new RoleUser(new CaseInsensitiveString("user2")), new RoleUser(new CaseInsensitiveString("user3"))); RolesConfig rolesConfig = new RolesConfig(firstRole, secondRole, thirdRole); assertThat(rolesConfig.memberRoles(new AdminUser(new CaseInsensitiveString("user1"))), is(asList(firstRole, secondRole))); } @Test public void shouldListItselfWhenARoleExists() { Role firstRole = new RoleConfig(new CaseInsensitiveString("role1"), new RoleUser(new CaseInsensitiveString("USER1")), new RoleUser(new CaseInsensitiveString("user2"))); Role secondRole = new RoleConfig(new CaseInsensitiveString("ROLE2"), new RoleUser(new CaseInsensitiveString("user1")), new RoleUser(new CaseInsensitiveString("user3"))); RolesConfig rolesConfig = new RolesConfig(firstRole, secondRole); assertThat(rolesConfig.memberRoles(new AdminRole(new CaseInsensitiveString("role1"))), is(asList(firstRole))); assertThat(rolesConfig.memberRoles(new AdminRole(new CaseInsensitiveString("role2"))), is(asList(secondRole))); } @Test public void shouldBeInvalidToHaveTwoRolesWithTheSameName() { Role role1 = new RoleConfig(new CaseInsensitiveString("role1")); Role role2 = new RoleConfig(new CaseInsensitiveString("role1")); RolesConfig rolesConfig = new RolesConfig(role1, role2); rolesConfig.validate(null); assertEquals(1, rolesConfig.errors().getAll().size()); } @Test public void getPluginRoleConfigsShouldReturnOnlyPluginRoles() { Role admin = new RoleConfig(new CaseInsensitiveString("admin")); Role view = new RoleConfig(new CaseInsensitiveString("view")); Role blackbird = new PluginRoleConfig("blackbird", "foo"); Role spacetiger = new PluginRoleConfig("spacetiger", "foo"); RolesConfig rolesConfig = new RolesConfig(admin, blackbird, view, spacetiger); List<PluginRoleConfig> roles = rolesConfig.getPluginRoleConfigs(); assertThat(roles, hasSize(2)); assertThat(roles, contains(blackbird, spacetiger)); } @Test public void getRoleConfigsShouldReturnOnlyNonPluginRoles() { Role admin = new RoleConfig(new CaseInsensitiveString("admin")); Role view = new RoleConfig(new CaseInsensitiveString("view")); Role blackbird = new PluginRoleConfig("blackbird", "foo"); Role spacetiger = new PluginRoleConfig("spacetiger", "foo"); RolesConfig rolesConfig = new RolesConfig(admin, blackbird, view, spacetiger); List<RoleConfig> roles = rolesConfig.getRoleConfigs(); assertThat(roles, hasSize(2)); assertThat(roles, contains(admin, view)); } @Test public void allRolesShouldReturnAllRoles() { Role admin = new RoleConfig(new CaseInsensitiveString("admin")); Role view = new RoleConfig(new CaseInsensitiveString("view")); Role blackbird = new PluginRoleConfig("blackbird", "foo"); Role spacetiger = new PluginRoleConfig("spacetiger", "foo"); RolesConfig rolesConfig = new RolesConfig(admin, blackbird, view, spacetiger); List<Role> roles = rolesConfig.allRoles(); assertThat(roles, hasSize(4)); assertThat(roles, contains(admin, blackbird, view, spacetiger)); } @Test public void isUniqueRoleName_shouldBeTrueIfRolesAreUnique() throws Exception { RolesConfig rolesConfig = new RolesConfig(new RoleConfig(new CaseInsensitiveString("admin")), new RoleConfig(new CaseInsensitiveString("view"))); assertTrue(rolesConfig.isUniqueRoleName(new CaseInsensitiveString("admin"))); assertTrue(rolesConfig.isUniqueRoleName(new CaseInsensitiveString("operate"))); } @Test public void isUniqueRoleName_shouldBeFalseWithMultipleRolesWithSameName() throws Exception { RolesConfig rolesConfig = new RolesConfig(new RoleConfig(new CaseInsensitiveString("admin")), new RoleConfig(new CaseInsensitiveString("view")), new RoleConfig(new CaseInsensitiveString("view"))); assertFalse(rolesConfig.isUniqueRoleName(new CaseInsensitiveString("view"))); } }