Merge branch 'm3_number_of_ideas' into develop

This commit is contained in:
Emil Siverhall 2012-08-01 10:49:04 +02:00
commit adaded1029
8 changed files with 264 additions and 104 deletions

@ -9,7 +9,6 @@ import org.apache.wicket.markup.html.form.Button;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.apache.wicket.util.time.Duration;
@ -17,6 +16,7 @@ import se.su.dsv.scipro.data.dataobjects.ProjectClass;
import se.su.dsv.scipro.data.dataobjects.Student;
import se.su.dsv.scipro.data.dataobjects.User;
import se.su.dsv.scipro.match.dataobject.SupervisorIdea;
import se.su.dsv.scipro.peer.data.dao.controllers.Pair;
import se.su.dsv.scipro.reusable.AddRemoveStudentsPanel;
import se.su.dsv.scipro.springdata.services.SupervisorIdeaService;
import se.su.dsv.scipro.util.JavascriptEventConfirmation;
@ -66,8 +66,14 @@ public class AcceptIdeaDialogPanel extends Panel {
@Override
public void onSubmit(){
ideaService.partnerAcceptIdea(model, loggedInUser);
getSession().info("You have accepted to be a part of the project: "+ model.getObject().getTitle());
Pair<Boolean, String> acceptance = ideaService.validatePartnerAcceptance(loggedInUser);
if(acceptance.head){
ideaService.partnerAcceptIdea(model.getObject(), loggedInUser);
getSession().info("You have accepted to be a part of the project: "+ model.getObject().getTitle());
} else {
getSession().error(acceptance.tail);
}
}
};
EnclosureContainer cont = new EnclosureContainer("unconfirmedContainer", acceptButton);
@ -78,7 +84,7 @@ public class AcceptIdeaDialogPanel extends Panel {
@Override
public void onSubmit(){
ideaService.declineIdea(model);
ideaService.declineIdea(model.getObject());
getSession().info("You have declined to be a part of the project: "+ model.getObject().getTitle());
}
};
@ -112,10 +118,12 @@ public class AcceptIdeaDialogPanel extends Panel {
@Override
public void onSubmit() {
if(ideaService.acceptIdea(model, loggedInUser, partnerPanel.getStudentSet())){
Pair<Boolean, String> acceptance = ideaService.validateIdeaAcceptance(model.getObject(), loggedInUser, partnerPanel.getStudentSet());
if(acceptance.head){
ideaService.acceptIdea(model.getObject(), loggedInUser, partnerPanel.getStudentSet());
getSession().info("You have successfully accepted this project idea");
} else {
getSession().error("Something went wrong while trying to accept the project idea");
getSession().error(acceptance.tail);
}

@ -41,7 +41,7 @@ public class CompleteIdeaDialogPanel extends Panel {
@Override
public void onSubmit() {
ideaService.updateIdea(model);
ideaService.updateIdea(model.getObject());
getSession().info("Project idea updated");
}
};
@ -56,7 +56,7 @@ public class CompleteIdeaDialogPanel extends Panel {
@Override
public void onSubmit() {
ideaService.declineIdea(model);
ideaService.declineIdea(model.getObject());
getSession().info("Project idea participation cancelled");
}
};

@ -22,6 +22,9 @@ public interface SupervisorIdeaRepo extends JpaRepository<SupervisorIdea, Long>,
@Query("select idea from SupervisorIdea idea, Student author join idea.ideaParticipations ideaPart join author.ideaParticipations authorPart where ideaPart = authorPart and author = ? and idea.ideaStatus = ?")
List<SupervisorIdea> findIdeasByAuthorAndStatus(Student author, IdeaStatus status);
@Query("select count(idea) from SupervisorIdea idea, Student author join idea.ideaParticipations ideaPart join author.ideaParticipations authorPart where ideaPart = authorPart and author = ? and idea.ideaStatus = ?")
Long countIdeasByAuthorAndStatus(Student author, IdeaStatus status);
@Query("select idea from SupervisorIdea idea, Student author join idea.ideaParticipations ideaPart join author.ideaParticipations authorPart where ideaPart = authorPart and author = ? and idea.ideaStatus = ? and ideaPart.confirmed = ?")
List<SupervisorIdea> findIdeas(Student author, IdeaStatus status, boolean confirmed);
}

@ -7,7 +7,7 @@ import java.util.SortedSet;
import javax.annotation.Resource;
import org.apache.wicket.model.IModel;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.domain.Page;
@ -24,6 +24,7 @@ import se.su.dsv.scipro.match.dataobject.IdeaParticipation;
import se.su.dsv.scipro.match.dataobject.QSupervisorIdea;
import se.su.dsv.scipro.match.dataobject.SupervisorIdea;
import se.su.dsv.scipro.match.dataobject.Watson;
import se.su.dsv.scipro.peer.data.dao.controllers.Pair;
import se.su.dsv.scipro.springdata.repos.SupervisorIdeaRepo;
import se.su.dsv.scipro.springdata.services.ApplicationPeriodService;
import se.su.dsv.scipro.springdata.services.StudentService;
@ -46,7 +47,7 @@ public class SupervisorIdeaServiceImpl extends AbstractQueryService<SupervisorId
private SupervisorService supervisorService;
@Resource
private ApplicationPeriodService applicationPeriodService;
private transient Logger logger = Logger.getLogger(SupervisorIdeaService.class);
private int MAX_PARTNERS = 1;
@Autowired
@ -59,9 +60,7 @@ public class SupervisorIdeaServiceImpl extends AbstractQueryService<SupervisorId
@Override
@Transactional ( readOnly = false )
public void saveSupervisorCreatedIdea(IModel<SupervisorIdea> model, Employee creator, SortedSet<Student> students) {
SupervisorIdea idea = model.getObject();
public void saveSupervisorCreatedIdea(SupervisorIdea idea, Employee creator, SortedSet<Student> students) {
if(!students.isEmpty()) {
for(Student s : students) {
@ -84,91 +83,133 @@ public class SupervisorIdeaServiceImpl extends AbstractQueryService<SupervisorId
@Override
@Transactional ( readOnly = false )
public void deleteWaitingIdea(IModel<SupervisorIdea> model) {
SupervisorIdea idea = supervisorIdeaRepo.findOne(model.getObject().getId());
if(!idea.getIdeaStatus().equals(IdeaStatus.WAITING)) //Should not be deleted if IdeaStatus is anything else than waiting.
public void deleteWaitingIdea(SupervisorIdea idea) {
SupervisorIdea reloadedIdea = supervisorIdeaRepo.findOne(idea.getId());
if(!reloadedIdea.getIdeaStatus().equals(IdeaStatus.WAITING)) //Should not be deleted if IdeaStatus is anything else than waiting.
return;
else
supervisorIdeaRepo.delete(idea);
supervisorIdeaRepo.delete(reloadedIdea);
}
@Override
@Transactional ( readOnly = false )
public boolean acceptIdea(IModel<SupervisorIdea> model, User mainAuthor,
public void acceptIdea(SupervisorIdea idea, User mainAuthor,
SortedSet<Student> studentSet) {
if(studentSet.size()> MAX_PARTNERS){
return false; //You may not add more than a specified number of partners.
} else {
SupervisorIdea idea = supervisorIdeaRepo.findOne(model.getObject().getId());
if(idea.getProjectClass().getCode().equals(ProjectClass.BACHELOR) && studentSet.isEmpty()){
return false; //You need to select a partner if the idea is on bachelor level.
}
SupervisorIdea reloadedIdea = supervisorIdeaRepo.findOne(idea.getId());
Student author = studentService.findByUser(mainAuthor);
if(studentSet.contains(author)) {
return false; //You may not select yourself as partner.
}
IdeaParticipation mainParticipation = new IdeaParticipation();
mainParticipation.setStudent(author);
mainParticipation.setSupervisorIdea(idea);
mainParticipation.setConfirmed(true);
author.addIdeaParticipation(mainParticipation);
for(Student s : studentSet) {
s = studentService.findOne(s.getId()); //Needed for lazy loading to work.
IdeaParticipation ip = new IdeaParticipation();
ip.setStudent(s);
ip.setSupervisorIdea(idea);
ip.setSupervisorIdea(reloadedIdea);
ip.setConfirmed(false);
s.addIdeaParticipation(ip);
}
idea.setIdeaStatus(IdeaStatus.TAKEN);
idea.setApplicationPeriod(applicationPeriodService.getCurrentPeriod(new Date(), idea.getProjectClass()));
return true;
}
IdeaParticipation mainParticipation = new IdeaParticipation();
mainParticipation.setStudent(author);
mainParticipation.setSupervisorIdea(reloadedIdea);
mainParticipation.setConfirmed(true);
author.addIdeaParticipation(mainParticipation);
reloadedIdea.setIdeaStatus(IdeaStatus.TAKEN);
reloadedIdea.setApplicationPeriod(applicationPeriodService.getCurrentPeriod(new Date(), reloadedIdea.getProjectClass()));
}
@Override
public Pair<Boolean, String> validateIdeaAcceptance(SupervisorIdea idea,
User mainAuthor, SortedSet<Student> students) {
if(students.size()> MAX_PARTNERS){
logger.error("Accepting user: "+mainAuthor.getEmailAddress()+ " Error: More than "+MAX_PARTNERS+" partner(s) added to project idea.");
return new Pair<Boolean, String>(false, "You may not add more than "+MAX_PARTNERS+" partner to the project idea"); //You may not add more than a specified number of partners.
}
SupervisorIdea reloadedIdea = supervisorIdeaRepo.findOne(idea.getId());
if(reloadedIdea.getProjectClass().getCode().equals(ProjectClass.BACHELOR) && students.isEmpty()){
logger.error("Accepting user: " + mainAuthor.getEmailAddress() + " Error: No partner selected on bachelor level thesis.");
return new Pair<Boolean, String>(false, "You need to select a partner when the idea is on bachelor level"); //You need to select a partner if the idea is on bachelor level.
}
Student author = studentService.findByUser(mainAuthor);
if(students.contains(author)) {
logger.error("Accepting user: " + mainAuthor.getEmailAddress() + " Error: Accepting user selected as his/her own partner.");
return new Pair<Boolean, String>(false, "You may not select yourself as partner"); //You may not select yourself as partner.
}
if(alreadyParticipatingOnIdea(author)) {
logger.error("Accepting user: " + mainAuthor.getEmailAddress() + " Error: Author already attached to a taken project idea.");
return new Pair<Boolean, String>(false, "You may only be part of one taken idea at once"); //You may only be part of one taken idea at once.
}
for(Student s : students) {
if(alreadyParticipatingOnIdea(s)) {
logger.error("Accepting user: " + mainAuthor.getEmailAddress() + " Error: Co-author already attached to a taken project idea.");
return new Pair<Boolean, String>(false, "Your project partner is already part of another project idea");
}
}
return new Pair<Boolean, String>(true, "Validation successful");
}
@Override
public Pair<Boolean, String> validatePartnerAcceptance(User user) {
Student author = studentService.findByUser(user);
if(partnerAlreadyParticipatingOnIdea(author)){
logger.error("Accepting user: " + user.getEmailAddress() + " Error: May not accept to be a partner if already participating in another idea.");
return new Pair<Boolean, String>(false, "You may not accept to be a partner if already participating in another idea");
}
return new Pair<Boolean, String>(true,"Validation passed");
}
@Override
@Transactional (readOnly = false)
public void partnerAcceptIdea(IModel<SupervisorIdea> model, User loggedInUser) {
SupervisorIdea idea = supervisorIdeaRepo.findOne(model.getObject().getId());
public void partnerAcceptIdea(SupervisorIdea idea, User loggedInUser) {
SupervisorIdea reloadedIdea = supervisorIdeaRepo.findOne(idea.getId());
Student author = studentService.findByUser(loggedInUser);
for (IdeaParticipation ip : idea.getIdeaParticipations())
for (IdeaParticipation ip : reloadedIdea.getIdeaParticipations()) {
if(ip.getStudent().equals(author))
ip.setConfirmed(true);
if(idea.getApplicationPeriod()==null) {
idea.setApplicationPeriod(applicationPeriodService.getCurrentPeriod(new Date(), idea.getProjectClass()));
}
if(reloadedIdea.getApplicationPeriod()==null) {
reloadedIdea.setApplicationPeriod(applicationPeriodService.getCurrentPeriod(new Date(), reloadedIdea.getProjectClass()));
}
}
@Override
@Transactional ( readOnly = false )
public void declineIdea(IModel<SupervisorIdea> model) {
SupervisorIdea idea = supervisorIdeaRepo.findOne(model.getObject().getId());
public void declineIdea(SupervisorIdea idea) {
SupervisorIdea reloadedIdea = supervisorIdeaRepo.findOne(idea.getId());
//Remove participations
for (IdeaParticipation ip : idea.getIdeaParticipations()) {
for (IdeaParticipation ip : reloadedIdea.getIdeaParticipations()) {
Student s = ip.getStudent();
s.removeIdeaParticipation(ip);
}
//Erase watson boxes
idea.setWatson(new Watson());
reloadedIdea.setWatson(new Watson());
//Remove application period association
idea.setApplicationPeriod(null);
reloadedIdea.setApplicationPeriod(null);
//Change status back to waiting
idea.setIdeaStatus(IdeaStatus.WAITING);
reloadedIdea.setIdeaStatus(IdeaStatus.WAITING);
}
@Override
@Transactional ( readOnly = false )
public void updateIdea(IModel<SupervisorIdea> model) {
SupervisorIdea idea = supervisorIdeaRepo.findOne(model.getObject().getId());
if(model.getObject().getWatson().getWhat()!=null)
idea.getWatson().setWhat(model.getObject().getWatson().getWhat());
if(model.getObject().getWatson().getWhy()!=null)
idea.getWatson().setWhy(model.getObject().getWatson().getWhy());
if(model.getObject().getWatson().getTheoryHow()!=null)
idea.getWatson().setTheoryHow(model.getObject().getWatson().getTheoryHow());
if(model.getObject().getWatson().getPracticalHow()!=null)
idea.getWatson().setPracticalHow(model.getObject().getWatson().getPracticalHow());
public void updateIdea(SupervisorIdea idea) {
SupervisorIdea reloadedIdea = supervisorIdeaRepo.findOne(idea.getId());
if(idea.getWatson().getWhat()!=null)
reloadedIdea.getWatson().setWhat(idea.getWatson().getWhat());
if(idea.getWatson().getWhy()!=null)
reloadedIdea.getWatson().setWhy(idea.getWatson().getWhy());
if(idea.getWatson().getTheoryHow()!=null)
reloadedIdea.getWatson().setTheoryHow(idea.getWatson().getTheoryHow());
if(idea.getWatson().getPracticalHow()!=null)
reloadedIdea.getWatson().setPracticalHow(idea.getWatson().getPracticalHow());
}
@Override
@ -187,8 +228,8 @@ public class SupervisorIdeaServiceImpl extends AbstractQueryService<SupervisorId
// Only editable if idea status is waiting and the current user is the creator
@Override
public boolean isIdeaEditable(IModel<SupervisorIdea> model, User currentUser) {
return model.getObject().getIdeaStatus().equals(IdeaStatus.WAITING)&&model.getObject().getCreator().getUser().equals(currentUser);
public boolean isIdeaEditable(SupervisorIdea idea, User currentUser) {
return idea.getIdeaStatus().equals(IdeaStatus.WAITING)&&idea.getCreator().getUser().equals(currentUser);
}
@ -228,6 +269,21 @@ public class SupervisorIdeaServiceImpl extends AbstractQueryService<SupervisorId
return ideas;
}
@Override
public Long countByStatus(IdeaStatus status) {
return supervisorIdeaRepo.count(byStatus(status));
}
@Override
public Long countIdeas(IdeaStatus status, Employee supervisor, ProjectClass pc) {
return supervisorIdeaRepo.count(byStatus(status).and(bySupervisor(supervisor)).and(byLevel(pc)));
}
@Override
public Long countByAuthorAndStatus(Student author, IdeaStatus status) {
return supervisorIdeaRepo.countIdeasByAuthorAndStatus(author, status);
}
private Predicate predicateFromParams(FilterParams params) {
return levelFilter(params.getLevels()).and(bySupervisor(params.getSupervisor()));
}
@ -286,14 +342,19 @@ public class SupervisorIdeaServiceImpl extends AbstractQueryService<SupervisorId
return QSupervisorIdea.supervisorIdea.ideaStatus.eq(status);
}
@Override
public Long countByStatus(IdeaStatus status) {
return supervisorIdeaRepo.count(byStatus(status));
private boolean alreadyParticipatingOnIdea(Student author) {
Long ideas = countByAuthorAndStatus(author, IdeaStatus.TAKEN);
if(ideas==0)
return false;
else
return true;
}
@Override
public Long countIdeas(IdeaStatus status, Employee supervisor, ProjectClass pc) {
return supervisorIdeaRepo.count(byStatus(status).and(bySupervisor(supervisor)).and(byLevel(pc)));
private boolean partnerAlreadyParticipatingOnIdea(Student author) {
Long ideas = countByAuthorAndStatus(author, IdeaStatus.TAKEN);
if(ideas==1)
return false;
else
return true;
}
}

@ -5,7 +5,6 @@ import java.util.Collection;
import java.util.List;
import java.util.SortedSet;
import org.apache.wicket.model.IModel;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
@ -15,6 +14,7 @@ import se.su.dsv.scipro.data.dataobjects.Student;
import se.su.dsv.scipro.data.dataobjects.User;
import se.su.dsv.scipro.match.dataobject.Idea.IdeaStatus;
import se.su.dsv.scipro.match.dataobject.SupervisorIdea;
import se.su.dsv.scipro.peer.data.dao.controllers.Pair;
public interface SupervisorIdeaService extends GenericService<SupervisorIdea, Long>, QueryService<SupervisorIdea, Long> {
@ -25,19 +25,23 @@ public interface SupervisorIdeaService extends GenericService<SupervisorIdea, Lo
List<SupervisorIdea> findByStatusAndAuthor(IdeaStatus status, Student author);
List<SupervisorIdea> findIdeas(IdeaStatus status, Student author, boolean confirmed);
Long countByAuthorAndStatus(Student author, IdeaStatus status);
Long countByStatus(IdeaStatus status);
Long countIdeas(IdeaStatus status, Employee supervisor, ProjectClass pc);
void saveSupervisorCreatedIdea(IModel<SupervisorIdea> model, Employee creator, SortedSet<Student> students);
void deleteWaitingIdea(IModel<SupervisorIdea> model);
void partnerAcceptIdea(IModel<SupervisorIdea> model, User loggedInUser);
void declineIdea(IModel<SupervisorIdea> model);
void updateIdea(IModel<SupervisorIdea> model);
void saveSupervisorCreatedIdea(SupervisorIdea idea, Employee creator, SortedSet<Student> students);
void acceptIdea(SupervisorIdea idea, User mainAuthor, SortedSet<Student> sortedSet);
void deleteWaitingIdea(SupervisorIdea idea);
void partnerAcceptIdea(SupervisorIdea idea, User loggedInUser);
void declineIdea(SupervisorIdea idea);
void updateIdea(SupervisorIdea idea);
boolean acceptIdea(IModel<SupervisorIdea> model, User mainAuthor, SortedSet<Student> sortedSet);
boolean hasTakenIdeas(User authorUser, boolean confirmed);
boolean isIdeaEditable(IModel<SupervisorIdea> model, User currentUser);
boolean isIdeaEditable(SupervisorIdea idea, User currentUser);
Pair<Boolean, String> validateIdeaAcceptance(SupervisorIdea idea, User loggedInUser, SortedSet<Student> students);
Pair<Boolean, String> validatePartnerAcceptance(User loggedInUser);
public static class FilterParams implements Serializable {
private static final long serialVersionUID = 4981420721152104292L;
@ -61,4 +65,6 @@ public interface SupervisorIdeaService extends GenericService<SupervisorIdea, Lo
}
}
}

@ -155,7 +155,7 @@ public class SupervisorEditIdeaPanel extends Panel {
target.addComponent(feedbackPanel);
try {
ideaService.saveSupervisorCreatedIdea(model, ideaCreator, studentsPanel.getStudentSet());
ideaService.saveSupervisorCreatedIdea(model.getObject(), ideaCreator, studentsPanel.getStudentSet());
setResponsePage(SupervisorProjectIdeaStartPage.class);
getSession().info("Idea successfully submitted");
} catch (Exception e) {

@ -111,7 +111,7 @@ public class SupervisorProjectIdeaOverviewPanel extends Panel {
@Override
public boolean shouldBeVisible(IModel<SupervisorIdea> ideaModel) {
return ideaService.isIdeaEditable(ideaModel, supervisor);
return ideaService.isIdeaEditable(ideaModel.getObject(), supervisor);
}
};
columns[6] = new ClickableIconColumn<SupervisorIdea>(Model.of("Delete"), null, ImageIcon.ICON_DELETE) {
@ -119,12 +119,12 @@ public class SupervisorProjectIdeaOverviewPanel extends Panel {
@Override
protected void onClick(IModel<SupervisorIdea> ideaModel,
AjaxRequestTarget target) {
ideaService.deleteWaitingIdea(ideaModel);
ideaService.deleteWaitingIdea(ideaModel.getObject());
target.addComponent(getWMC());
}
@Override
public boolean shouldBeVisible(IModel<SupervisorIdea> ideaModel) {
return ideaService.isIdeaEditable(ideaModel, supervisor);
return ideaService.isIdeaEditable(ideaModel.getObject(), supervisor);
}
};

@ -6,12 +6,11 @@ import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;
import junit.framework.Assert;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@ -36,6 +35,7 @@ import se.su.dsv.scipro.match.dataobject.Keyword;
import se.su.dsv.scipro.match.dataobject.KeywordType;
import se.su.dsv.scipro.match.dataobject.SupervisorIdea;
import se.su.dsv.scipro.match.facade.ApplicationPeriodFacade;
import se.su.dsv.scipro.peer.data.dao.controllers.Pair;
import se.su.dsv.scipro.springdata.services.ProjectClassService;
import se.su.dsv.scipro.springdata.services.RoleService;
import se.su.dsv.scipro.springdata.services.SupervisorIdeaService;
@ -64,8 +64,8 @@ public class TestSupervisorIdea {
private KeywordDao keywordDao;
private ProjectClass bachelor, master;
private User authorUser1, authorUser2, supervisorUser, supervisorUser2, unconfirmedUser;
private Student author1, author2, unconfirmedAuthor;
private User authorUser1, authorUser2, authorUser3, supervisorUser, supervisorUser2;
private Student author1, author2, author3;
private Employee supervisor, supervisor2;
private SupervisorIdea waitingBachelorIdea, waitingMasterIdea, takenBachelorIdea, completedMasterIdea, waitingBachelor2, waitingMaster2, waitingBachelor3;
private ApplicationPeriod bachelorPeriod, masterPeriod;
@ -88,13 +88,13 @@ public class TestSupervisorIdea {
supervisorUser2 = newUser();
authorUser1 = newUser();
authorUser2 = newUser();
unconfirmedUser = newUser();
authorUser3 = newUser();
supervisor = newEmployee(supervisorUser);
supervisor2 = newEmployee(supervisorUser2);
author1 = newStudent(authorUser1);
author2 = newStudent(authorUser2);
unconfirmedAuthor = newStudent(unconfirmedUser);
author3 = newStudent(authorUser3);
KeywordType type = new KeywordType("test type");
type = keywordTypeDao.save(type);
@ -189,8 +189,12 @@ public class TestSupervisorIdea {
@Rollback
public void testSaveSupervisorCreatedIdea() {
Assert.assertEquals(new Long(5), ideaService.countByStatus(IdeaStatus.WAITING));
IModel<SupervisorIdea> model = newIdeaModel(bachelor);
ideaService.saveSupervisorCreatedIdea(model, supervisor, new TreeSet<Student>());
SupervisorIdea idea = new SupervisorIdea();
idea.setProjectClass(bachelor);
idea.setTitle("Title");
idea.setDescription("Description");
idea.setRequirements("Reqs");
ideaService.saveSupervisorCreatedIdea(idea, supervisor, new TreeSet<Student>());
Assert.assertEquals(new Long(6), ideaService.countByStatus(IdeaStatus.WAITING));
}
@ -200,14 +204,14 @@ public class TestSupervisorIdea {
@Transactional
@Rollback
public void testIfIdeaIsEditable() {
boolean shouldBeTrue = ideaService.isIdeaEditable(Model.of(waitingBachelorIdea), supervisorUser);
boolean shouldBeTrue = ideaService.isIdeaEditable(waitingBachelorIdea, supervisorUser);
Assert.assertTrue("Not true", shouldBeTrue);
boolean shouldBeFalse = ideaService.isIdeaEditable(Model.of(takenBachelorIdea), supervisorUser);
boolean shouldBeFalse = ideaService.isIdeaEditable(takenBachelorIdea, supervisorUser);
Assert.assertFalse("Not false", shouldBeFalse);
waitingBachelorIdea.setCreator(supervisor2);
boolean shouldAlsoBeFalse = ideaService.isIdeaEditable(Model.of(waitingBachelorIdea), supervisorUser);
boolean shouldAlsoBeFalse = ideaService.isIdeaEditable(waitingBachelorIdea, supervisorUser);
Assert.assertFalse("Not false", shouldAlsoBeFalse);
}
@ -219,12 +223,12 @@ public class TestSupervisorIdea {
List<SupervisorIdea> ideaList = constructList(ideas);
Assert.assertEquals(7, ideaList.size());
ideaService.deleteWaitingIdea(Model.of(takenBachelorIdea)); //Should not be deleted.
ideaService.deleteWaitingIdea(takenBachelorIdea); //Should not be deleted.
ideas = ideaService.findAll();
ideaList = constructList(ideas);
Assert.assertEquals(7, ideaList.size());
ideaService.deleteWaitingIdea(Model.of(waitingBachelorIdea)); //Should be deleted.
ideaService.deleteWaitingIdea(waitingBachelorIdea); //Should be deleted.
ideas = ideaService.findAll();
ideaList = constructList(ideas);
Assert.assertEquals(6, ideaList.size());
@ -319,6 +323,93 @@ public class TestSupervisorIdea {
Assert.assertEquals(Arrays.asList(new SupervisorIdea[]{waitingBachelorIdea, waitingMasterIdea}), ideas);
}
@Test
@Transactional
@Rollback
public void testCountIdeasByAuthorAndStatus() {
Long numberOfWaitingIdeas = ideaService.countByAuthorAndStatus(author1, IdeaStatus.TAKEN);
Assert.assertTrue(numberOfWaitingIdeas==0);
IdeaParticipation participation = new IdeaParticipation();
participation.setStudent(author1);
participation.setSupervisorIdea(takenBachelorIdea);
participation.setConfirmed(true);
author1.addIdeaParticipation(participation);
numberOfWaitingIdeas = ideaService.countByAuthorAndStatus(author1, IdeaStatus.TAKEN);
Assert.assertTrue(numberOfWaitingIdeas==1);
}
@Test
@Transactional
@Rollback
public void testIdeaAcceptance() {
Pair<Boolean, String> acceptance = ideaService.validateIdeaAcceptance(waitingBachelorIdea, authorUser1, new TreeSet<Student>());
Assert.assertFalse("Not false", acceptance.head); //Should not be able to accept a bachelor idea without partner.
SortedSet<Student> partnerSet = new TreeSet<Student>();
partnerSet.add(author2);
partnerSet.add(author3);
acceptance = ideaService.validateIdeaAcceptance(waitingBachelorIdea, authorUser1, partnerSet);
Assert.assertFalse("Not false", acceptance.head); //Should not be able to accept a bachelor idea with more than one partner.
partnerSet.add(author1);
partnerSet.remove(author2);
partnerSet.remove(author3);
acceptance = ideaService.validateIdeaAcceptance(waitingBachelorIdea, authorUser1, partnerSet);
Assert.assertFalse("Not false", acceptance.head); //Should not be able to accept a bachelor idea with himself as partner.
partnerSet.remove(author1);
partnerSet.add(author2);
acceptance = ideaService.validateIdeaAcceptance(waitingBachelorIdea, authorUser1, partnerSet);
Assert.assertTrue("Not true", acceptance.head); //Everything ok, should be able to accept a bachelor with one partner.
if(acceptance.head)
ideaService.acceptIdea(waitingBachelorIdea, authorUser1, partnerSet);
partnerSet.remove(author2);
partnerSet.add(author3);
acceptance = ideaService.validateIdeaAcceptance(waitingBachelor2, authorUser1, partnerSet);
Assert.assertFalse("Not false", acceptance.head); //Should not be able to accept more than one idea.
partnerSet.remove(author3);
partnerSet.add(author2);
acceptance = ideaService.validateIdeaAcceptance(waitingBachelor2, authorUser3, partnerSet);
Assert.assertFalse("Not false", acceptance.head); //Should not be able to accept when the partner have a taken idea.
}
@Test
@Transactional
@Rollback
public void testPartnerAcceptIdea() {
SortedSet<Student> studentSet = new TreeSet<Student>();
studentSet.add(author1);
studentSet.add(author2);
SupervisorIdea idea = new SupervisorIdea();
idea.setProjectClass(bachelor);
idea.setTitle("Title");
idea.setDescription("Description");
idea.setRequirements("Reqs");
ideaService.saveSupervisorCreatedIdea(idea, supervisor, studentSet);
Assert.assertNull(idea.getApplicationPeriod());
for(IdeaParticipation ip : author1.getIdeaParticipations())
Assert.assertFalse(ip.isConfirmed());
for(IdeaParticipation ip : author2.getIdeaParticipations())
Assert.assertFalse(ip.isConfirmed());
ideaService.partnerAcceptIdea(idea, authorUser1);
Assert.assertNotNull(idea.getApplicationPeriod());
}
// HELPER METHODS
private SupervisorIdea newIdea(ProjectClass pc, ApplicationPeriod ap, Employee supervisor, IdeaStatus ideaStatus) {
SupervisorIdea idea = new SupervisorIdea();
@ -332,15 +423,6 @@ public class TestSupervisorIdea {
return ideaService.save(idea);
}
private IModel<SupervisorIdea> newIdeaModel(ProjectClass pc) {
IModel<SupervisorIdea> model = new Model<SupervisorIdea>(new SupervisorIdea());
model.getObject().setDescription("Model description");
model.getObject().setRequirements("Model reqs");
model.getObject().setTitle("Model title");
model.getObject().setProjectClass(pc);
model.getObject().setKeywords(newKeywordSet());
return model;
}
private Set<Keyword> newKeywordSet() {
Set<Keyword> set = new HashSet<Keyword>();