package org.sakaiproject.site.impl.test; import java.util.Set; import java.util.TreeSet; import junit.extensions.TestSetup; import junit.framework.Test; import junit.framework.TestSuite; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.sakaiproject.authz.api.Role; import org.sakaiproject.authz.api.SecurityService; import org.sakaiproject.exception.IdInvalidException; import org.sakaiproject.exception.IdUnusedException; import org.sakaiproject.exception.IdUsedException; import org.sakaiproject.exception.PermissionException; import org.sakaiproject.site.api.Group; import org.sakaiproject.site.api.Site; import org.sakaiproject.site.api.SiteService; import org.sakaiproject.test.SakaiKernelTestBase; import org.sakaiproject.tool.api.Session; import org.sakaiproject.tool.api.SessionManager; import org.sakaiproject.user.api.UserAlreadyDefinedException; import org.sakaiproject.user.api.UserDirectoryService; import org.sakaiproject.user.api.UserEdit; import org.sakaiproject.user.api.UserIdInvalidException; import org.sakaiproject.user.api.UserPermissionException; public class SiteServiceTest extends SakaiKernelTestBase { private static final Log log = LogFactory.getLog(SiteServiceTest.class); public static Test suite() { TestSetup setup = new TestSetup(new TestSuite(SiteServiceTest.class)) { protected void setUp() throws Exception { log.debug("starting oneTimeSetup"); oneTimeSetup(null); log.debug("finished oneTimeSetup"); } protected void tearDown() throws Exception { log.debug("starting tearDown"); oneTimeTearDown(); log.debug("finished tearDown"); } }; return setup; } public void testNullSiteId() { SiteService siteService = getService(SiteService.class); workAsAdmin(); try { siteService.addSite("", "other"); fail(); } catch (IdInvalidException e) { log.info("when passed a null id the test correctly responded with an IdInvalidException"); } catch (IdUsedException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (PermissionException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private void workAsAdmin() { workAsUser("admin", "admin"); } private void workAsUser(String eid, String id) { SessionManager sessionManager = getService(SessionManager.class); Session session = sessionManager.getCurrentSession(); session.setUserEid(eid); session.setUserId(id); } public void testNonExistentSiteId() { /* * See KNL-512 sending a realm ID that doesn't exit to * .BaseSiteService.setUserSecurity causes a db error * */ SiteService siteService = getService(SiteService.class); workAsAdmin(); Set<String> siteSet = new TreeSet<String>(); siteSet.add("nosuchSite"); try { siteService.setUserSecurity("admin", siteSet, siteSet, siteSet); } catch (Exception e) { e.printStackTrace(); fail(); } } /** * Check that when a site is unpublished a user roleswapped user can still access the site when switching to a role which can't access the unpublished site. */ public void testRoleSwapSiteVisit() throws IdUnusedException, PermissionException, IdInvalidException, IdUsedException, UserIdInvalidException, UserAlreadyDefinedException, UserPermissionException { SiteService siteService = (SiteService) getService(SiteService.class); SecurityService securityService = (SecurityService) getService(SecurityService.class); workAsAdmin(); // Create another user. UserDirectoryService userService = (UserDirectoryService) getService(UserDirectoryService.class); UserEdit accessUser = userService.addUser("access", "access"); userService.commitEdit(accessUser); UserEdit maintainUser = userService.addUser("maintain", "maintain"); userService.commitEdit(maintainUser); Site site = siteService.addSite("roleSwapSiteVisit", "test"); site.addMember("access", "access", true, false); site.addMember("maintain", "maintain", true, false); site.setPublished(false); // This is the default, but we this is what we are wanting to test. Role maintain = site.getRole("maintain"); maintain.allowFunction(SiteService.SITE_ROLE_SWAP); siteService.save(site); workAsUser("maintain", "maintain"); // Check maintainer has same access through allowAccess as getSiteVisit. assertTrue(siteService.allowAccessSite("roleSwapSiteVisit")); try { siteService.getSiteVisit("roleSwapSiteVisit"); } catch (PermissionException pe) { fail("Should have been able to get the site fine."); } assertTrue(securityService.setUserEffectiveRole(site.getReference(), "access")); // Check accessor as well assertTrue(siteService.allowAccessSite("roleSwapSiteVisit")); try { siteService.getSiteVisit("roleSwapSiteVisit"); } catch (PermissionException pe) { fail("Should have been able to get the site fine."); } } public void testGroupSave() throws IdInvalidException, IdUsedException, PermissionException, IdUnusedException { SiteService siteService = (SiteService) getService(SiteService.class); workAsAdmin(); Site site = siteService.addSite("groupTestSite", "test"); siteService.save(site); //this should work Group group1 = site.addGroup(); group1.setTitle("group1"); siteService.save(site); //This should get an IllegalArgumentException try { site.addGroup(); siteService.save(site); fail("Should not be able to save a group without a title"); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (RuntimeException e) { e.printStackTrace(); fail(); } } }