package no.dusken.aranea.admin.security;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.springframework.security.access.hierarchicalroles.RoleHierarchyImpl;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.GrantedAuthorityImpl;
import org.springframework.util.Assert;
import java.util.Arrays;
import java.util.Collection;
import java.util.LinkedList;
import static junit.framework.Assert.assertEquals;
import static org.junit.Assert.fail;
/**
* @author Marvin B. Lillehaug <lillehau@underdusken.no>
*/
public class TestRoleHiearchy {
private RoleHierarchyImpl hierachy;
@Before
public void setup(){
hierachy = new RoleHierarchyImpl();
hierachy.setHierarchy("ROLE_MASKINIST > ROLE_ANSVARLIG_REDAKTØR " +
"ROLE_ANSVARLIG_REDAKTØR > ROLE_REDAKTØR " +
"ROLE_ANSVARLIG_REDAKTØR > ROLE_REDAKTØR " +
"ROLE_ANSVARLIG_REDAKTØR > ROLE_REDAKTØR " +
"ROLE_ANSVARLIG_REDAKTØR > ROLE_REDAKTØR " +
"ROLE_ANSVARLIG_REDAKTØR > ROLE_REDAKTØR " +
"ROLE_REDAKTØR > ROLE_KULTURREDAKTØR " +
"ROLE_REDAKTØR > ROLE_NYHETSREDAKTØR " +
"ROLE_REDAKTØR > ROLE_REPORTASJEREDAKTØR " +
"ROLE_REDAKTØR > ROLE_FOTOREDAKTØR " +
"ROLE_REDAKTØR > ROLE_NETTREDAKTØR " +
"ROLE_KULTURREDAKTØR > ROLE_DUSKER " +
"ROLE_NYHETSREDAKTØR > ROLE_DUSKER " +
"ROLE_REPORTASJEREDAKTØR > ROLE_DUSKER " +
"ROLE_NETTREDAKTØR > ROLE_DUSKER " +
"ROLE_DUSKER > ROLE_JOURNALIST " +
"ROLE_DUSKER > ROLE_LAYOUT " +
"ROLE_DUSKER > ROLE_FOTOGRAF " +
"ROLE_DUSKER > ROLE_ILLUSTRATØR " +
"ROLE_DUSKER > ROLE_DATA " +
"ROLE_DUSKER > ROLE_ANNONSE " +
"ROLE_DUSKER > ROLE_ANNONSEANSVARLIG " +
"ROLE_DUSKER > ROLE_ØKONOMI " +
"ROLE_DUSKER > ROLE_KORREKTUR " +
"ROLE_DUSKER > ROLE_GJENGSJEF " +
"ROLE_DUSKER > ROLE_SIVILARBEIDER " +
"ROLE_DUSKER > ROLE_DEBATT-_OG_KRONIKKANSVARLIG " +
"ROLE_DUSKER > ROLE_OVERSETTER");
}
/**
* Test what happens when the setup
* Ansv. red > *red is tried
*/
@Test
@Ignore
public void testRoleHiearchyAstericsBehavior(){
GrantedAuthority maskinist = new GrantedAuthorityImpl("maskinist");
RoleHierarchyImpl testhierachy = new RoleHierarchyImpl();
testhierachy.setHierarchy("maskinist > ansvred " +
"ansvred > *red" +
"nyhetsred > nyhet" +
"kulturred > kultur");
Collection<GrantedAuthority> reachable = hierachy.getReachableGrantedAuthorities(new LinkedList<GrantedAuthority>(Arrays.asList(maskinist)));
Assert.notNull(reachable, "reachable was null");
//since kulturred has not been specified to be under ansvred it should not come up if *red is not matched
for(GrantedAuthority ga: reachable){
if(ga.getAuthority().equals("kulturred")){
return;
}
}
fail("*red not matched");
}
/*
* ROLE_ANSVARLIG_REDAKTØR should be reachable from ROLE_MASKINIST
*/
@Test
public void testAnsvredUnderMaskinist(){
GrantedAuthority maskinist = new GrantedAuthorityImpl("ROLE_MASKINIST");
Collection<GrantedAuthority> reachable = hierachy.getReachableGrantedAuthorities(new LinkedList<GrantedAuthority>(Arrays.asList(maskinist)));
Assert.notNull(reachable, "reachable was null");
for(GrantedAuthority ga: reachable){
if(ga.getAuthority().equals("ROLE_ANSVARLIG_REDAKTØR")){
return;
}
}
fail("ROLE_ANSVARLIG_REDAKTØR not reachable");
}
/*
* Test that all roles are reachable from maskinist
*/
@Test
public void testAllUnderMaskinist(){
GrantedAuthority maskinist = new GrantedAuthorityImpl("ROLE_MASKINIST");
Collection<GrantedAuthority> reachable = hierachy.getReachableGrantedAuthorities(new LinkedList<GrantedAuthority>(Arrays.asList(maskinist)));
Assert.notNull(reachable, "reachable was null");
assertEquals(22, reachable.size());
}
/**
* Test that the correct number is reachable from dusker
*/
@Test
public void testAllDusker(){
GrantedAuthority maskinist = new GrantedAuthorityImpl("ROLE_DUSKER");
Collection<GrantedAuthority> reachable = hierachy.getReachableGrantedAuthorities(new LinkedList<GrantedAuthority>(Arrays.asList(maskinist)));
Assert.notNull(reachable, "reachable was null");
assertEquals(14, reachable.size());
}
/**
* Test that no authorities are reachable from a role not specified.
*/
@Test
public void testNetmeeter(){
GrantedAuthority netmeeter = new GrantedAuthorityImpl("ROLE_NETMEETER");
Collection<GrantedAuthority> reachable = hierachy.getReachableGrantedAuthorities(new LinkedList<GrantedAuthority>(Arrays.asList(netmeeter)));
Assert.notNull(reachable, "reachable was null");
assertEquals(1, reachable.size());
}
/**
* All redaktørs and maskinist should be over ROLE_REDAKTØR
*/
@Test
public void testNyhetsredAnsvredMaskinistOverRedaktor(){
GrantedAuthority netmeeter = new GrantedAuthorityImpl("ROLE_REDAKTØR");
Collection<GrantedAuthority> reachable = hierachy.getReachableGrantedAuthorities(new LinkedList<GrantedAuthority>(Arrays.asList(netmeeter)));
Assert.notNull(reachable, "reachable was null");
assertEquals(20, reachable.size());
}
}