diff --git a/src/test/java/se/su/dsv/scipro/match/TestGreedyMatchingAlgorithm.java b/src/test/java/se/su/dsv/scipro/match/TestGreedyMatchingAlgorithm.java index d76d881c70..1ff2d347d3 100644 --- a/src/test/java/se/su/dsv/scipro/match/TestGreedyMatchingAlgorithm.java +++ b/src/test/java/se/su/dsv/scipro/match/TestGreedyMatchingAlgorithm.java @@ -166,40 +166,6 @@ public class TestGreedyMatchingAlgorithm { masterProjectIdea.getKeywords().getAll().clear(); } - @Test - @Transactional - @Rollback - /* a master supervisor can handle master project ideas */ - public void testMasterSupervisor() { - runFirstTest(masterSupervisor, masterProjectClass, masterProjectIdea); - } - - @Test - @Transactional - @Rollback - /* a bachelor supervisor can handle bachelor project Ideas */ - public void testBachelorSupervisor() { - runFirstTest(bachelorSupervisor, bachelorProjectClass, bachelorProjectIdea); - } - - @Test - @Transactional - @Rollback - /* a masterSupervisor can handle bachelorProjectIdeas */ - public void testMasterSupervisor_v2() { - runFirstTest(masterSupervisor, masterProjectClass, bachelorProjectIdea); - } - - private void runFirstTest(final Employee supervisor, final ProjectClass projectClass, final ProjectIdea projectIdea) { - supervisorAvailability.add(new Availability(supervisor, 0L, 1, projectClass)); - unmatchedProjectIdeas.add(projectIdea); - Result result = new GreedyMatchingAlgorithm().match(supervisorAvailability, unmatchedProjectIdeas, weights); - assertFalse(result.matches.size() == 0); - assertTrue(result.matches.get(0).getProjectIdea().equals(projectIdea)); - assertTrue(result.matches.get(0).getSupervisor().equals(supervisor)); - assertTrue(result.unmatched.size() == 0); - } - @Test @Transactional @@ -218,7 +184,7 @@ public class TestGreedyMatchingAlgorithm { @Rollback /* a bachelor supervisor should NOT be able to handle a rejected (bachelor) projectIdea */ public void testRejectedProjectIdea() { - runSecondTest(bachelorSupervisor, bachelorProjectClass, bachelorProjectIdea); + testRejectedMatch(bachelorSupervisor, bachelorProjectClass, bachelorProjectIdea); } @Test @@ -226,10 +192,10 @@ public class TestGreedyMatchingAlgorithm { @Rollback /* a master supervisor should NOT be able to handle a rejected (bachelor) projectIdea */ public void testRejectedProjectIdea_v2() { - runSecondTest(masterSupervisor, masterProjectClass, bachelorProjectIdea); + testRejectedMatch(masterSupervisor, masterProjectClass, bachelorProjectIdea); } - private void runSecondTest(final Employee supervisor, final ProjectClass projectClass, final ProjectIdea projectIdea) { + private void testRejectedMatch(final Employee supervisor, final ProjectClass projectClass, final ProjectIdea projectIdea) { addRejectedMatch(supervisor, projectIdea); // adds a rejected match to the projectIdea supervisorAvailability.add(new Availability(supervisor, 0L, 1, projectClass)); unmatchedProjectIdeas.add(projectIdea); @@ -238,6 +204,8 @@ public class TestGreedyMatchingAlgorithm { assertTrue(result.unmatched.size() == 1); } + + // helper that is used by testRejectedMatch private void addRejectedMatch(final Employee supervisor, final ProjectIdea projectIdea) { Match rejectedMatch = new Match(); rejectedMatch.setStatus(Match.Status.REJECTED); @@ -252,7 +220,7 @@ public class TestGreedyMatchingAlgorithm { @Transactional @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() { + public void testShouldSuperviseIdeaRejectedByAnotherSupervisor() { Employee bachelorSupervisor2 = createEmployee("David", "Hallberg", languages); supervisorAvailability.add(new Availability(bachelorSupervisor, 0L, 1, bachelorProjectClass)); supervisorAvailability.add(new Availability(bachelorSupervisor2, 0L, 1, bachelorProjectClass)); @@ -287,28 +255,11 @@ public class TestGreedyMatchingAlgorithm { } - @Test - @Transactional - @Rollback - /* a preferred "bachelor" supervisor should NOT handle a master projectIdea */ - public void testIncorrectProjectClass() { - 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); - unmatchedProjectIdeas.add(masterProjectIdea); - Result result = new GreedyMatchingAlgorithm().match(supervisorAvailability, unmatchedProjectIdeas, weights); - assertTrue(result.matches.size() > 0); - assertTrue(result.matches.get(0).getProjectIdea().equals(masterProjectIdea)); - assertTrue(result.matches.get(0).getSupervisor().equals(masterSupervisor)); - assertTrue(result.unmatched.size() == 0); - } - @Test @Transactional @Rollback /* keywords of 16 points should supersede a preferred supervisor of 15 points */ - public void testHighestScore() { + public void testValidKeyWords() { Employee bachelorSupervisor2 = createEmployee("David", "Hallberg", languages); List<ProjectIdea> projectIdeaList = new ArrayList<ProjectIdea>(); projectIdeaList.add(bachelorProjectIdea); @@ -328,36 +279,11 @@ public class TestGreedyMatchingAlgorithm { assertTrue(result.unmatched.size() == 0); } - @Test - @Transactional - @Rollback - /* keywords of 6 points should supersede keywords of 3 points */ - public void testHighestScore_v2() { - 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); - Result result = new GreedyMatchingAlgorithm().match(supervisorAvailability, unmatchedProjectIdeas, weights); - assertTrue(result.matches.size() > 0); - assertTrue(result.matches.get(0).getProjectIdea().equals(bachelorProjectIdea)); - assertTrue(result.matches.get(0).getSupervisor().equals(bachelorSupervisor2)); - assertTrue(result.unmatched.size() == 0); - } - @Test @Transactional @Rollback /* deleted keywords of 6 points should NOT supersede valid keywords of 3 points */ - public void testHighestScore_v3() { + public void testDeletedKeyWords() { Employee bachelorSupervisor2 = createEmployee("David", "Hallberg", languages); List<ProjectIdea> projectIdeaList = new ArrayList<ProjectIdea>(); projectIdeaList.add(bachelorProjectIdea); @@ -382,7 +308,7 @@ public class TestGreedyMatchingAlgorithm { @Transactional @Rollback /* the preferred LANGUAGE of the project idea should determine even when two supervisors NOT have the same score */ - public void testPreferredLanguage() { + public void testPreferredLanguageDetermines() { Set<Language> languageSet = new HashSet<Language>(); Language language_sv = languageDao.save(new Language("Swedish")); languageSet.add(language_sv); @@ -466,7 +392,7 @@ public class TestGreedyMatchingAlgorithm { @Test @Transactional @Rollback - /* the supervisor with no available "slots" should NOT be chosen even when this supervisor has the highest score */ + /* the supervisor with no available "slots" should never be chosen (even when this supervisor has the highest score) */ public void testNoAvailableSlots() { Employee bachelorSupervisor2 = createEmployee("David", "Hallberg", languages); List<ProjectIdea> projectIdeaList = new ArrayList<ProjectIdea>(); @@ -489,8 +415,8 @@ public class TestGreedyMatchingAlgorithm { @Test @Transactional @Rollback - /* a supervisor with the highest available slot should NOT be chosen when this supervisor has less score */ - public void testHighestAvailableSlot() { + /* the supervisor with the highest points should be chosen even if there exists a supervisor with more available "slots" */ + public void testHighestAvailablePoints() { Employee bachelorSupervisor2 = createEmployee("David", "Hallberg", languages); List<ProjectIdea> projectIdeaList = new ArrayList<ProjectIdea>(); projectIdeaList.add(bachelorProjectIdea); @@ -511,13 +437,11 @@ public class TestGreedyMatchingAlgorithm { @Test @Transactional @Rollback - /* test that the number Availability#numMatched has increased with one and that the supervisor with highest available slots are chosen */ + /* test that Availability#numMatched has increased with one after a match */ public void testNumMatchedHasIncreased() { 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); - boolean found = false; for(Availability availability : supervisorAvailability) { if(availability.getSupervisor().equals(bachelorSupervisor2)) { @@ -529,7 +453,6 @@ public class TestGreedyMatchingAlgorithm { assertTrue(found); Result result = new GreedyMatchingAlgorithm().match(supervisorAvailability, unmatchedProjectIdeas, weights); assertTrue(result.matches.size() > 0); - assertTrue(result.matches.get(0).getProjectIdea().equals(bachelorProjectIdea)); assertTrue(result.matches.get(0).getSupervisor().equals(bachelorSupervisor2)); found = false; @@ -545,53 +468,13 @@ public class TestGreedyMatchingAlgorithm { } - @Test - @Transactional - @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 = createEmployee("David", "Hallberg", languages); - supervisorAvailability.add(new Availability(masterSupervisor, 0L, 1, bachelorProjectClass)); - supervisorAvailability.add(new Availability(bachelorSupervisor2, 0L, 1, bachelorProjectClass)); - 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); - assertTrue(result.matches.get(0).getProjectIdea().equals(bachelorProjectIdea)); - assertTrue(result.matches.get(0).getSupervisor().equals(bachelorSupervisor2)); - assertTrue(result.unmatched.size() == 0); - } - - @Test - @Transactional - @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 = 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)); - unmatchedProjectIdeas.add(bachelorProjectIdea); - Result result = new GreedyMatchingAlgorithm().match(supervisorAvailability, unmatchedProjectIdeas, weights); - assertTrue(result.matches.size() > 0); - - assertTrue(result.matches.get(0).getProjectIdea().equals(bachelorProjectIdea)); - assertTrue(result.matches.get(0).getSupervisor().equals(masterSupervisor)); - assertTrue(result.unmatched.size() == 0); - } - @Test @Transactional @Rollback /* test that the supervisor who has the highest total slot available will be chosen */ - public void testIncreaseSlotForMasterSupervisor() { + public void testHighestAvailableSlot() { Employee davidH = createEmployee("David", "Hallberg", languages); Employee henrikH = createEmployee("Henrik", "Hansson", languages); -//ProjectIdea firstBachelorIdea = createProjectIdea(bachelorProjectClass, applicationPeriod); supervisorAvailability.add(new Availability(henrikH, 2L, 3, bachelorProjectClass)); // total slot = 2 supervisorAvailability.add(new Availability(henrikH, 3L, 4, masterProjectClass)); supervisorAvailability.add(new Availability(davidH, 1L, 1, bachelorProjectClass)); // total slot = 1 @@ -608,48 +491,20 @@ public class TestGreedyMatchingAlgorithm { assertTrue(result.unmatched.size() == 0); } - @Test - @Transactional - @Rollback - /* test that a master supervisor is chosen for a master project idea which has the same points as a bachelor project idea */ - public void testIncreaseSlotForMasterSupervisor_v2() { - Employee davidH = createEmployee("David", "Hallberg", languages); - Employee henrikH = createEmployee("Henrik", "Hansson", languages); - supervisorAvailability.add(new Availability(henrikH, 3L, 3, bachelorProjectClass)); - supervisorAvailability.add(new Availability(henrikH, 3L, 4, masterProjectClass)); - supervisorAvailability.add(new Availability(davidH, 0L, 1, bachelorProjectClass)); - unmatchedProjectIdeas.add(bachelorProjectIdea); - unmatchedProjectIdeas.add(masterProjectIdea); - bachelorProjectIdea.setPreferredSupervisor(henrikH); - masterProjectIdea.setPreferredSupervisor(henrikH); - Result result = new GreedyMatchingAlgorithm().match(supervisorAvailability, unmatchedProjectIdeas, weights); - assertTrue(result.matches.size() > 0); - assertTrue(result.matches.get(0).getPoints() == 10); - assertTrue(result.matches.get(1).getPoints() == 0); - assertTrue(result.matches.get(0).getSupervisor().equals(henrikH)); - assertTrue(result.matches.get(1).getSupervisor().equals(davidH)); - assertTrue(result.matches.get(0).getProjectIdea().equals(masterProjectIdea)); - assertTrue(result.matches.get(1).getProjectIdea().equals(bachelorProjectIdea)); - assertTrue(result.unmatched.size() == 0); - } - @Test @Transactional @Rollback /* three supervisors are matched against three project ideas */ - public void testIncreaseSlotForMasterSupervisor_v3() { + public void testThreeSupervisorsAndThreeProjectIdeas() { 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); @@ -658,7 +513,6 @@ public class TestGreedyMatchingAlgorithm { 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)); @@ -668,7 +522,6 @@ public class TestGreedyMatchingAlgorithm { 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)); @@ -677,24 +530,18 @@ public class TestGreedyMatchingAlgorithm { 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); @@ -703,15 +550,15 @@ public class TestGreedyMatchingAlgorithm { 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).getPoints() == 5); + assertTrue(result.matches.get(1).getSupervisor().equals(henrikH)); assertTrue(result.matches.get(1).getProjectIdea().equals(firstBachelorIdea)); + + assertTrue(result.matches.get(2).getPoints() == 5); + assertTrue(result.matches.get(2).getSupervisor().equals(henrikH)); assertTrue(result.matches.get(2).getProjectIdea().equals(masterIdea)); } }