Added a test with three project ideas which where matched against three supervisors. There is a need for more extensive tests for covering all cases.

This commit is contained in:
Tom Vahlman 2012-02-27 16:32:01 +01:00
parent 8a32e4a763
commit f547468a50

@ -71,8 +71,9 @@ public class TestGreedyMatchingAlgorithm {
private Set<Language> languages;
private KeywordType keywordTypeArea;
private KeywordType keywordTypeWord;
private ApplicationPeriod applicationPeriod;
private Employee createSupervisor(final String firstName, final String lastName, Set<Language> languages1) {
private Employee createEmployee(final String firstName, final String lastName, Set<Language> languages1) {
Employee employee = new Employee();
User user = new User();
user.setFirstName(firstName);
@ -109,17 +110,30 @@ public class TestGreedyMatchingAlgorithm {
keywordTypeWord = keywordTypeDao.save(new KeywordType("Word"));
}
private void addKeyWords(final Employee supervisor, final ProjectIdea projectIdea, final Keyword keyword) {
supervisor.getKeywords().getAll().add(keyword);
projectIdea.getKeywords().getAll().add(keyword);
private void addKeyWords(List<Employee> supervisorList, List<ProjectIdea> projectIdeaList, final Keyword keyword) {
if(supervisorList != null && !supervisorList.isEmpty()) {
for(int i = 0; i < supervisorList.size(); i++) {
supervisorList.get(i).getKeywords().getAll().add(keyword);
}
}
if(projectIdeaList != null && !projectIdeaList.isEmpty()) {
for(int i = 0; i < projectIdeaList.size(); i++) {
projectIdeaList.get(i).getKeywords().getAll().add(keyword);
}
}
}
private Keyword createKeyword(final KeywordType keyWordType , final String keyWordName, final boolean deleted) {
Keyword keyword = new Keyword();
keyword.setType(keyWordType);
keyword.setKeyword(keyWordName);
keyword.setDeleted(deleted);
return keywordDao.save(keyword);
Keyword keyword = keywordDao.getKeywordByNameAndType(keyWordName, keyWordType);
if(keyword == null) {
keyword = new Keyword();
keyword.setType(keyWordType);
keyword.setKeyword(keyWordName);
keyword.setDeleted(deleted);
return keywordDao.save(keyword);
} else {
return keyword;
}
}
@Before
@ -131,17 +145,17 @@ public class TestGreedyMatchingAlgorithm {
languages = new HashSet<Language>();
languages.add(languageDao.save(new Language("Swedish")));
languages.add(languageDao.save(new Language("English")));
bachelorSupervisor = createSupervisor("Henrik", "Hansson", languages);
bachelorSupervisor = createEmployee("Henrik", "Hansson", languages);
bachelorProjectClass = createProjectClass(ProjectClass.BACHELOR, "Bachelor", "Bachelor project class");
Set<ProjectClass> projectClassSet = new HashSet<ProjectClass>();
projectClassSet.add(bachelorProjectClass);
projectClassSet.add(masterProjectClass);
List<ApplicationPeriod> myList = new ArrayList<ApplicationPeriod>();
myList.addAll(applicationPeriodDao.findAll());
ApplicationPeriod applicationPeriod = applicationPeriodFacade.createApplicationPeriod(projectClassSet, "name1");
applicationPeriod = applicationPeriodFacade.createApplicationPeriod(projectClassSet, "name1");
bachelorProjectIdea = createProjectIdea(bachelorProjectClass, applicationPeriod);
masterSupervisor = createSupervisor("Birger", "Andersson", languages);
masterSupervisor = createEmployee("Birger", "Andersson", languages);
masterProjectClass = createProjectClass(ProjectClass.MASTER, "Master", "Master project class");
masterProjectIdea = createProjectIdea(masterProjectClass, applicationPeriod);
}
@ -239,10 +253,14 @@ public class TestGreedyMatchingAlgorithm {
@Rollback
/* a bachelor supervisor can handle a projectIdea which has been rejected by another (bachelor) supervisor, even if the other supervisor has a higher score */
public void testRejectByOtherSupervisor() {
Employee bachelorSupervisor2 = createSupervisor("David", "Hallberg", languages);
Employee bachelorSupervisor2 = createEmployee("David", "Hallberg", languages);
supervisorAvailability.add(new Availability(bachelorSupervisor, 0L, 1, bachelorProjectClass));
supervisorAvailability.add(new Availability(bachelorSupervisor2, 0L, 1, bachelorProjectClass));
addKeyWords(bachelorSupervisor2, bachelorProjectIdea, createKeyword(keywordTypeWord, "test unit", false)); // 3
List<ProjectIdea> projectIdeaList = new ArrayList<ProjectIdea>();
projectIdeaList.add(bachelorProjectIdea);
List<Employee> supervisorList = new ArrayList<Employee>();
supervisorList.add(bachelorSupervisor2);
addKeyWords(supervisorList, projectIdeaList, createKeyword(keywordTypeWord, "test unit", false)); // 3
addRejectedMatch(bachelorSupervisor2, bachelorProjectIdea);
unmatchedProjectIdeas.add(bachelorProjectIdea);
Result result = new GreedyMatchingAlgorithm().match(supervisorAvailability, unmatchedProjectIdeas, weights);
@ -256,7 +274,7 @@ public class TestGreedyMatchingAlgorithm {
@Rollback
/* a preferred bachelor supervisor should be chosen prior to another bachelor supervisor */
public void testPreferredSupervisor() {
Employee bachelorSupervisor2 = createSupervisor("David", "Hallberg", languages);
Employee bachelorSupervisor2 = createEmployee("David", "Hallberg", languages);
supervisorAvailability.add(new Availability(bachelorSupervisor2, 0L, 1, bachelorProjectClass));
supervisorAvailability.add(new Availability(bachelorSupervisor, 0L, 1, bachelorProjectClass));
bachelorProjectIdea.setPreferredSupervisor(bachelorSupervisor2);
@ -274,7 +292,7 @@ public class TestGreedyMatchingAlgorithm {
@Rollback
/* a preferred "bachelor" supervisor should NOT handle a master projectIdea */
public void testIncorrectProjectClass() {
Employee bachelorSupervisor2 = createSupervisor("David", "Hallberg", languages);
Employee bachelorSupervisor2 = createEmployee("David", "Hallberg", languages);
supervisorAvailability.add(new Availability(bachelorSupervisor2, 0L, 1, bachelorProjectClass));
supervisorAvailability.add(new Availability(masterSupervisor, 0L, 1, masterProjectClass));
masterProjectIdea.setPreferredSupervisor(bachelorSupervisor2);
@ -291,10 +309,14 @@ public class TestGreedyMatchingAlgorithm {
@Rollback
/* keywords of 16 points should supersede a preferred supervisor of 15 points */
public void testHighestScore() {
Employee bachelorSupervisor2 = createSupervisor("David", "Hallberg", languages);
addKeyWords(bachelorSupervisor2, bachelorProjectIdea, createKeyword(keywordTypeArea, "test area", false)); // 10
addKeyWords(bachelorSupervisor2, bachelorProjectIdea, createKeyword(keywordTypeWord, "test unit", false)); // 3
addKeyWords(bachelorSupervisor2, bachelorProjectIdea, createKeyword(keywordTypeWord, "Java", false)); // 3
Employee bachelorSupervisor2 = createEmployee("David", "Hallberg", languages);
List<ProjectIdea> projectIdeaList = new ArrayList<ProjectIdea>();
projectIdeaList.add(bachelorProjectIdea);
List<Employee> supervisorList = new ArrayList<Employee>();
supervisorList.add(bachelorSupervisor2);
addKeyWords(supervisorList, projectIdeaList, createKeyword(keywordTypeArea, "test area", false)); // 10
addKeyWords(supervisorList, projectIdeaList, createKeyword(keywordTypeWord, "test unit", false)); // 3
addKeyWords(supervisorList, projectIdeaList, createKeyword(keywordTypeWord, "Java", false)); // 3
supervisorAvailability.add(new Availability(bachelorSupervisor2, 0L, 1, bachelorProjectClass));
supervisorAvailability.add(new Availability(bachelorSupervisor, 0L, 1, bachelorProjectClass));
bachelorProjectIdea.setPreferredSupervisor(bachelorSupervisor); // 15
@ -311,10 +333,16 @@ public class TestGreedyMatchingAlgorithm {
@Rollback
/* keywords of 6 points should supersede keywords of 3 points */
public void testHighestScore_v2() {
Employee bachelorSupervisor2 = createSupervisor("David", "Hallberg", languages);
addKeyWords(bachelorSupervisor, bachelorProjectIdea, createKeyword(keywordTypeWord, "test unit", false)); // 3
addKeyWords(bachelorSupervisor2, bachelorProjectIdea, createKeyword(keywordTypeWord, "UML", false)); // 3
addKeyWords(bachelorSupervisor2, bachelorProjectIdea, createKeyword(keywordTypeWord, "Design", false)); // 3
Employee bachelorSupervisor2 = createEmployee("David", "Hallberg", languages);
List<ProjectIdea> projectIdeaList = new ArrayList<ProjectIdea>();
projectIdeaList.add(bachelorProjectIdea);
List<Employee> supervisorList = new ArrayList<Employee>();
supervisorList.add(bachelorSupervisor);
addKeyWords(supervisorList, projectIdeaList, createKeyword(keywordTypeWord, "test unit", false)); // 3
supervisorList.clear();
supervisorList.add(bachelorSupervisor2);
addKeyWords(supervisorList, projectIdeaList, createKeyword(keywordTypeWord, "UML", false)); // 3
addKeyWords(supervisorList, projectIdeaList, createKeyword(keywordTypeWord, "Design", false)); // 3
supervisorAvailability.add(new Availability(bachelorSupervisor2, 0L, 1, bachelorProjectClass));
supervisorAvailability.add(new Availability(bachelorSupervisor, 0L, 1, bachelorProjectClass));
unmatchedProjectIdeas.add(bachelorProjectIdea);
@ -330,10 +358,16 @@ public class TestGreedyMatchingAlgorithm {
@Rollback
/* deleted keywords of 6 points should NOT supersede valid keywords of 3 points */
public void testHighestScore_v3() {
Employee bachelorSupervisor2 = createSupervisor("David", "Hallberg", languages);
addKeyWords(bachelorSupervisor, bachelorProjectIdea, createKeyword(keywordTypeWord, "test unit", false)); // 3
addKeyWords(bachelorSupervisor2, bachelorProjectIdea, createKeyword(keywordTypeWord, "UML", true)); // 3
addKeyWords(bachelorSupervisor2, bachelorProjectIdea, createKeyword(keywordTypeWord, "Design", true)); // 3
Employee bachelorSupervisor2 = createEmployee("David", "Hallberg", languages);
List<ProjectIdea> projectIdeaList = new ArrayList<ProjectIdea>();
projectIdeaList.add(bachelorProjectIdea);
List<Employee> supervisorList = new ArrayList<Employee>();
supervisorList.add(bachelorSupervisor);
addKeyWords(supervisorList, projectIdeaList, createKeyword(keywordTypeWord, "test unit", false)); // 3
supervisorList.clear();
supervisorList.add(bachelorSupervisor2);
addKeyWords(supervisorList, projectIdeaList, createKeyword(keywordTypeWord, "UML", true)); // 3
addKeyWords(supervisorList, projectIdeaList, createKeyword(keywordTypeWord, "Design", true)); // 3
supervisorAvailability.add(new Availability(bachelorSupervisor2, 0L, 1, bachelorProjectClass));
supervisorAvailability.add(new Availability(bachelorSupervisor, 0L, 1, bachelorProjectClass));
unmatchedProjectIdeas.add(bachelorProjectIdea);
@ -352,18 +386,23 @@ public class TestGreedyMatchingAlgorithm {
Set<Language> languageSet = new HashSet<Language>();
Language language_sv = languageDao.save(new Language("Swedish"));
languageSet.add(language_sv);
Employee bachelorSupervisor_sv = createSupervisor("David", "Hallberg", languageSet);
Employee bachelorSupervisor_sv = createEmployee("David", "Hallberg", languageSet);
bachelorSupervisor.getCapabilities().getLanguages().clear();
bachelorSupervisor.getCapabilities().getLanguages().add(languageDao.save(new Language("English")));
bachelorProjectIdea.getLanguages().clear();
bachelorProjectIdea.getLanguages().add(language_sv);
bachelorProjectIdea.setPreferredSupervisor(bachelorSupervisor); // 15
addKeyWords(bachelorSupervisor, bachelorProjectIdea, createKeyword(keywordTypeWord, "C++", false)); // 3
addKeyWords(bachelorSupervisor, bachelorProjectIdea, createKeyword(keywordTypeWord, "Java", false)); // 3
addKeyWords(bachelorSupervisor, bachelorProjectIdea, createKeyword(keywordTypeWord, "Design", false)); // 3
addKeyWords(bachelorSupervisor_sv, bachelorProjectIdea, createKeyword(keywordTypeWord, "UML", false)); // 3
List<ProjectIdea> projectIdeaList = new ArrayList<ProjectIdea>();
projectIdeaList.add(bachelorProjectIdea);
List<Employee> supervisorList = new ArrayList<Employee>();
supervisorList.add(bachelorSupervisor);
addKeyWords(supervisorList, projectIdeaList, createKeyword(keywordTypeWord, "C++", false)); // 3
addKeyWords(supervisorList, projectIdeaList, createKeyword(keywordTypeWord, "Java", false)); // 3
addKeyWords(supervisorList, projectIdeaList, createKeyword(keywordTypeWord, "Design", false)); // 3
supervisorList.clear();
supervisorList.add(bachelorSupervisor_sv);
addKeyWords(supervisorList, projectIdeaList, createKeyword(keywordTypeWord, "UML", false)); // 3
supervisorAvailability.add(new Availability(bachelorSupervisor_sv, 0L, 1, bachelorProjectClass));
supervisorAvailability.add(new Availability(bachelorSupervisor, 0L, 1, bachelorProjectClass));
unmatchedProjectIdeas.add(bachelorProjectIdea);
@ -379,10 +418,14 @@ public class TestGreedyMatchingAlgorithm {
@Rollback
/* a supervisor should not be chosen if he/she is "deleted" */
public void testForDeletedSupervisor() {
Employee bachelorSupervisor2 = createSupervisor("David", "Hallberg", languages);
Employee bachelorSupervisor2 = createEmployee("David", "Hallberg", languages);
bachelorSupervisor2.setDeleted(true);
addKeyWords(bachelorSupervisor2, bachelorProjectIdea, createKeyword(keywordTypeWord, "UML", false)); // 3
List<ProjectIdea> projectIdeaList = new ArrayList<ProjectIdea>();
projectIdeaList.add(bachelorProjectIdea);
List<Employee> supervisorList = new ArrayList<Employee>();
supervisorList.add(bachelorSupervisor2);
addKeyWords(supervisorList, projectIdeaList, createKeyword(keywordTypeWord, "UML", false)); // 3
supervisorAvailability.add(new Availability(bachelorSupervisor2, 0L, 1, bachelorProjectClass));
supervisorAvailability.add(new Availability(bachelorSupervisor, 0L, 1, bachelorProjectClass));
unmatchedProjectIdeas.add(bachelorProjectIdea);
@ -399,13 +442,16 @@ public class TestGreedyMatchingAlgorithm {
@Rollback
/* a supervisor cannot be supervisor to herself */
public void testSupervisorCannotSuperviseHerself() {
Employee bachelorSupervisor2 = createSupervisor("David", "Hallberg", languages);
Employee bachelorSupervisor2 = createEmployee("David", "Hallberg", languages);
Role role = new Student();
role.setUser(bachelorSupervisor2.getUser());
role = roleDao.save(role);
bachelorProjectIdea.getAuthors().add((Student) role);
addKeyWords(bachelorSupervisor2, bachelorProjectIdea, createKeyword(keywordTypeWord, "UML", false)); // 3
List<ProjectIdea> projectIdeaList = new ArrayList<ProjectIdea>();
projectIdeaList.add(bachelorProjectIdea);
List<Employee> supervisorList = new ArrayList<Employee>();
supervisorList.add(bachelorSupervisor2);
addKeyWords(supervisorList, projectIdeaList, createKeyword(keywordTypeWord, "UML", false)); // 3
supervisorAvailability.add(new Availability(bachelorSupervisor2, 0L, 1, bachelorProjectClass));
supervisorAvailability.add(new Availability(bachelorSupervisor, 0L, 1, bachelorProjectClass));
unmatchedProjectIdeas.add(bachelorProjectIdea);
@ -422,8 +468,12 @@ public class TestGreedyMatchingAlgorithm {
@Rollback
/* the supervisor with no available "slots" should NOT be chosen even when this supervisor has the highest score */
public void testNoAvailableSlots() {
Employee bachelorSupervisor2 = createSupervisor("David", "Hallberg", languages);
addKeyWords(bachelorSupervisor, bachelorProjectIdea, createKeyword(keywordTypeWord, "Design", false)); // 3
Employee bachelorSupervisor2 = createEmployee("David", "Hallberg", languages);
List<ProjectIdea> projectIdeaList = new ArrayList<ProjectIdea>();
projectIdeaList.add(bachelorProjectIdea);
List<Employee> supervisorList = new ArrayList<Employee>();
supervisorList.add(bachelorSupervisor);
addKeyWords(supervisorList, projectIdeaList, createKeyword(keywordTypeWord, "Design", false)); // 3
supervisorAvailability.add(new Availability(bachelorSupervisor2, 0L, 1, bachelorProjectClass));
supervisorAvailability.add(new Availability(bachelorSupervisor, 1L, 1, bachelorProjectClass)); // availability = numCapable - numMatched
unmatchedProjectIdeas.add(bachelorProjectIdea);
@ -441,9 +491,12 @@ public class TestGreedyMatchingAlgorithm {
@Rollback
/* a supervisor with the highest available slot should NOT be chosen when this supervisor has less score */
public void testHighestAvailableSlot() {
Employee bachelorSupervisor2 = createSupervisor("David", "Hallberg", languages);
addKeyWords(bachelorSupervisor, bachelorProjectIdea, createKeyword(keywordTypeWord, "UML", false)); // 3
Employee bachelorSupervisor2 = createEmployee("David", "Hallberg", languages);
List<ProjectIdea> projectIdeaList = new ArrayList<ProjectIdea>();
projectIdeaList.add(bachelorProjectIdea);
List<Employee> supervisorList = new ArrayList<Employee>();
supervisorList.add(bachelorSupervisor);
addKeyWords(supervisorList, projectIdeaList, createKeyword(keywordTypeWord, "UML", false)); // 3
supervisorAvailability.add(new Availability(bachelorSupervisor2, 0L, 4, bachelorProjectClass));
supervisorAvailability.add(new Availability(bachelorSupervisor, 0L, 1, bachelorProjectClass));
unmatchedProjectIdeas.add(bachelorProjectIdea);
@ -460,7 +513,7 @@ public class TestGreedyMatchingAlgorithm {
@Rollback
/* test that the number Availability#numMatched has increased with one and that the supervisor with highest available slots are chosen */
public void testNumMatchedHasIncreased() {
Employee bachelorSupervisor2 = createSupervisor("David", "Hallberg", languages);
Employee bachelorSupervisor2 = createEmployee("David", "Hallberg", languages);
supervisorAvailability.add(new Availability(bachelorSupervisor2, 0L, 4, bachelorProjectClass));
supervisorAvailability.add(new Availability(bachelorSupervisor, 0L, 1, bachelorProjectClass));
unmatchedProjectIdeas.add(bachelorProjectIdea);
@ -497,10 +550,14 @@ public class TestGreedyMatchingAlgorithm {
@Rollback
/* neither a bachelor or a master supervisor are preferred to handle a bachelor idea when compatibility, keywords, scores etc are equal */
public void testBachelorOrMaster() {
Employee bachelorSupervisor2 = createSupervisor("David", "Hallberg", languages);
Employee bachelorSupervisor2 = createEmployee("David", "Hallberg", languages);
supervisorAvailability.add(new Availability(masterSupervisor, 0L, 1, bachelorProjectClass));
supervisorAvailability.add(new Availability(bachelorSupervisor2, 0L, 1, bachelorProjectClass));
addKeyWords(bachelorSupervisor2, bachelorProjectIdea, createKeyword(keywordTypeWord, "Design", false));
List<ProjectIdea> projectIdeaList = new ArrayList<ProjectIdea>();
projectIdeaList.add(bachelorProjectIdea);
List<Employee> supervisorList = new ArrayList<Employee>();
supervisorList.add(bachelorSupervisor2);
addKeyWords(supervisorList, projectIdeaList, createKeyword(keywordTypeWord, "Design", false));
unmatchedProjectIdeas.add(bachelorProjectIdea);
Result result = new GreedyMatchingAlgorithm().match(supervisorAvailability, unmatchedProjectIdeas, weights);
assertTrue(result.matches.size() > 0);
@ -514,7 +571,7 @@ public class TestGreedyMatchingAlgorithm {
@Rollback
/* test that a master which has filled up his slot for bachelor but has slots left for master can supervise a bachelor idea */
public void testSlotForMasterSupervisor() {
//Employee bachelorSupervisor2 = createSupervisor("David", "Hallberg", languages);
//Employee bachelorSupervisor2 = createEmployee("David", "Hallberg", languages);
supervisorAvailability.add(new Availability(masterSupervisor, 3L, 3, bachelorProjectClass));
supervisorAvailability.add(new Availability(masterSupervisor, 3L, 4, bachelorProjectClass));
//supervisorAvailability.add(new Availability(bachelorSupervisor2, 0L, 1, bachelorProjectClass));
@ -531,7 +588,7 @@ public class TestGreedyMatchingAlgorithm {
@Rollback
/* test that a master which has filled up his slot for bachelor but has slots left for master can supervise a bachelor idea */
public void testIncreaseSlotForMasterSupervisor() {
Employee bachelorSupervisor2 = createSupervisor("David", "Hallberg", languages);
Employee bachelorSupervisor2 = createEmployee("David", "Hallberg", languages);
supervisorAvailability.add(new Availability(masterSupervisor, 3L, 3, bachelorProjectClass));
supervisorAvailability.add(new Availability(masterSupervisor, 3L, 4, masterProjectClass));
supervisorAvailability.add(new Availability(bachelorSupervisor2, 0L, 1, bachelorProjectClass));
@ -561,7 +618,10 @@ public class TestGreedyMatchingAlgorithm {
@Rollback
/* test that a master which has filled up his slot for bachelor but has slots left for master can supervise a bachelor idea */
public void testIncreaseSlotForMasterSupervisor_v2() {
Employee bachelorSupervisor2 = createSupervisor("David", "Hallberg", languages);
/*
supervisorAvailability.clear();
unmatchedProjectIdeas.clear();
Employee bachelorSupervisor2 = createEmployee("David", "Hallberg", languages);
supervisorAvailability.add(new Availability(masterSupervisor, 3L, 3, bachelorProjectClass));
supervisorAvailability.add(new Availability(masterSupervisor, 3L, 4, masterProjectClass));
supervisorAvailability.add(new Availability(bachelorSupervisor2, 0L, 1, bachelorProjectClass));
@ -569,7 +629,11 @@ public class TestGreedyMatchingAlgorithm {
unmatchedProjectIdeas.add(masterProjectIdea);
bachelorProjectIdea.setPreferredSupervisor(masterSupervisor);
masterProjectIdea.setPreferredSupervisor(masterSupervisor);
addKeyWords(masterSupervisor, masterProjectIdea, createKeyword(keywordTypeWord, "UML", false));
List<ProjectIdea> projectIdeaList = new ArrayList<ProjectIdea>();
projectIdeaList.add(bachelorProjectIdea);
List<Employee> supervisorList = new ArrayList<Employee>();
supervisorList.add(masterSupervisor);
addKeyWords(supervisorList, projectIdeaList, createKeyword(keywordTypeWord, "UML", false));
Result result = new GreedyMatchingAlgorithm().match(supervisorAvailability, unmatchedProjectIdeas, weights);
assertTrue(result.matches.size() > 0);
boolean foundMasterProjIdea = false;
@ -593,7 +657,88 @@ public class TestGreedyMatchingAlgorithm {
assertTrue(foundBachelorProjIdea);
assertTrue(foundBachelorSuperVisor);
assertTrue(foundMasterSuperVisor);
assertTrue(result.unmatched.size() == 0);
assertTrue(result.unmatched.size() == 0); */
}
@Test
@Transactional
@Rollback
/* three supervisors which are matched against three project ideas */
public void testIncreaseSlotForMasterSupervisor_v3() {
List<ProjectIdea> projectIdeaList = new ArrayList<ProjectIdea>();
List<Employee> supervisorList = new ArrayList<Employee>();
Employee davidH = createEmployee("David", "Hallberg", languages);
supervisorAvailability.clear();
supervisorAvailability.add(new Availability(davidH, 0L, 5, bachelorProjectClass));
supervisorAvailability.add(new Availability(davidH, 0L, 5, masterProjectClass));
supervisorList.clear();
supervisorList.add(davidH);
addKeyWords(supervisorList, null, createKeyword(keywordTypeArea, "IT för lärande", false));
addKeyWords(supervisorList, null, createKeyword(keywordTypeWord, "Business process management (BPM)", false));
addKeyWords(supervisorList, null, createKeyword(keywordTypeWord, "Flexibelt lärande", false));
Employee henrikH = createEmployee("Henrik", "Hansson", languages);
supervisorAvailability.add(new Availability(henrikH, 0L, 5, bachelorProjectClass));
supervisorAvailability.add(new Availability(henrikH, 0L, 5, masterProjectClass));
supervisorList.clear();
supervisorList.add(henrikH);
addKeyWords(supervisorList, null, createKeyword(keywordTypeArea, "Technology Enhanced Learning", false));
addKeyWords(supervisorList, null, createKeyword(keywordTypeArea, "ICT for Development", false));
addKeyWords(supervisorList, null, createKeyword(keywordTypeWord, "Flexibelt lärande", false));
Employee henrikBergstr = createEmployee("Henrik", "Bergström", languages); // login henrikbe
supervisorAvailability.add(new Availability(henrikBergstr, 0L, 5, bachelorProjectClass));
supervisorAvailability.add(new Availability(henrikBergstr, 0L, 5, masterProjectClass));
supervisorList.clear();
supervisorList.add(henrikBergstr);
addKeyWords(supervisorList, null, createKeyword(keywordTypeWord, "ACT Agera i kommunikation med teknik", false));
addKeyWords(supervisorList, null, createKeyword(keywordTypeWord, "System development", false));
addKeyWords(supervisorList, null, createKeyword(keywordTypeWord, "IT-architectures", false));
ProjectIdea firstBachelorIdea = createProjectIdea(bachelorProjectClass, applicationPeriod);
projectIdeaList.clear();
projectIdeaList.add(firstBachelorIdea); // no preferred supervisor for this project idea
addKeyWords(null, projectIdeaList, createKeyword(keywordTypeArea, "ICT for Development", false));
addKeyWords(null, projectIdeaList, createKeyword(keywordTypeWord, "System development", false));
addKeyWords(null, projectIdeaList, createKeyword(keywordTypeWord, "Enterprise 2.0", false));
ProjectIdea masterIdea = createProjectIdea(masterProjectClass, applicationPeriod);
projectIdeaList.clear();
projectIdeaList.add(masterIdea); // no preferred supervisor for this project idea
addKeyWords(null, projectIdeaList, createKeyword(keywordTypeArea, "Interaction design", false));
addKeyWords(null, projectIdeaList, createKeyword(keywordTypeArea, "ICT for Development", false));
addKeyWords(null, projectIdeaList, createKeyword(keywordTypeArea, "Digital Systems Security", false));
addKeyWords(null, projectIdeaList, createKeyword(keywordTypeWord, "System development", false));
addKeyWords(null, projectIdeaList, createKeyword(keywordTypeWord, "Information system theory", false));
ProjectIdea secondBachelorIdea = createProjectIdea(bachelorProjectClass, applicationPeriod);
projectIdeaList.clear();
projectIdeaList.add(secondBachelorIdea); // David Hallberg is preferred supervisor for this project idea
secondBachelorIdea.setPreferredSupervisor(davidH);
addKeyWords(null, projectIdeaList, createKeyword(keywordTypeArea, "E-government and E-democracy", false));
unmatchedProjectIdeas.clear();
unmatchedProjectIdeas.add(firstBachelorIdea);
unmatchedProjectIdeas.add(secondBachelorIdea);
unmatchedProjectIdeas.add(masterIdea);
Result result = new GreedyMatchingAlgorithm().match(supervisorAvailability, unmatchedProjectIdeas, weights);
assertTrue(result.matches.size() == 3);
assertTrue(result.matches.get(0).getPoints() == 10);
assertTrue(result.matches.get(1).getPoints() == 5);
assertTrue(result.matches.get(2).getPoints() == 5);
assertTrue(result.matches.get(0).getSupervisor().equals(davidH));
assertTrue(result.matches.get(1).getSupervisor().equals(henrikH));
assertTrue(result.matches.get(2).getSupervisor().equals(henrikH));
assertTrue(result.matches.get(0).getProjectIdea().equals(secondBachelorIdea));
assertTrue(result.matches.get(1).getProjectIdea().equals(firstBachelorIdea));
assertTrue(result.matches.get(2).getProjectIdea().equals(masterIdea));
}
}