/** * <a href="http://www.openolat.org"> * OpenOLAT - Online Learning and Training</a><br> * <p> * Licensed under the Apache License, Version 2.0 (the "License"); <br> * you may not use this file except in compliance with the License.<br> * You may obtain a copy of the License at the * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> * <p> * Unless required by applicable law or agreed to in writing,<br> * software distributed under the License is distributed on an "AS IS" BASIS, <br> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> * See the License for the specific language governing permissions and <br> * limitations under the License. * <p> * Initial code contributed and copyrighted by<br> * frentix GmbH, http://www.frentix.com * <p> */ package org.olat.modules.portfolio.manager; import java.util.Date; import java.util.List; import java.util.Locale; import org.junit.Assert; import org.junit.Test; import org.olat.core.commons.persistence.DB; import org.olat.core.commons.services.commentAndRating.manager.UserCommentsDAO; import org.olat.core.id.Identity; import org.olat.core.id.OLATResourceable; import org.olat.core.util.resource.OresHelper; import org.olat.modules.portfolio.Assignment; import org.olat.modules.portfolio.AssignmentType; import org.olat.modules.portfolio.Binder; import org.olat.modules.portfolio.Page; import org.olat.modules.portfolio.PortfolioRoles; import org.olat.modules.portfolio.PortfolioService; import org.olat.modules.portfolio.Section; import org.olat.modules.portfolio.SectionRef; import org.olat.modules.portfolio.model.AccessRights; import org.olat.modules.portfolio.model.BinderStatistics; import org.olat.modules.portfolio.model.SectionImpl; import org.olat.modules.portfolio.model.SynchedBinder; import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryService; import org.olat.resource.OLATResource; import org.olat.test.JunitTestHelper; import org.olat.test.OlatTestCase; import org.springframework.beans.factory.annotation.Autowired; /** * * Initial date: 07.06.2016<br> * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com * */ public class PortfolioServiceTest extends OlatTestCase { @Autowired private DB dbInstance; @Autowired private PageDAO pageDao; @Autowired private BinderDAO binderDao; @Autowired private AssignmentDAO assignmentDao; @Autowired private UserCommentsDAO userCommentsDao; @Autowired private PortfolioService portfolioService; @Autowired private RepositoryService repositoryService; @Test public void createNewOwnedPorfolio() { Identity id = JunitTestHelper.createAndPersistIdentityAsRndUser("port-u-1"); String title = "My portfolio"; String summary = "My live"; Binder binder = portfolioService.createNewBinder(title, summary, null, id); dbInstance.commitAndCloseSession(); Assert.assertNotNull(binder); Assert.assertNotNull(binder.getKey()); Assert.assertNotNull(binder.getCreationDate()); Assert.assertNotNull(binder.getLastModified()); Assert.assertEquals(title, binder.getTitle()); Assert.assertEquals(summary, binder.getSummary()); List<Binder> ownedBinders = portfolioService.getOwnedBinders(id); Assert.assertNotNull(ownedBinders); Assert.assertEquals(1, ownedBinders.size()); Binder ownedBinder = ownedBinders.get(0); Assert.assertNotNull(ownedBinder); Assert.assertEquals(binder, ownedBinder); } @Test public void binderAccessRights() { Identity owner = JunitTestHelper.createAndPersistIdentityAsRndUser("port-u-2"); String title = "My private binder"; String summary = "My live"; Binder binder = portfolioService.createNewBinder(title, summary, null, owner); dbInstance.commitAndCloseSession(); // load right List<AccessRights> rights = portfolioService.getAccessRights(binder); Assert.assertNotNull(rights); Assert.assertEquals(1, rights.size()); AccessRights ownerRight = rights.get(0); Assert.assertEquals(binder.getKey(), ownerRight.getBinderKey()); Assert.assertEquals(owner, ownerRight.getIdentity()); Assert.assertEquals(PortfolioRoles.owner, ownerRight.getRole()); } @Test public void binderAndSectionAndPageAccessRights() { Identity owner = JunitTestHelper.createAndPersistIdentityAsRndUser("port-u-3"); Identity coach = JunitTestHelper.createAndPersistIdentityAsRndUser("port-u-4"); Identity reviewer = JunitTestHelper.createAndPersistIdentityAsRndUser("port-u-5"); String title = "My published binder"; String summary = "My live"; Binder binder = portfolioService.createNewBinder(title, summary, null, owner); dbInstance.commit(); portfolioService.appendNewSection("Section", "Coached section", null, null, binder); dbInstance.commit(); List<Section> sections = portfolioService.getSections(binder); Section section = sections.get(0); portfolioService.appendNewPage(owner, "Reviewed page", "", null, null, section); portfolioService.addAccessRights(section, coach, PortfolioRoles.coach); dbInstance.commit(); List<Page> pages = portfolioService.getPages(section); Page page = pages.get(0); portfolioService.addAccessRights(page, reviewer, PortfolioRoles.reviewer); // load right List<AccessRights> rights = portfolioService.getAccessRights(binder); Assert.assertNotNull(rights); Assert.assertEquals(4, rights.size()); boolean foundOwner = false; boolean foundCoach = false; boolean foundReviewer = false; for(AccessRights right:rights) { if(PortfolioRoles.owner.equals(right.getRole()) && owner.equals(right.getIdentity())) { foundOwner = true; } else if(PortfolioRoles.coach.equals(right.getRole()) && coach.equals(right.getIdentity())) { foundCoach = true; } else if(PortfolioRoles.reviewer.equals(right.getRole()) && reviewer.equals(right.getIdentity())) { foundReviewer = true; } } Assert.assertTrue(foundOwner); Assert.assertTrue(foundCoach); Assert.assertTrue(foundReviewer); } @Test public void binderAndSectionAndPageAccessRights_byIdentity() { Identity owner = JunitTestHelper.createAndPersistIdentityAsRndUser("port-u-5"); Identity identity = JunitTestHelper.createAndPersistIdentityAsRndUser("port-u-6"); String title = "My published binder"; String summary = "My live"; Binder binder = portfolioService.createNewBinder(title, summary, null, owner); dbInstance.commit(); portfolioService.appendNewSection("Section", "Coached section", null, null, binder); dbInstance.commit(); List<Section> sections = portfolioService.getSections(binder); Section section = sections.get(0); portfolioService.appendNewPage(owner, "Reviewed page", "", null, null, section); portfolioService.addAccessRights(section, identity, PortfolioRoles.coach); dbInstance.commit(); List<Page> pages = portfolioService.getPages(section); Page page = pages.get(0); portfolioService.addAccessRights(page, identity, PortfolioRoles.reviewer); // load right List<AccessRights> rights = portfolioService.getAccessRights(binder, identity); Assert.assertNotNull(rights); Assert.assertEquals(2, rights.size()); } @Test public void searchOwnedBinders() { Identity owner = JunitTestHelper.createAndPersistIdentityAsRndUser("binder-owner-"); Binder binder = portfolioService.createNewBinder("Binder 2", "Binder with one section.", null, owner); dbInstance.commitAndCloseSession(); portfolioService.appendNewSection("First section", "My first section.", null, null, binder); dbInstance.commitAndCloseSession(); portfolioService.appendNewSection("Second section", "My second section.", null, null, binder); dbInstance.commitAndCloseSession(); List<Section> sections = portfolioService.getSections(binder); for(int i=0; i<2; i++) { Section section = sections.get(1); portfolioService.appendNewPage(owner, "Page-1-" + i, "", null, null, section); portfolioService.appendNewPage(owner, "Page-2-" + i, "", null, null, section); } List<BinderStatistics> rows = portfolioService.searchOwnedBinders(owner); Assert.assertNotNull(rows); Assert.assertEquals(1, rows.size()); BinderStatistics myBinder = rows.get(0); Assert.assertEquals(2, myBinder.getNumOfSections()); Assert.assertEquals(4, myBinder.getNumOfPages()); } @Test public void assignTemplate() { Identity owner = JunitTestHelper.createAndPersistIdentityAsRndUser("port-u-7"); Identity id = JunitTestHelper.createAndPersistIdentityAsRndUser("port-u-8"); //create a template String title = "Template binder"; String summary = "Binder used as a template"; Binder template = portfolioService.createNewBinder(title, summary, null, owner); dbInstance.commit(); for(int i=0; i<4; i++) { portfolioService.appendNewSection("Section " + i, "Section " + i, null, null, template); dbInstance.commit(); } dbInstance.commitAndCloseSession(); List<Section> templateSections = portfolioService.getSections(template); Assert.assertNotNull(templateSections); Assert.assertEquals(4, templateSections.size()); //user copy the template Binder binder = portfolioService.assignBinder(id, template, null, null, new Date()); dbInstance.commitAndCloseSession(); Assert.assertNotNull(binder); Assert.assertNotNull(binder.getKey()); Assert.assertNotNull(binder.getCopyDate()); Assert.assertNotNull(template.getTitle(), binder.getTitle()); List<Section> reloadedSections = portfolioService.getSections(binder); Assert.assertNotNull(reloadedSections); Assert.assertEquals(4, reloadedSections.size()); Assert.assertEquals(templateSections.get(0).getTitle(), reloadedSections.get(0).getTitle()); Assert.assertEquals("Section 1", reloadedSections.get(1).getTitle()); Assert.assertEquals(templateSections.get(2).getTitle(), reloadedSections.get(2).getTitle()); Assert.assertEquals("Section 3", reloadedSections.get(3).getTitle()); Assert.assertEquals(templateSections.get(0), ((SectionImpl)reloadedSections.get(0)).getTemplateReference()); Assert.assertEquals(templateSections.get(1), ((SectionImpl)reloadedSections.get(1)).getTemplateReference()); Assert.assertEquals(templateSections.get(2), ((SectionImpl)reloadedSections.get(2)).getTemplateReference()); Assert.assertEquals(templateSections.get(3), ((SectionImpl)reloadedSections.get(3)).getTemplateReference()); } @Test public void isTemplateInUse() { Identity owner = JunitTestHelper.createAndPersistIdentityAsRndUser("port-u-9"); Identity id = JunitTestHelper.createAndPersistIdentityAsRndUser("port-u-10"); RepositoryEntry templateEntry = createTemplate(owner, "Template", "TE"); dbInstance.commitAndCloseSession(); //assign a template Binder templateBinder = portfolioService.getBinderByResource(templateEntry.getOlatResource()); Binder template = portfolioService.assignBinder(id, templateBinder, templateEntry, null, null); dbInstance.commit(); Assert.assertNotNull(template); boolean inUse = portfolioService.isTemplateInUse(templateBinder, templateEntry, null); Assert.assertTrue(inUse); } @Test public void syncBinder() { Identity owner = JunitTestHelper.createAndPersistIdentityAsRndUser("port-u-10"); Identity id = JunitTestHelper.createAndPersistIdentityAsRndUser("port-u-11"); RepositoryEntry templateEntry = createTemplate(owner, "Template", "TE"); dbInstance.commitAndCloseSession(); //make 2 sections Binder templateBinder = portfolioService.getBinderByResource(templateEntry.getOlatResource()); //add 2 sections for(int i=0; i<2; i++) { portfolioService.appendNewSection("Section " + i, "Section " + i, null, null, templateBinder); dbInstance.commit(); } List<Section> templateSections = portfolioService.getSections(templateBinder); Assert.assertNotNull(templateSections); Assert.assertEquals(3, templateSections.size()); //user get a the binder from the template Binder binder = portfolioService.assignBinder(id, templateBinder, templateEntry, "ac-234", new Date()); dbInstance.commit(); Assert.assertNotNull(binder); boolean inUse = portfolioService.isTemplateInUse(templateBinder, templateEntry, "ac-234"); Assert.assertTrue(inUse); //update the template with 2 more sections for(int i=2; i<4; i++) { portfolioService.appendNewSection("Section " + i, "Section " + i, null, null, templateBinder); dbInstance.commit(); } SynchedBinder synchedBinder = portfolioService.loadAndSyncBinder(binder); Assert.assertNotNull(synchedBinder); dbInstance.commit(); Assert.assertTrue(synchedBinder.isChanged()); Assert.assertEquals(binder, synchedBinder.getBinder()); List<Section> synchedSections = portfolioService.getSections(synchedBinder.getBinder()); Assert.assertEquals(5, synchedSections.size()); } @Test public void syncBinder_move() { Identity owner = JunitTestHelper.createAndPersistIdentityAsRndUser("port-u-10"); Identity id = JunitTestHelper.createAndPersistIdentityAsRndUser("port-u-11"); RepositoryEntry templateEntry = createTemplate(owner, "Template", "TE"); dbInstance.commitAndCloseSession(); //make 2 sections Binder templateBinder = portfolioService.getBinderByResource(templateEntry.getOlatResource()); SectionRef sectionRef0 = portfolioService.getSections(templateBinder).get(0); //add 2 sections SectionRef sectionRef1 = portfolioService.appendNewSection("1 section ", "Section 1", null, null, templateBinder); SectionRef sectionRef2 = portfolioService.appendNewSection("2 section ", "Section 2", null, null, templateBinder); dbInstance.commit(); //make 4 assigments Section templateSection0 = portfolioService.getSection(sectionRef0); Section templateSection1 = portfolioService.getSection(sectionRef1); Section templateSection2 = portfolioService.getSection(sectionRef2); Assignment assignment1_1 = portfolioService.addAssignment("1.1 Assignment", "", "", AssignmentType.essay, templateSection1, false, false, false, null); Assignment assignment1_2 = portfolioService.addAssignment("1.2 Assignment", "", "", AssignmentType.essay, templateSection1, false, false, false, null); Assignment assignment2_1 = portfolioService.addAssignment("2.1 Assignment", "", "", AssignmentType.essay, templateSection2, false, false, false, null); Assignment assignment2_2 = portfolioService.addAssignment("2.2 Assignment", "", "", AssignmentType.essay, templateSection2, false, false, false, null); dbInstance.commit(); List<Assignment> templateAssignments = portfolioService.getAssignments(templateBinder, null); Assert.assertEquals(4, templateAssignments.size()); // a user take the binder and synched it a first time Binder binder = portfolioService.assignBinder(id, templateBinder, templateEntry, "72", null); dbInstance.commit(); SynchedBinder synchedBinder = portfolioService.loadAndSyncBinder(binder); dbInstance.commitAndCloseSession(); Assert.assertNotNull(synchedBinder); Assert.assertEquals(binder, synchedBinder.getBinder()); //start all assigments List<Assignment> assignments = portfolioService.getAssignments(binder, null); Assert.assertEquals(4, assignments.size()); for(Assignment assignment:assignments) { portfolioService.startAssignment(assignment, id); dbInstance.commit(); } dbInstance.commit(); List<Page> pages = portfolioService.getPages(binder, null); Assert.assertEquals(4, pages.size()); //the author move an assigment portfolioService.moveAssignment(templateSection1, assignment1_1, templateSection2); dbInstance.commit(); portfolioService.moveAssignment(templateSection2, assignment2_1, templateSection1); dbInstance.commitAndCloseSession(); //check the move List<Assignment> templateAssignmentsSection1 = portfolioService.getAssignments(templateSection1, null); Assert.assertTrue(templateAssignmentsSection1.contains(assignment1_2)); Assert.assertTrue(templateAssignmentsSection1.contains(assignment2_1)); List<Assignment> templateAssignmentsSection2 = portfolioService.getAssignments(templateSection2, null); Assert.assertTrue(templateAssignmentsSection2.contains(assignment2_2)); Assert.assertTrue(templateAssignmentsSection2.contains(assignment1_1)); // synched and check the sections order SynchedBinder synchedBinder2 = portfolioService.loadAndSyncBinder(binder); Binder freshBinder = synchedBinder2.getBinder(); List<Section> sections = portfolioService.getSections(freshBinder); Assert.assertEquals(3, sections.size()); Section section0 = sections.get(0); Section section1 = sections.get(1); Section section2 = sections.get(2); Assert.assertEquals(templateSection0, section0.getTemplateReference()); Assert.assertEquals(templateSection1, section1.getTemplateReference()); Assert.assertEquals(templateSection2, section2.getTemplateReference()); // load pages from section 1 List<Page> pagesSection1 = portfolioService.getPages(section1); Assert.assertEquals(2, pagesSection1.size()); Page page1_2 = pagesSection1.get(0); Page page2_1 = pagesSection1.get(1); Assert.assertTrue(page1_2.getTitle().equals("2.1 Assignment") || page1_2.getTitle().equals("1.2 Assignment")); Assert.assertTrue(page2_1.getTitle().equals("2.1 Assignment") || page2_1.getTitle().equals("1.2 Assignment")); // and pages from section 2 List<Page> pagesSection2 = portfolioService.getPages(section2); Assert.assertEquals(2, pagesSection2.size()); Page page2_2 = pagesSection2.get(0); Page page1_1 = pagesSection2.get(1); Assert.assertTrue(page2_2.getTitle().equals("1.1 Assignment") || page2_2.getTitle().equals("2.2 Assignment")); Assert.assertTrue(page1_1.getTitle().equals("1.1 Assignment") || page1_1.getTitle().equals("2.2 Assignment")); } @Test public void syncBinder_moveInNewSection() { Identity owner = JunitTestHelper.createAndPersistIdentityAsRndUser("port-u-10"); Identity id = JunitTestHelper.createAndPersistIdentityAsRndUser("port-u-11"); RepositoryEntry templateEntry = createTemplate(owner, "Template", "TE"); dbInstance.commitAndCloseSession(); //make 2 sections Binder templateBinder = portfolioService.getBinderByResource(templateEntry.getOlatResource()); SectionRef sectionRef0 = portfolioService.getSections(templateBinder).get(0); //add 2 sections SectionRef sectionRef1 = portfolioService.appendNewSection("1 section ", "Section 1", null, null, templateBinder); SectionRef sectionRef2 = portfolioService.appendNewSection("2 section ", "Section 2", null, null, templateBinder); dbInstance.commit(); //make 4 assignments Section templateSection0 = portfolioService.getSection(sectionRef0); Section templateSection1 = portfolioService.getSection(sectionRef1); Section templateSection2 = portfolioService.getSection(sectionRef2); Assignment assignment1_1 = portfolioService.addAssignment("1.1 Assignment", "", "", AssignmentType.essay, templateSection1, false, false, false, null); Assignment assignment1_2 = portfolioService.addAssignment("1.2 Assignment", "", "", AssignmentType.essay, templateSection1, false, false, false, null); Assignment assignment2_1 = portfolioService.addAssignment("2.1 Assignment", "", "", AssignmentType.essay, templateSection2, false, false, false, null); Assignment assignment2_2 = portfolioService.addAssignment("2.2 Assignment", "", "", AssignmentType.essay, templateSection2, false, false, false, null); dbInstance.commit(); List<Assignment> templateAssignments = portfolioService.getAssignments(templateBinder, null); Assert.assertEquals(4, templateAssignments.size()); // a user take the binder and synched it a first time Binder binder = portfolioService.assignBinder(id, templateBinder, templateEntry, "72", null); dbInstance.commit(); SynchedBinder synchedBinder = portfolioService.loadAndSyncBinder(binder); dbInstance.commitAndCloseSession(); Assert.assertNotNull(synchedBinder); Assert.assertEquals(binder, synchedBinder.getBinder()); //start all assignments List<Assignment> assignments = portfolioService.getAssignments(binder, null); Assert.assertEquals(4, assignments.size()); for(Assignment assignment:assignments) { portfolioService.startAssignment(assignment, id); dbInstance.commit(); } dbInstance.commit(); // check that the student has it's 4 pages List<Page> pages = portfolioService.getPages(binder, null); Assert.assertEquals(4, pages.size()); //author create a new section and move an assignment SectionRef sectionRef3 = portfolioService.appendNewSection("3 section ", "Section 3", null, null, templateBinder); dbInstance.commit(); Section templateSection3 = portfolioService.getSection(sectionRef3); Assignment assignment3_1 = portfolioService.addAssignment("3.1 Assignment", "", "", AssignmentType.essay, templateSection3, false, false, false, null); dbInstance.commit(); //the author move an assigment portfolioService.moveAssignment(templateSection1, assignment1_1, templateSection2); dbInstance.commit(); portfolioService.moveAssignment(templateSection2, assignment2_1, templateSection3); dbInstance.commitAndCloseSession(); //check the move List<Assignment> templateAssignmentsSection1 = portfolioService.getAssignments(templateSection1, null); Assert.assertTrue(templateAssignmentsSection1.contains(assignment1_2)); List<Assignment> templateAssignmentsSection2 = portfolioService.getAssignments(templateSection2, null); Assert.assertTrue(templateAssignmentsSection2.contains(assignment2_2)); Assert.assertTrue(templateAssignmentsSection2.contains(assignment1_1)); List<Assignment> templateAssignmentsSection3 = portfolioService.getAssignments(templateSection3, null); Assert.assertTrue(templateAssignmentsSection3.contains(assignment2_1)); Assert.assertTrue(templateAssignmentsSection3.contains(assignment3_1)); // synched and check the sections order SynchedBinder synchedBinder2 = portfolioService.loadAndSyncBinder(binder); Binder freshBinder = synchedBinder2.getBinder(); List<Section> sections = portfolioService.getSections(freshBinder); Assert.assertEquals(4, sections.size()); Section section0 = sections.get(0); Section section1 = sections.get(1); Section section2 = sections.get(2); Section section3 = sections.get(3); Assert.assertEquals(templateSection0, section0.getTemplateReference()); Assert.assertEquals(templateSection1, section1.getTemplateReference()); Assert.assertEquals(templateSection2, section2.getTemplateReference()); Assert.assertEquals(templateSection3, section3.getTemplateReference()); // load pages from section 1 List<Page> pagesSection1 = portfolioService.getPages(section1); Assert.assertEquals(1, pagesSection1.size()); Page page1_2 = pagesSection1.get(0); Assert.assertTrue(page1_2.getTitle().equals("1.2 Assignment")); // and pages from section 2 List<Page> pagesSection2 = portfolioService.getPages(section2); Assert.assertEquals(2, pagesSection2.size()); Page page2_2 = pagesSection2.get(0); Page page1_1 = pagesSection2.get(1); Assert.assertTrue(page2_2.getTitle().equals("1.1 Assignment") || page2_2.getTitle().equals("2.2 Assignment")); Assert.assertTrue(page1_1.getTitle().equals("1.1 Assignment") || page1_1.getTitle().equals("2.2 Assignment")); // and pages from section 3 List<Page> pagesSection3 = portfolioService.getPages(section3); Assert.assertEquals(1, pagesSection3.size()); Page page2_1 = pagesSection3.get(0); Assert.assertTrue(page2_1.getTitle().equals("2.1 Assignment")); List<Assignment> assignmentsSection3 = section3.getAssignments(); Assert.assertEquals(2, assignmentsSection3.size()); Assignment templateSynchedSection3a = assignmentsSection3.get(0).getTemplateReference(); Assignment templateSynchedSection3b = assignmentsSection3.get(1).getTemplateReference(); Assert.assertTrue(assignment3_1.equals(templateSynchedSection3a) || assignment3_1.equals(templateSynchedSection3b)); Assert.assertTrue(assignment2_1.equals(templateSynchedSection3a) || assignment2_1.equals(templateSynchedSection3b)); } @Test public void syncBinder_moveInNewSection_moreComplexCase() { Identity owner = JunitTestHelper.createAndPersistIdentityAsRndUser("port-u-10"); Identity id = JunitTestHelper.createAndPersistIdentityAsRndUser("port-u-11"); RepositoryEntry templateEntry = createTemplate(owner, "Template", "TE"); dbInstance.commitAndCloseSession(); //make 2 sections Binder templateBinder = portfolioService.getBinderByResource(templateEntry.getOlatResource()); SectionRef sectionRef0 = portfolioService.getSections(templateBinder).get(0); //add 2 sections SectionRef sectionRef1 = portfolioService.appendNewSection("1 section ", "Section 1", null, null, templateBinder); SectionRef sectionRef2 = portfolioService.appendNewSection("2 section ", "Section 2", null, null, templateBinder); dbInstance.commit(); //make 4 assignments Section templateSection0 = portfolioService.getSection(sectionRef0); Section templateSection1 = portfolioService.getSection(sectionRef1); Section templateSection2 = portfolioService.getSection(sectionRef2); Assignment assignment0_1 = portfolioService.addAssignment("0.1 Assignment", "", "", AssignmentType.essay, templateSection0, false, false, false, null); Assignment assignment1_1 = portfolioService.addAssignment("1.1 Assignment", "", "", AssignmentType.essay, templateSection1, false, false, false, null); Assignment assignment1_2 = portfolioService.addAssignment("1.2 Assignment", "", "", AssignmentType.essay, templateSection1, false, false, false, null); Assignment assignment2_1 = portfolioService.addAssignment("2.1 Assignment", "", "", AssignmentType.essay, templateSection2, false, false, false, null); Assignment assignment2_2 = portfolioService.addAssignment("2.2 Assignment", "", "", AssignmentType.essay, templateSection2, false, false, false, null); dbInstance.commit(); List<Assignment> templateAssignments = portfolioService.getAssignments(templateBinder, null); Assert.assertEquals(5, templateAssignments.size()); // a user take the binder and synched it a first time Binder binder = portfolioService.assignBinder(id, templateBinder, templateEntry, "74", null); dbInstance.commit(); SynchedBinder synchedBinder = portfolioService.loadAndSyncBinder(binder); dbInstance.commitAndCloseSession(); Assert.assertNotNull(synchedBinder); Assert.assertEquals(binder, synchedBinder.getBinder()); //start all assignments List<Assignment> assignments = portfolioService.getAssignments(binder, null); Assert.assertEquals(5, assignments.size()); for(Assignment assignment:assignments) { portfolioService.startAssignment(assignment, id); dbInstance.commit(); } dbInstance.commit(); // check that the student has it's 4 pages List<Page> pages = portfolioService.getPages(binder, null); Assert.assertEquals(5, pages.size()); //author create 2 new sections, move the 4 to the top SectionRef sectionRef3 = portfolioService.appendNewSection("3 section ", "Section 3", null, null, templateBinder); SectionRef sectionRef4 = portfolioService.appendNewSection("4 section ", "Section 4", null, null, templateBinder); dbInstance.commit(); Section templateSection3 = portfolioService.getSection(sectionRef3); Section templateSection4 = portfolioService.getSection(sectionRef4); templateBinder = portfolioService.moveUpSection(templateBinder, templateSection4); dbInstance.commit(); templateBinder = portfolioService.moveUpSection(templateBinder, templateSection4); dbInstance.commit(); templateBinder = portfolioService.moveUpSection(templateBinder, templateSection4); dbInstance.commit(); templateBinder = portfolioService.moveUpSection(templateBinder, templateSection4); dbInstance.commit(); // add new assignment Assignment assignment3_1 = portfolioService.addAssignment("3.1 Assignment", "", "", AssignmentType.essay, templateSection3, false, false, false, null); Assignment assignment4_1 = portfolioService.addAssignment("4.1 Assignment", "", "", AssignmentType.essay, templateSection4, false, false, false, null); dbInstance.commit(); //the author move some assignments portfolioService.moveAssignment(templateSection1, assignment1_1, templateSection3); dbInstance.commit(); portfolioService.moveAssignment(templateSection1, assignment1_2, templateSection2); dbInstance.commit(); portfolioService.moveAssignment(templateSection2, assignment2_1, templateSection3); dbInstance.commit(); portfolioService.moveAssignment(templateSection2, assignment2_2, templateSection4); dbInstance.commitAndCloseSession(); //update the data of some assignments assignment2_1 = assignmentDao.loadAssignmentByKey(assignment2_1.getKey()); assignment4_1 = assignmentDao.loadAssignmentByKey(assignment4_1.getKey()); assignment2_1 = portfolioService.updateAssignment(assignment2_1, "2.1 Assignment", "Assignment 2 description", "", AssignmentType.essay, false, false, false, null); assignment4_1 = portfolioService.updateAssignment(assignment4_1, "4.1 Assignment", "Assignment 4 description", "", AssignmentType.document, false, false, false, null); dbInstance.commit(); //check the move List<Assignment> templateAssignmentsSection0 = portfolioService.getAssignments(templateSection0, null); Assert.assertTrue(templateAssignmentsSection0.contains(assignment0_1)); List<Assignment> templateAssignmentsSection1 = portfolioService.getAssignments(templateSection1, null); Assert.assertTrue(templateAssignmentsSection1.isEmpty()); List<Assignment> templateAssignmentsSection2 = portfolioService.getAssignments(templateSection2, null); Assert.assertEquals(1, templateAssignmentsSection2.size()); Assert.assertTrue(templateAssignmentsSection2.contains(assignment1_2)); List<Assignment> templateAssignmentsSection3 = portfolioService.getAssignments(templateSection3, null); Assert.assertEquals(3, templateAssignmentsSection3.size()); Assert.assertTrue(templateAssignmentsSection3.contains(assignment1_1)); Assert.assertTrue(templateAssignmentsSection3.contains(assignment2_1)); Assert.assertTrue(templateAssignmentsSection3.contains(assignment3_1)); List<Assignment> templateAssignmentsSection4 = portfolioService.getAssignments(templateSection4, null); Assert.assertEquals(2, templateAssignmentsSection4.size()); Assert.assertTrue(templateAssignmentsSection4.contains(assignment2_2)); Assert.assertTrue(templateAssignmentsSection4.contains(assignment4_1)); // synched and check the sections order SynchedBinder synchedBinder2 = portfolioService.loadAndSyncBinder(binder); Binder freshBinder = synchedBinder2.getBinder(); dbInstance.commitAndCloseSession(); List<Section> sections = portfolioService.getSections(freshBinder); Assert.assertEquals(5, sections.size()); Section section4 = sections.get(0); Section section0 = sections.get(1); Section section1 = sections.get(2); Section section2 = sections.get(3); Section section3 = sections.get(4); Assert.assertEquals(templateSection0, section0.getTemplateReference()); Assert.assertEquals(templateSection1, section1.getTemplateReference()); Assert.assertEquals(templateSection2, section2.getTemplateReference()); Assert.assertEquals(templateSection3, section3.getTemplateReference()); Assert.assertEquals(templateSection4, section4.getTemplateReference()); // load pages from section 0 List<Page> pagesSection0 = portfolioService.getPages(section0); Assert.assertEquals(1, pagesSection0.size()); Page page0_1 = pagesSection0.get(0); Assert.assertTrue(page0_1.getTitle().equals("0.1 Assignment")); // load pages from section 1 List<Page> pagesSection1 = portfolioService.getPages(section1); Assert.assertTrue(pagesSection1.isEmpty()); // and pages from section 2 List<Page> pagesSection2 = portfolioService.getPages(section2); Assert.assertEquals(1, pagesSection2.size()); Page page1_2 = pagesSection2.get(0); Assert.assertTrue(page1_2.getTitle().equals("1.2 Assignment")); // and pages from section 3 List<Page> pagesSection3 = portfolioService.getPages(section3); Assert.assertEquals(2, pagesSection3.size()); Page page1_1 = pagesSection3.get(0); Page page2_1 = pagesSection3.get(1); Assert.assertTrue(page1_1.getTitle().equals("1.1 Assignment") || page1_1.getTitle().equals("2.1 Assignment")); Assert.assertTrue(page2_1.getTitle().equals("1.1 Assignment") || page2_1.getTitle().equals("2.1 Assignment")); // and pages from section 4 List<Page> pagesSection4 = portfolioService.getPages(section4); Assert.assertEquals(1, pagesSection4.size()); Page page2_2 = pagesSection4.get(0); Assert.assertTrue(page2_2.getTitle().equals("2.2 Assignment")); //check the assignments //section 0 List<Assignment> assignmentsSection0 = section0.getAssignments(); Assert.assertEquals(1, assignmentsSection0.size()); Assignment templateSynchedSection0a = assignmentsSection0.get(0).getTemplateReference(); Assert.assertTrue(assignment0_1.equals(templateSynchedSection0a)); //section 1 List<Assignment> assignmentsSection1 = section1.getAssignments(); Assert.assertTrue(assignmentsSection1.isEmpty()); //section 2 List<Assignment> assignmentsSection2= section2.getAssignments(); Assert.assertEquals(1, assignmentsSection2.size()); Assignment templateSynchedSection2a = assignmentsSection2.get(0).getTemplateReference(); Assert.assertTrue(assignment1_2.equals(templateSynchedSection2a)); //section 3 List<Assignment> assignmentsSection3 = section3.getAssignments(); Assert.assertEquals(3, assignmentsSection3.size()); Assignment templateSynchedSection3a = assignmentsSection3.get(0).getTemplateReference(); Assignment templateSynchedSection3b = assignmentsSection3.get(1).getTemplateReference(); Assignment templateSynchedSection3c = assignmentsSection3.get(2).getTemplateReference(); Assert.assertTrue(assignment3_1.equals(templateSynchedSection3a) || assignment3_1.equals(templateSynchedSection3b) || assignment3_1.equals(templateSynchedSection3c)); Assert.assertTrue(assignment2_1.equals(templateSynchedSection3a) || assignment2_1.equals(templateSynchedSection3b) || assignment2_1.equals(templateSynchedSection3c)); Assert.assertTrue(assignment1_1.equals(templateSynchedSection3a) || assignment1_1.equals(templateSynchedSection3b) || assignment1_1.equals(templateSynchedSection3c)); //section 4 List<Assignment> assignmentsSection4 = section4.getAssignments(); Assert.assertEquals(2, assignmentsSection4.size()); Assignment templateSynchedSection4a = assignmentsSection4.get(0).getTemplateReference(); Assignment templateSynchedSection4b = assignmentsSection4.get(1).getTemplateReference(); Assert.assertTrue(assignment2_2.equals(templateSynchedSection4a) || assignment2_2.equals(templateSynchedSection4b)); Assert.assertTrue(assignment4_1.equals(templateSynchedSection4a) || assignment4_1.equals(templateSynchedSection4b)); //check update of assignments Assert.assertEquals("Assignment 2 description", assignment2_1.getSummary()); Assert.assertEquals("Assignment 4 description", assignment4_1.getSummary()); } @Test public void removeAssignment() { Identity owner = JunitTestHelper.createAndPersistIdentityAsRndUser("port-u-10"); RepositoryEntry templateEntry = createTemplate(owner, "Template", "TE"); dbInstance.commitAndCloseSession(); //make the binder and the section Binder templateBinder = portfolioService.getBinderByResource(templateEntry.getOlatResource()); SectionRef sectionRef = portfolioService.getSections(templateBinder).get(0); dbInstance.commit(); //make 4 assignments Section templateSection = portfolioService.getSection(sectionRef); Assignment assignment_1 = portfolioService.addAssignment("1 Assignment", "", "", AssignmentType.essay, templateSection, false, false, false, null); Assignment assignment_2 = portfolioService.addAssignment("2 Assignment", "", "", AssignmentType.essay, templateSection, false, false, false, null); Assignment assignment_3 = portfolioService.addAssignment("3 Assignment", "", "", AssignmentType.essay, templateSection, false, false, false, null); Assignment assignment_4 = portfolioService.addAssignment("3 Assignment", "", "", AssignmentType.essay, templateSection, false, false, false, null); dbInstance.commitAndCloseSession(); boolean ok = portfolioService.deleteAssignment(assignment_3); Assert.assertTrue(ok); dbInstance.commitAndCloseSession(); List<Assignment> assignments = portfolioService.getSection(sectionRef).getAssignments(); Assert.assertNotNull(assignments); Assert.assertEquals(3, assignments.size()); Assert.assertTrue(assignments.contains(assignment_1)); Assert.assertTrue(assignments.contains(assignment_2)); Assert.assertFalse(assignments.contains(assignment_3)); Assert.assertTrue(assignments.contains(assignment_4)); } @Test public void removeAssignment_usedOne() { Identity owner = JunitTestHelper.createAndPersistIdentityAsRndUser("port-u-10"); Identity id = JunitTestHelper.createAndPersistIdentityAsRndUser("port-u-11"); RepositoryEntry templateEntry = createTemplate(owner, "Template", "TE"); dbInstance.commitAndCloseSession(); //make 2 sections Binder templateBinder = portfolioService.getBinderByResource(templateEntry.getOlatResource()); SectionRef sectionRef = portfolioService.getSections(templateBinder).get(0); dbInstance.commit(); //make 4 assignments Section templateSection = portfolioService.getSection(sectionRef); Assignment assignment_1 = portfolioService.addAssignment("1 Assignment", "", "", AssignmentType.essay, templateSection, false, false, false, null); Assignment assignment_2 = portfolioService.addAssignment("2 Assignment", "", "", AssignmentType.essay, templateSection, false, false, false, null); Assignment assignment_3 = portfolioService.addAssignment("3 Assignment", "", "", AssignmentType.essay, templateSection, false, false, false, null); Assignment assignment_4 = portfolioService.addAssignment("4 Assignment", "", "", AssignmentType.essay, templateSection, false, false, false, null); dbInstance.commit(); List<Assignment> templateAssignments = portfolioService.getAssignments(templateBinder, null); Assert.assertEquals(4, templateAssignments.size()); Assert.assertTrue(templateAssignments.contains(assignment_1)); Assert.assertTrue(templateAssignments.contains(assignment_2)); Assert.assertTrue(templateAssignments.contains(assignment_3)); Assert.assertTrue(templateAssignments.contains(assignment_4)); // synched and check the sections order Binder binder = portfolioService.assignBinder(id, templateBinder, templateEntry, null, null); SynchedBinder synchedBinder = portfolioService.loadAndSyncBinder(binder); binder = synchedBinder.getBinder(); dbInstance.commitAndCloseSession(); List<Assignment> assignments = portfolioService.getAssignments(binder, null); portfolioService.startAssignment(assignments.get(0), id); portfolioService.startAssignment(assignments.get(1), id); portfolioService.startAssignment(assignments.get(2), id); portfolioService.startAssignment(assignments.get(3), id); dbInstance.commit(); List<Section> sections = portfolioService.getSections(binder); List<Page> pages = portfolioService.getPages(sections.get(0)); Assert.assertEquals(4, pages.size()); //delete an assignment boolean ok = portfolioService.deleteAssignment(assignment_3); Assert.assertTrue(ok); dbInstance.commitAndCloseSession(); //sync the binder SynchedBinder reSynchedBinder = portfolioService.loadAndSyncBinder(binder); binder = reSynchedBinder.getBinder(); dbInstance.commitAndCloseSession(); //deleting an assignment doesn't delete the pages List<Page> allPages = portfolioService.getPages(sections.get(0)); Assert.assertEquals(4, allPages.size()); //sync twice SynchedBinder reReSynchedBinder = portfolioService.loadAndSyncBinder(binder); binder = reReSynchedBinder.getBinder(); dbInstance.commitAndCloseSession(); } private RepositoryEntry createTemplate(Identity initialAuthor, String displayname, String description) { OLATResource resource = portfolioService.createBinderTemplateResource(); RepositoryEntry re = repositoryService.create(initialAuthor, null, "", displayname, description, resource, RepositoryEntry.ACC_OWNERS); portfolioService.createAndPersistBinderTemplate(initialAuthor, re, Locale.ENGLISH); return re; } @Test public void deleteBinder() { Identity owner = JunitTestHelper.createAndPersistIdentityAsRndUser("del-binder-"); Binder binder = portfolioService.createNewBinder("Binder to delete", "Deletion", "", owner); SectionRef sectionRef1 = portfolioService.appendNewSection("1. section ", "Section 1", null, null, binder); dbInstance.commit(); SectionRef sectionRef2 = portfolioService.appendNewSection("2. section ", "Section 2", null, null, binder); dbInstance.commit(); portfolioService.updateBinderUserInformations(binder, owner); dbInstance.commit(); Section reloadedSection1 = portfolioService.getSection(sectionRef1); Page page1 = portfolioService.appendNewPage(owner, "New page", "A brand new page.", null, null, reloadedSection1); Section reloadedSection2 = portfolioService.getSection(sectionRef2); Page page2 = portfolioService.appendNewPage(owner, "New page", "A brand new page.", null, null, reloadedSection2); Assert.assertNotNull(page1); Assert.assertNotNull(page2); dbInstance.commitAndCloseSession(); //delete boolean deleted = portfolioService.deleteBinder(binder); dbInstance.commit(); Assert.assertTrue(deleted); } @Test public void deleteSynchedBinder() { Identity owner = JunitTestHelper.createAndPersistIdentityAsRndUser("port-u-12"); Identity id = JunitTestHelper.createAndPersistIdentityAsRndUser("port-u-13"); RepositoryEntry templateEntry = createTemplate(owner, "Template", "TE"); dbInstance.commitAndCloseSession(); //get section Binder templateBinder = portfolioService.getBinderByResource(templateEntry.getOlatResource()); SectionRef sectionRef = portfolioService.getSections(templateBinder).get(0); dbInstance.commit(); //make 2 assignments Section templateSection = portfolioService.getSection(sectionRef); Assignment assignment_1 = portfolioService.addAssignment("1 Assignment", "", "", AssignmentType.essay, templateSection, false, false, false, null); Assignment assignment_2 = portfolioService.addAssignment("2 Assignment", "", "", AssignmentType.essay, templateSection, false, false, false, null); dbInstance.commit(); List<Assignment> templateAssignments = portfolioService.getAssignments(templateBinder, null); Assert.assertEquals(2, templateAssignments.size()); // synched and check the sections order Binder binder = portfolioService.assignBinder(id, templateBinder, templateEntry, null, null); SynchedBinder synchedBinder = portfolioService.loadAndSyncBinder(binder); binder = synchedBinder.getBinder(); dbInstance.commitAndCloseSession(); List<Assignment> assignments = portfolioService.getAssignments(binder, null); Assignment startedAssignment_1 = portfolioService.startAssignment(assignments.get(0), id); Assignment startedAssignment_2 = portfolioService.startAssignment(assignments.get(1), id); Long startedPageKey_1 = startedAssignment_1.getPage().getKey(); Long startedPageKey_2 = startedAssignment_2.getPage().getKey(); dbInstance.commitAndCloseSession(); //add some comments OLATResourceable startedPageOres_1 = OresHelper.createOLATResourceableInstance(Page.class, startedPageKey_1); userCommentsDao.createComment(id, startedPageOres_1, null, "Hello"); //delete boolean deleted = portfolioService.deleteBinder(binder); dbInstance.commit(); Assert.assertTrue(deleted); //check that the template is save Assignment reloadAssignment_1 = assignmentDao.loadAssignmentByKey(assignment_1.getKey()); Assert.assertNotNull(reloadAssignment_1); Assignment reloadAssignment_2 = assignmentDao.loadAssignmentByKey(assignment_2.getKey()); Assert.assertNotNull(reloadAssignment_2); //check that the binder is really deleted Binder reloadedBinder = binderDao.loadByKey(binder.getKey()); Assert.assertNull(reloadedBinder); Assignment reloadStartedAssignment_1 = assignmentDao.loadAssignmentByKey(startedAssignment_1.getKey()); Assert.assertNull(reloadStartedAssignment_1); Assignment reloadStartedAssignment_2 = assignmentDao.loadAssignmentByKey(startedAssignment_2.getKey()); Assert.assertNull(reloadStartedAssignment_2); Page reloadedStartedPage_1 = pageDao.loadByKey(startedPageKey_1); Assert.assertNull(reloadedStartedPage_1); Page reloadedStartedPage_2 = pageDao.loadByKey(startedPageKey_2); Assert.assertNull(reloadedStartedPage_2); } }