Skip to content
Snippets Groups Projects
Commit b8426e77 authored by Julian Dehne's avatar Julian Dehne
Browse files

feat: extended functionalTests to Journal, Groupfinding and Assessment module

parent 6090088c
No related branches found
No related tags found
No related merge requests found
Showing
with 320 additions and 14 deletions
......@@ -10,6 +10,7 @@ import unipotsdam.gf.interfaces.*;
import unipotsdam.gf.modules.assessment.controller.service.PeerAssessment;
import unipotsdam.gf.modules.assessment.controller.service.PeerAssessmentDummy;
import unipotsdam.gf.modules.communication.service.CommunicationDummyService;
import unipotsdam.gf.modules.groupfinding.DummyGroupfinding;
import unipotsdam.gf.modules.journal.DummyJournalImpl;
import unipotsdam.gf.modules.journal.model.Journal;
import unipotsdam.gf.modules.journal.service.DummyJournalService;
......@@ -34,5 +35,7 @@ public class GFApplicationBinder extends AbstractBinder {
bind(ManagementImpl.class).to(Management.class);
bind(DummyResearchReportManagement.class).to(ResearchReportManagement.class);
bind(TestList.class).to(TestListInterface.class);
bind(DummyGroupfinding.class).to(IGroupFinding.class);
}
}
......@@ -19,16 +19,12 @@ import javax.inject.Singleton;
@ManagedBean
public class PhasesImpl implements IPhases {
@Inject
private IPeerAssessment iPeerAssessment;
@Inject
private Feedback feedback;
@Inject
private ICommunication iCommunication;
@Inject
private IJournal iJournal;
public PhasesImpl() {
......@@ -41,6 +37,7 @@ public class PhasesImpl implements IPhases {
* @param iCommunication
* @param iJournal
*/
@Inject
public PhasesImpl(IPeerAssessment iPeerAssessment, Feedback feedback, ICommunication iCommunication, IJournal iJournal) {
this.iPeerAssessment = iPeerAssessment;
this.feedback = feedback;
......
package unipotsdam.gf.interfaces;
import unipotsdam.gf.core.management.group.Group;
import unipotsdam.gf.core.management.project.Project;
import unipotsdam.gf.modules.groupfinding.GroupFormationMechanism;
import unipotsdam.gf.modules.groupfinding.GroupfindingCriteria;
public interface IGroupFinding {
/**
* Select the groupfinding criteria used
* @param groupfindingCriteria
*/
void selectGroupfindingCriteria(GroupfindingCriteria groupfindingCriteria);
/**
* Persist the selected manual groups
* @param groupComposition
*/
void persistGroups(java.util.List<Group> groupComposition, Project project);
/**
* @param project
* @return
*/
java.util.List<Group> getGroups(Project project);
/**
*
* @param groupFindingMechanism
*/
void formGroups(GroupFormationMechanism groupFindingMechanism);
}
......@@ -2,7 +2,14 @@ package unipotsdam.gf.interfaces;
import unipotsdam.gf.core.management.project.Project;
import unipotsdam.gf.core.management.user.User;
import unipotsdam.gf.modules.assessment.controller.model.StudentIdentifier;
import unipotsdam.gf.modules.journal.model.Journal;
import unipotsdam.gf.modules.researchreport.ResearchReport;
import javax.swing.text.html.HTML;
import java.io.File;
import java.util.List;
/**
* Interface for learning journal
......@@ -29,4 +36,29 @@ public interface IJournal {
* @param project
*/
void assignMissingPortfolioTasks(Project project);
/**
* after user has uploaded a journal entry this function is called
* @param journalEntry
* @param student
*/
void uploadJournalEntry(Journal journalEntry, User student);
/**
* persist final portfolio for assessment
*
* Maybe create a class for the collected portfolio
* @param journalEntries
* @param finalResearchReport
* @param presentation
*/
void uploadFinalPortfolio(Project project, List<Journal> journalEntries, ResearchReport finalResearchReport, File
presentation, User user);
/**
*
* @param project
* @return
*/
HTML getFinalPortfolioForAssessment(Project project, User user);
}
package unipotsdam.gf.interfaces;
import unipotsdam.gf.modules.assessment.QuizAnswer;
import unipotsdam.gf.modules.assessment.controller.model.*;
import java.util.ArrayList;
......@@ -74,4 +75,11 @@ public interface IPeerAssessment {
* @param groupId
*/
void postPeerRating(ArrayList<PeerRating> peerRatings, String projectId, String groupId);
/**
*
* @param studentAndQuiz
* @param quizAnswer
*/
void answerQuiz(StudentAndQuiz studentAndQuiz, QuizAnswer quizAnswer);
}
package unipotsdam.gf.modules.assessment;
public class QuizAnswer {
}
package unipotsdam.gf.modules.assessment.controller.model;
/**
* TODO @Axel: Normally a quiz would have a student field property instead of creating a new class
*/
public class StudentAndQuiz {
@Override
public String toString() {
......
package unipotsdam.gf.modules.assessment.controller.service;
import unipotsdam.gf.modules.assessment.QuizAnswer;
import unipotsdam.gf.modules.assessment.controller.model.*;
import java.util.ArrayList;
......@@ -57,4 +58,9 @@ public class FBAssessement extends AssessmentDAO {
public void postPeerRating(ArrayList<PeerRating> peerRatings, String projectId, String groupId) {
}
@Override
public void answerQuiz(StudentAndQuiz studentAndQuiz, QuizAnswer quizAnswer) {
}
}
package unipotsdam.gf.modules.assessment.controller.service;
import unipotsdam.gf.core.management.ManagementImpl;
import unipotsdam.gf.core.management.user.User;
import unipotsdam.gf.interfaces.IPeerAssessment;
import unipotsdam.gf.modules.assessment.QuizAnswer;
import unipotsdam.gf.modules.assessment.controller.model.*;
import unipotsdam.gf.core.database.mysql.MysqlConnect;
import java.util.ArrayList;
import java.util.List;
......@@ -56,4 +55,9 @@ public class PeerAssessment implements IPeerAssessment {
public void postPeerRating(ArrayList<PeerRating> peerRatings, String projectId, String groupId) {
}
@Override
public void answerQuiz(StudentAndQuiz studentAndQuiz, QuizAnswer quizAnswer) {
}
}
package unipotsdam.gf.modules.assessment.controller.service;
import unipotsdam.gf.interfaces.IPeerAssessment;
import unipotsdam.gf.modules.assessment.QuizAnswer;
import unipotsdam.gf.modules.assessment.controller.model.*;
import java.util.ArrayList;
......@@ -64,6 +65,11 @@ public class PeerAssessmentDummy implements IPeerAssessment {
int breakpoint = 0; //todo: print an http-answer for the ajax-request to receive
}
@Override
public void answerQuiz(StudentAndQuiz studentAndQuiz, QuizAnswer quizAnswer) {
}
@Override
public Assessment getAssessmentDataFromDB(StudentIdentifier student) {
int[] quizAnswer = {1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1};
......
package unipotsdam.gf.modules.assessment.controller.view;
import unipotsdam.gf.interfaces.IPeerAssessment;
import unipotsdam.gf.modules.assessment.QuizAnswer;
import unipotsdam.gf.modules.assessment.controller.model.*;
import unipotsdam.gf.modules.assessment.controller.service.PeerAssessment;
import unipotsdam.gf.modules.assessment.controller.service.PeerAssessmentDummy;
import javax.ws.rs.*;
......@@ -39,6 +39,11 @@ public class QuizView implements IPeerAssessment {
//todo: checkout the POST-variable. should be peerRating but its null atm.
}
@Override
public void answerQuiz(StudentAndQuiz studentAndQuiz, QuizAnswer quizAnswer) {
}
@POST
@Produces(MediaType.TEXT_PLAIN)
@Consumes(MediaType.APPLICATION_JSON)
......
package unipotsdam.gf.modules.groupfinding;
import unipotsdam.gf.core.management.group.Group;
import unipotsdam.gf.core.management.project.Project;
import unipotsdam.gf.interfaces.IGroupFinding;
import java.util.List;
public class DummyGroupfinding implements IGroupFinding {
@Override
public void selectGroupfindingCriteria(GroupfindingCriteria groupfindingCriteria) {
}
@Override
public void persistGroups(
List<Group> groupComposition, Project project) {
}
@Override
public List<Group> getGroups(Project project) {
return null;
}
@Override
public void formGroups(GroupFormationMechanism groupFindingMechanism) {
}
}
package unipotsdam.gf.modules.groupfinding;
/**
* TODO: implementieren
* - Self efficacy scale
* - Uncertainty tolerance scale
* - Other sources
*/
public class GroupfindingCriteria {
}
package unipotsdam.gf.modules.groupfinding;
import unipotsdam.gf.core.management.group.Group;
import unipotsdam.gf.core.management.project.Project;
import unipotsdam.gf.interfaces.IGroupFinding;
import java.util.List;
public class GroupfindingImpl implements IGroupFinding {
@Override
public void selectGroupfindingCriteria(GroupfindingCriteria groupfindingCriteria) {
}
@Override
public void persistGroups(
List<Group> groupComposition, Project project) {
}
@Override
public List<Group> getGroups(Project project) {
return null;
}
@Override
public void formGroups(GroupFormationMechanism groupFindingMechanism) {
}
}
......@@ -3,9 +3,15 @@ package unipotsdam.gf.modules.journal;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import unipotsdam.gf.core.management.project.Project;
import unipotsdam.gf.core.management.user.User;
import unipotsdam.gf.interfaces.IJournal;
import unipotsdam.gf.modules.assessment.controller.model.StudentIdentifier;
import unipotsdam.gf.modules.journal.service.DummyJournalService;
import unipotsdam.gf.modules.journal.model.Journal;
import unipotsdam.gf.modules.researchreport.ResearchReport;
import javax.swing.text.html.HTML;
import java.io.File;
import java.util.List;
public class DummyJournalImpl implements IJournal {
......@@ -30,4 +36,22 @@ public class DummyJournalImpl implements IJournal {
public void assignMissingPortfolioTasks(Project project) {
log.debug("assigning fake MissingPortfolioTasks");
}
@Override
public void uploadJournalEntry(Journal journalEntry, User student) {
}
@Override
public void uploadFinalPortfolio(
Project project, List<Journal> journalEntries, ResearchReport finalResearchReport, File presentation,
User user) {
}
@Override
public HTML getFinalPortfolioForAssessment(
Project project, User user) {
return null;
}
}
package unipotsdam.gf.modules.peer2peerfeedback;
import org.mockito.Mockito;
import uk.co.jemos.podam.api.PodamFactory;
import uk.co.jemos.podam.api.PodamFactoryImpl;
import unipotsdam.gf.core.management.project.Project;
......@@ -19,6 +20,11 @@ public class DummyFeedback implements Feedback {
private static Boolean missingTaskAssigned = false;
public DummyFeedback() {
}
@Override
public Peer2PeerFeedback createPeer2PeerFeedbackmask(
User feedbackuser, User selectedstudent, File document) {
......
......@@ -17,19 +17,27 @@ import uk.co.jemos.podam.api.PodamFactory;
import uk.co.jemos.podam.api.PodamFactoryImpl;
import unipotsdam.gf.config.GFApplicationBinder;
import unipotsdam.gf.core.management.Management;
import unipotsdam.gf.core.management.group.Group;
import unipotsdam.gf.core.management.project.Project;
import unipotsdam.gf.core.management.project.ProjectConfiguration;
import unipotsdam.gf.core.management.user.User;
import unipotsdam.gf.core.states.ProjectPhase;
import unipotsdam.gf.modules.assessment.QuizAnswer;
import unipotsdam.gf.modules.assessment.controller.model.StudentAndQuiz;
import unipotsdam.gf.modules.groupfinding.GroupFormationMechanism;
import unipotsdam.gf.modules.groupfinding.GroupfindingCriteria;
import unipotsdam.gf.modules.journal.model.Journal;
import unipotsdam.gf.modules.peer2peerfeedback.Category;
import unipotsdam.gf.modules.peer2peerfeedback.Peer2PeerFeedback;
import unipotsdam.gf.modules.researchreport.ResearchReport;
import unipotsdam.gf.modules.researchreport.ResearchReportManagement;
import javax.inject.Inject;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
......@@ -53,10 +61,22 @@ public class ActivityFlowTest {
@Inject
Feedback feedback;
@Inject
IPhases phases;
@Inject
IGroupFinding groupFinding;
@Inject
ICommunication iCommunication;
@Inject
IJournal iJournal;
@Inject
IPeerAssessment iPeerAssessment;
private final Project project = factory.manufacturePojo(Project.class);
private final ArrayList<User> students = new ArrayList<>();
private final User teacher = factory.manufacturePojo(User.class);
......@@ -64,6 +84,8 @@ public class ActivityFlowTest {
@Rule
public MockitoRule mockitoRule = MockitoJUnit.rule();
@Before
public void setUp() {
final ServiceLocator locator = ServiceLocatorUtilities.bind(new GFApplicationBinder());
......@@ -72,9 +94,12 @@ public class ActivityFlowTest {
feedback = Mockito.spy(feedback);
researchReportManagement = Mockito.spy(researchReportManagement);
phases = Mockito.spy(phases);
iCommunication = Mockito.spy(iCommunication);
// TODO @Julian: Find out more elegant way of doing this
researchReportManagement.setFeedback(feedback);
phases.setFeedback(feedback);
}
@Test
......@@ -88,6 +113,9 @@ public class ActivityFlowTest {
// register students
loginStudents();
// form groups
formGroups();
// end first phase
phases.endPhase(ProjectPhase.CourseCreation, project);
......@@ -105,6 +133,18 @@ public class ActivityFlowTest {
}
public void formGroups() {
// form groups based on user profil
groupFinding.formGroups(GroupFormationMechanism.UserProfilStrategy);
// update groups manually
groupFinding.formGroups(GroupFormationMechanism.Manual);
}
public void loginTeacher() {
teacher.setStudent(false);
management.create(teacher, null);
......@@ -122,10 +162,32 @@ public class ActivityFlowTest {
public void uploadReflections() {
// update single reflection
Journal journalEntry = factory.manufacturePojo(Journal.class);
for (User student : students) {
iJournal.uploadJournalEntry(journalEntry, student);
}
// answer quiz
//
// create quiz TODO@Axel this should be a quiz dependend on the student for easier initialization and
// de-coupling
StudentAndQuiz studentAndQuiz = factory.manufacturePojo(StudentAndQuiz.class);
QuizAnswer quizAnswer = factory.manufacturePojo(QuizAnswer.class);
iPeerAssessment.createQuiz(studentAndQuiz);
iPeerAssessment.answerQuiz(studentAndQuiz, quizAnswer);
// finales Portfolio zusammenstellen
java.util.List<Journal> journalEntries = new ArrayList<Journal>();
journalEntries.add(journalEntry);
ResearchReport finalResearchReport = factory.manufacturePojo(ResearchReport.class);
File presentation = new File("dummy.pptx");
for (User student : students) {
iJournal.uploadFinalPortfolio(project,journalEntries, finalResearchReport, presentation, student);
}
assertNotNull(true);
}
public void uploadDossiers() {
......@@ -193,7 +255,9 @@ public class ActivityFlowTest {
ProjectConfiguration projectConfiguration = factory.manufacturePojo(ProjectConfiguration.class);
management.create(projectConfiguration, project);
//
GroupfindingCriteria groupfindingCriteria = factory.manufacturePojo(GroupfindingCriteria.class);
groupFinding.selectGroupfindingCriteria(groupfindingCriteria);
}
}
package unipotsdam.gf.testsandbox;
import unipotsdam.gf.core.testsandbox.TestListInterface;
import unipotsdam.gf.interfaces.Feedback;
import javax.inject.Inject;
public class SpiedListHolder {
private TestListInterface spiedList;
@Inject
public SpiedListHolder(TestListInterface spiedList) {
this.spiedList = spiedList;
}
public TestListInterface getSpiedList() {
return spiedList;
}
}
......@@ -28,12 +28,15 @@ public class TestTestTest {
@Inject
TestListInterface spiedList2;
@Inject
@Spy
TestListInterface spiedList3;
@Inject
SpiedListHolder spiedListHolder;
@Before
public void setUp() {
final ServiceLocator locator = ServiceLocatorUtilities.bind(new GFApplicationBinder());
......@@ -97,4 +100,19 @@ public class TestTestTest {
assertEquals(2, spiedList3.size());
}
/* //
@Test
public void howSpiesWorkWithConstructorInjection() {
java.util.List<String> spiedList4 = Mockito.spy(spiedListHolder.getSpiedList());
spiedList4.add("one");
spiedList4.add("two");
Mockito.verify(spiedList4).add("one");
Mockito.verify(spiedList4).add("two");
assertEquals(2, spiedList4.size());
}*/
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment