package de.randi2.core.integration.services; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertFalse; import static junit.framework.Assert.assertNotNull; import static junit.framework.Assert.assertTrue; import java.util.ArrayList; import org.hibernate.SessionFactory; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.security.access.vote.AffirmativeBased; import org.springframework.security.authentication.AnonymousAuthenticationToken; import org.springframework.security.authentication.dao.SystemWideSaltSource; import org.springframework.security.authentication.encoding.PasswordEncoder; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.context.SecurityContextHolder; import de.randi2.model.Login; import de.randi2.model.Person; import de.randi2.model.Role; import de.randi2.model.TrialSite; import de.randi2.services.TrialSiteService; import de.randi2.testUtility.utility.DomainObjectFactory; import de.randi2.utility.security.RolesAndRights; public class TrialSiteServiceTest extends AbstractServiceTest { @Autowired private TrialSiteService service; @Autowired private DomainObjectFactory factory; @Autowired private PasswordEncoder passwordEncoder; @Autowired private SystemWideSaltSource saltSource; @Autowired private RolesAndRights rolesAndRights; @Autowired private ApplicationContext context; @Test public void testInit(){ assertNotNull(service); } @Test public void testCreate(){ authenticatAsAdmin(); TrialSite site = factory.getTrialSite(); service.create(site); assertTrue(site.getId()>0); } @Test public void testAuthorize(){ authenticatAsAnonymous(); TrialSite site = factory.getTrialSite(); site.setPassword(passwordEncoder.encodePassword("1$heidelberg", saltSource.getSystemWideSalt())); assertTrue(service.authorize(site, "1$heidelberg")); assertFalse(service.authorize(site, "234§heidelberg")); } @Test public void testUpdate(){ authenticatAsAdmin(); TrialSite site = factory.getTrialSite(); service.create(site); assertTrue(site.getId()>0); // aclService.createAclwithPermissions(site, "admin@test.de",new PermissionHibernate[]{PermissionHibernate.ADMINISTRATION},null); // aclService.readAclById(new ObjectIdentityHibernate(TrialSite.class,site.getId()), new Sid[]{new PrincipalSid("admin@test.de")}); site.setName("Name23"); service.update(site); TrialSite site2 = entityManager.find(TrialSite.class, site.getId()); assertEquals(site.getName(), site2.getName()); } @Test public void testgetAll(){ authenticatAsAdmin(); for(int i=0;i<10;i++){ TrialSite site = factory.getTrialSite(); service.create(site); rolesAndRights.grantRights(site,site); assertTrue(site.getId()>0); } assertTrue(service.getAll().size()>=10); } @Test public void testGetObject(){ authenticatAsAdmin(); ((AffirmativeBased)context.getBean("methodAccessDecisionManager")).setAllowIfAllAbstainDecisions(true); TrialSite site = factory.getTrialSite(); service.create(site); assertTrue(site.getId()>0); rolesAndRights.grantRights(site,site); TrialSite site2 = service.getObject(site.getId()); assertEquals(site.getName(), site2.getName()); assertEquals(site.getId(), site2.getId()); assertEquals(site.getCity(), site2.getCity()); } private void authenticatAsAnonymous(){ Login newUser = new Login(); newUser.setPerson(new Person()); newUser.addRole(Role.ROLE_ANONYMOUS); AnonymousAuthenticationToken authToken = new AnonymousAuthenticationToken( "anonymousUser", newUser, new ArrayList<GrantedAuthority>(newUser.getAuthorities())); // Perform authentication SecurityContextHolder.getContext().setAuthentication(authToken); SecurityContextHolder.getContext().getAuthentication() .setAuthenticated(true); } }