package fr.openwide.core.test.jpa.security;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.util.concurrent.Callable;
import org.junit.Test;
import org.springframework.security.core.context.SecurityContextHolder;
import fr.openwide.core.jpa.exception.SecurityServiceException;
import fr.openwide.core.jpa.exception.ServiceException;
import fr.openwide.core.jpa.security.business.authority.util.CoreAuthorityConstants;
import fr.openwide.core.test.AbstractJpaSecurityTestCase;
import fr.openwide.core.test.jpa.security.business.person.model.MockUser;
public class TestCoreSecurityService extends AbstractJpaSecurityTestCase {
@Test
public void testRoleHierarchy() throws ServiceException, SecurityServiceException {
MockUser admin = createMockPerson("admin", "firstName", "lastName");
admin.addAuthority(authorityService.getByName(CoreAuthorityConstants.ROLE_ADMIN));
mockUserService.update(admin);
authenticateAs(admin);
assertFalse(securityService.hasSystemRole(admin));
assertTrue(securityService.hasAdminRole(admin));
assertTrue(securityService.hasAuthenticatedRole(admin));
MockUser authenticated = createMockPerson("authenticated", "firstName", "lastName");
authenticated.addAuthority(authorityService.getByName(CoreAuthorityConstants.ROLE_AUTHENTICATED));
mockUserService.update(authenticated);
authenticateAs(authenticated);
assertFalse(securityService.hasSystemRole(authenticated));
assertFalse(securityService.hasAdminRole(authenticated));
assertTrue(securityService.hasAuthenticatedRole(authenticated));
}
@Test
public void testRunAsSystem() {
assertTrue(securityService.runAsSystem(new Callable<Boolean>() {
@Override
public Boolean call() {
return securityService.hasSystemRole(SecurityContextHolder.getContext().getAuthentication());
}
}));
}
}