/**********************************************************************************
* $URL: https://source.sakaiproject.org/svn/edu-services/trunk/sections-service/sections-impl/integration-test/src/java/org/sakaiproject/test/section/CourseManagementIntegrationTest.java $
* $Id: CourseManagementIntegrationTest.java 105077 2012-02-24 22:54:29Z ottenhoff@longsight.com $
***********************************************************************************
*
* Copyright (c) 2005, 2006, 2007, 2008 The Sakai Foundation
*
* Licensed under the Educational Community 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.opensource.org/licenses/ECL-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 org.sakaiproject.test.section;
import junit.framework.Assert;
import org.sakaiproject.component.section.sakai.SectionManagerImpl;
import org.sakaiproject.section.api.SectionManager;
import org.sakaiproject.section.api.SectionManager.ExternalIntegrationConfig;
import org.sakaiproject.section.api.coursemanagement.CourseSection;
import org.sakaiproject.section.api.facade.Role;
import org.sakaiproject.site.api.Site;
import org.sakaiproject.site.api.SiteService;
import org.sakaiproject.test.SakaiTestBase;
import org.sakaiproject.tool.api.Session;
import org.sakaiproject.tool.api.SessionManager;
public class CourseManagementIntegrationTest extends SakaiTestBase {
// Services
private SiteService siteService;
private SessionManager sessionManager;
private SectionManager sectionManager;
// Objects we'll need to clean up on tearDown
private String siteId;
/**
* Setup test fixture (runs once for each test method called)
*/
public void setUp() throws Exception {
// Fetch the services we need to run the tests
siteService = (SiteService)getService(SiteService.class.getName());
sessionManager = (SessionManager)getService(SessionManager.class.getName());
sectionManager = (SectionManager)getService(SectionManager.class.getName());
Session session = sessionManager.getCurrentSession();
session.setUserId("admin");
session.setUserEid("admin");
}
/**
* Remove the newly created objects, so we can run more tests with a clean slate.
*/
public void tearDown() throws Exception {
if(siteId != null) {
Site site = siteService.getSite(siteId);
siteService.removeSite(site);
}
}
//// Manual Mandatory ////
public void testManualMandatoryConfig() throws Exception {
// Set the sectionManager to be manual mandatory
((SectionManagerImpl)sectionManager).setConfig(ExternalIntegrationConfig.MANUAL_MANDATORY.toString());
// Create a site
siteId = generateSiteId();
Site site = siteService.addSite(siteId, "course");
String siteReference = site.getReference();
// Ensure that the site is not externally managed by default
Assert.assertFalse(sectionManager.isExternallyManaged(siteReference));
// Ensure that the section manager won't allow the site to be set to "automatic" sections
try {
sectionManager.setExternallyManaged(siteReference,true);
fail();
} catch (Exception e) {}
}
public void testManualMandatorySections() throws Exception {
// Set the sectionManager to be manual mandatory
((SectionManagerImpl)sectionManager).setConfig(ExternalIntegrationConfig.MANUAL_MANDATORY.toString());
// Create a site
siteId = generateSiteId();
Site site = siteService.addSite(siteId, "course");
// Set the provider ID to an external section EID, and save the site
site.setProviderGroupId("bio101_f2006_lab1");
siteService.save(site);
// Ensure that no internal sections were created from the single attached "roster" (aka provider ID)
Assert.assertEquals(0, sectionManager.getSections(siteId).size());
// Now create a complex provider ID (multiple rosters)
site.setProviderGroupId("bio101_f2006_lab1+bio101_f2006_lab2");
siteService.save(site);
// Ensure that no internal sections were created for multiple rosters
Assert.assertEquals(0, sectionManager.getSections(siteId).size());
}
//// Manual Default ////
public void testManualDefaultConfig() throws Exception {
// Set the sectionManager to be manual default
((SectionManagerImpl)sectionManager).setConfig(ExternalIntegrationConfig.MANUAL_DEFAULT.toString());
// Create a site
siteId = generateSiteId();
Site site = siteService.addSite(siteId, "course");
String siteReference = site.getReference();
// Ensure that the site is not externally managed by default
Assert.assertFalse(sectionManager.isExternallyManaged(siteReference));
// Ensure that the section manager will allow the site to be set to "automatic" sections
try {
sectionManager.setExternallyManaged(siteReference,true);
} catch (Exception e) {
fail("Unable to change a manual site to automatic, even though we should be able to do so: " + e.getMessage());
}
}
public void testManualDefaultSections() throws Exception {
// Set the sectionManager to be manual default
((SectionManagerImpl)sectionManager).setConfig(ExternalIntegrationConfig.MANUAL_DEFAULT.toString());
// Create a site
siteId = generateSiteId();
Site site = siteService.addSite(siteId, "course");
// Set the provider ID to an external section EID, and save the site
site.setProviderGroupId("bio101_f2006_lab1");
siteService.save(site);
// Ensure that no internal sections were created from the single attached "roster" (aka provider ID)
Assert.assertEquals(0, sectionManager.getSections(siteId).size());
// Now create a complex provider ID (multiple rosters)
site.setProviderGroupId("bio101_f2006_lab1+bio101_f2006_lab2");
siteService.save(site);
// Ensure that no internal sections were created for multiple rosters
Assert.assertEquals(0, sectionManager.getSections(siteId).size());
// Add a section "manually"
CourseSection section = sectionManager.addSection(site.getReference(),
"a manual section", "lec", Integer.valueOf(10), null, null, null, false, false,
false, false, false, false, false);
// Now change this "manual by default" site to be externally controlled (automatic)
sectionManager.setExternallyManaged(site.getReference(), true);
// Ensure that the manually created section was removed
Assert.assertFalse(sectionManager.getSections(siteId).contains(section));
// Get a new site object from the service, since the one we have is now out-of-date
site = siteService.getSite(siteId);
// Ensure that the provided rosters are reflected as sections
Assert.assertEquals(2, sectionManager.getSections(siteId).size());
// Change the provider IDs again.
site.setProviderGroupId("bio101_f2006_lec1+bio101_f2006_lab1+bio101_f2006_lab2");
siteService.save(site);
// The automatic sections should have been added to the site
Assert.assertEquals(3, sectionManager.getSections(siteId).size());
}
//// Automatic Default ////
public void testAutomaticDefaultConfig() throws Exception {
// Set the sectionManager to be auto default
((SectionManagerImpl)sectionManager).setConfig(ExternalIntegrationConfig.AUTOMATIC_DEFAULT.toString());
// Create a site
siteId = generateSiteId();
Site site = siteService.addSite(siteId, "course");
String siteReference = site.getReference();
// Ensure that the site is externally managed by default
Assert.assertTrue(sectionManager.isExternallyManaged(siteReference));
// Ensure that the section manager will allow the site to be set to "manual" sections
try {
sectionManager.setExternallyManaged(siteReference,false);
} catch (Exception e) {
fail("We should be able to switch to internal section management, but couldn't: " + e.getMessage());
}
}
public void testAutomaticDefaultSections() throws Exception {
// Set the sectionManager to be auto default
((SectionManagerImpl)sectionManager).setConfig(ExternalIntegrationConfig.AUTOMATIC_DEFAULT.toString());
// Create a site
siteId = generateSiteId();
Site site = siteService.addSite(siteId, "course");
// Set the provider ID to an external section EID, and save the site
site.setProviderGroupId("bio101_f2006_lab1");
siteService.save(site);
// Ensure that a single internal section was created from the attached "roster" (aka provider ID)
Assert.assertEquals(1, sectionManager.getSections(siteId).size());
// Now create a complex provider ID (multiple rosters)
site.setProviderGroupId("bio101_f2006_lab1+bio101_f2006_lab2");
siteService.save(site);
// Ensure that both internal sections were created for the rosters
Assert.assertEquals(2, sectionManager.getSections(siteId).size());
// Ensure that we can not edit the sections
CourseSection section = (CourseSection)sectionManager.getSections(siteId).get(0);
try {
sectionManager.updateSection(section.getUuid(), "a new title", null, null);
fail("We should not be able to edit sections in an externally controlled site.");
} catch (Exception e) {}
// Ensure that we can not delete the sections
try {
sectionManager.disbandSection(section.getUuid());
fail("We should not be able to delete sections in an externally controlled site.");
} catch (Exception e) {}
// Now change this "automatic by default" site to be manually controlled
sectionManager.setExternallyManaged(site.getReference(), false);
// Get a new site object from the service, since the one we have is now out-of-date
site = siteService.getSite(siteId);
// Ensure that the provided rosters are still reflected as sections
Assert.assertEquals(2, sectionManager.getSections(siteId).size());
// Change the provider IDs again.
site.setProviderGroupId("bio101_f2006_lec1+bio101_f2006_lab1+bio101_f2006_lab2");
siteService.save(site);
// The sections should not have changed, since we're a manual site
Assert.assertEquals(2, sectionManager.getSections(siteId).size());
// Ensure that we can edit a section
try {
sectionManager.updateSection(section.getUuid(), "a new title", null, null);
} catch (Exception e) {
fail("We should be able to edit sections, but couldn't: " + e);
e.printStackTrace();
}
// Ensure that we can delete sections
try {
sectionManager.disbandSection(section.getUuid());
} catch (Exception e) {
fail("We should be able to delete sections in a manually controlled site: " + e.getMessage());
}
}
//// Automatic Mandatory ////
public void testAutomaticMandatoryConfig() throws Exception {
// Set the sectionManager to be automatic mandatory
((SectionManagerImpl)sectionManager).setConfig(ExternalIntegrationConfig.AUTOMATIC_MANDATORY.toString());
// Create a site
siteId = generateSiteId();
Site site = siteService.addSite(siteId, "course");
String siteReference = site.getReference();
// Ensure that the site is externally managed by default
Assert.assertTrue(sectionManager.isExternallyManaged(siteReference));
// Ensure that the section manager won't allow the site to be set to "manual" sections
try {
sectionManager.setExternallyManaged(siteReference,false);
fail();
} catch (Exception e) {}
}
public void testAutomaticMandatorySections() throws Exception {
// Set the sectionManager to be automatic mandatory
((SectionManagerImpl)sectionManager).setConfig(ExternalIntegrationConfig.AUTOMATIC_MANDATORY.toString());
// Create a site
siteId = generateSiteId();
Site site = siteService.addSite(siteId, "course");
// Set the provider ID to an external section EID, and save the site
site.setProviderGroupId("bio101_f2006_lab1");
siteService.save(site);
// Ensure that a single internal section was created from the attached "roster" (aka provider ID)
Assert.assertEquals(1, sectionManager.getSections(siteId).size());
// Now create a complex provider ID (multiple rosters)
site.setProviderGroupId("bio101_f2006_lab1+bio101_f2006_lab2");
siteService.save(site);
// Ensure that both internal sections were created
Assert.assertEquals(2, sectionManager.getSections(siteId).size());
// Ensure that sections in this site can not be edited
CourseSection section = (CourseSection)sectionManager.getSections(siteId).get(0);
try {
sectionManager.updateSection(section.getUuid(), "a new title", null, null);
fail();
} catch (Exception e) {}
// Ensure that students can not be added
try {
sectionManager.addSectionMembership("admin", Role.STUDENT, section.getUuid());
fail("We should not be allowed to add students to an externally managed section");
} catch (Exception e) {}
// Ensure that TAs can be added
try {
sectionManager.addSectionMembership("admin", Role.TA, section.getUuid());
} catch (Exception e) {
fail("Exception adding a TA to an externally managed section: " + e.getMessage());
}
// Remove the provider ID (roster) from the site.
site.setProviderGroupId(null);
siteService.save(site);
// Ensure that the sections were removed
Assert.assertEquals(0, sectionManager.getSections(siteId).size());
}
}