Skip to content
Snippets Groups Projects
Commit 44a06d4b authored by uhensler's avatar uhensler
Browse files

OO-5169: Structure course element stays not ready even if only optional sub elements

parent d735c8b2
No related branches found
No related tags found
No related merge requests found
......@@ -37,13 +37,23 @@ public class STFullyAssessedEvaluator implements FullyAssessedEvaluator {
@Override
public Boolean getFullyAssessed(AssessmentEvaluation currentEvaluation, List<AssessmentEvaluation> children,
Blocker blocker) {
boolean hasMandatory = false;
for (AssessmentEvaluation evaluation : children) {
if (isMandatory(evaluation) && isNotFullyAssessedYet(evaluation)) {
blocker.block();
return Boolean.FALSE;
if (isMandatory(evaluation)) {
hasMandatory = true;
if (isNotFullyAssessedYet(evaluation)) {
blocker.block();
return Boolean.FALSE;
}
}
}
return Boolean.TRUE;
// If the participant has fully assessed all mandatory elements,
// he should be able to continue from that element. In that case
// he has fully assessed the nodes earlier. So don't stop him afterwards!
if (hasMandatory) {
return Boolean.TRUE;
}
return Boolean.valueOf(!blocker.isBlocked());
}
private boolean isNotFullyAssessedYet(AssessmentEvaluation evaluation) {
......
......@@ -42,8 +42,7 @@ public class STLearningPathStatusEvaluator implements StatusEvaluator {
@Override
public AssessmentEntryStatus getStatus(AssessmentEvaluation currentEvaluation,
Blocker blocker) {
AssessmentEntryStatus currentStatus = currentEvaluation.getAssessmentStatus();
AssessmentEntryStatus status = currentStatus;
AssessmentEntryStatus status = currentEvaluation.getAssessmentStatus();
if (isBlocked(blocker)) {
status = AssessmentEntryStatus.notReady;
} else {
......@@ -69,6 +68,7 @@ public class STLearningPathStatusEvaluator implements StatusEvaluator {
List<AssessmentEvaluation> children) {
boolean notStarted = false;
boolean inProgress = false;
boolean hasMandatory = false;
boolean done = true;
for (AssessmentEvaluation child : children) {
if (isNotStarted(child)) {
......@@ -77,11 +77,19 @@ public class STLearningPathStatusEvaluator implements StatusEvaluator {
if (isInProgess(child)) {
inProgress = true;
}
if (isMandatory(child) && isNotFullyAssessed(child)) {
done = false;
if (isMandatory(child)) {
hasMandatory = true;
if (isNotFullyAssessed(child)) {
done = false;
}
}
}
// Only optional, but no one is started.
if (!hasMandatory && !inProgress && done && AssessmentEntryStatus.notReady == currentEvaluation.getAssessmentStatus()) {
return AssessmentEntryStatus.notReady;
}
if (done) return AssessmentEntryStatus.done;
if (inProgress) return AssessmentEntryStatus.inProgress;
if (notStarted) return AssessmentEntryStatus.notStarted;
......
......@@ -56,6 +56,18 @@ public class STFullyAssessedEvaluatorTest {
assertThat(blocker.isBlocked()).isFalse();
}
@Test
public void shouldReturnTrueIfAllMandatoryChildrenAreFullyAssessedEvenIfItIsBlocked() {
Blocker blocker = new SequentialBlocker();
blocker.block();
AssessmentEvaluation childMandatoryAssessed = createAssessmentEvaluation(Boolean.TRUE, AssessmentObligation.mandatory);
List<AssessmentEvaluation> children = Arrays.asList(childMandatoryAssessed);
Boolean fullyAssessed = sut.getFullyAssessed(null, children, blocker);
assertThat(fullyAssessed).isTrue();
}
@Test
public void shouldReturnTrueIfItHasNoChildren() {
Blocker blocker = new SequentialBlocker();
......@@ -91,7 +103,30 @@ public class STFullyAssessedEvaluatorTest {
assertThat(blocker.isBlocked()).isTrue();
}
@Test
public void shouldReturnTrueIfItHasOnlyOptionalChildren() {
Blocker blocker = new SequentialBlocker();
AssessmentEvaluation childOptoinalNotAssessed = createAssessmentEvaluation(Boolean.FALSE, AssessmentObligation.optional);
List<AssessmentEvaluation> children = Arrays.asList(childOptoinalNotAssessed);
Boolean fullyAssessed = sut.getFullyAssessed(null, children, blocker);
assertThat(fullyAssessed).isTrue();
}
@Test
public void shouldReturnFalseIfItHasOnlyOptionalChildrenButItIsBlocked() {
Blocker blocker = new SequentialBlocker();
blocker.block();
AssessmentEvaluation childOptoinalNotAssessed1 = createAssessmentEvaluation(Boolean.FALSE, AssessmentObligation.optional);
AssessmentEvaluation childOptoinalNotAssessed2 = createAssessmentEvaluation(null, AssessmentObligation.optional);
List<AssessmentEvaluation> children = Arrays.asList(childOptoinalNotAssessed1, childOptoinalNotAssessed2);
Boolean fullyAssessed = sut.getFullyAssessed(null, children, blocker);
assertThat(fullyAssessed).isFalse();
}
private AssessmentEvaluation createAssessmentEvaluation(Boolean fullyAssessd, AssessmentObligation obligation) {
return new AssessmentEvaluation(null, null, null, null, null, null, null, null, fullyAssessd, null, null, null,
null, null, null, null, 0, null, null, null, null, null, null, Overridable.of(obligation), null, null, null);
......
......@@ -163,6 +163,34 @@ public class STLearningPathStatusEvaluatorTest {
assertThat(status).isEqualTo(AssessmentEntryStatus.done);
}
@Test
public void shouldReturnNotReadyIfItHasOnlyOptionalChildrenButWasNotReady() {
AssessmentEvaluation currentEvaluation = getAssessmentEvaluation(Boolean.TRUE, AssessmentEntryStatus.notReady, null);
AssessmentEvaluation child1 = getAssessmentEvaluation(Boolean.FALSE, AssessmentEntryStatus.notReady,
AssessmentObligation.optional);
AssessmentEvaluation child2 = getAssessmentEvaluation(Boolean.FALSE, AssessmentEntryStatus.notStarted,
AssessmentObligation.optional);
List<AssessmentEvaluation> children = Arrays.asList(child1, child2);
AssessmentEntryStatus status = sut.getStatus(currentEvaluation, children);
assertThat(status).isEqualTo(AssessmentEntryStatus.notReady);
}
@Test
public void shouldReturnDoneIfItHasOnlyOptionalChildrenButWasNotStarted() {
AssessmentEvaluation currentEvaluation = getAssessmentEvaluation(Boolean.TRUE, AssessmentEntryStatus.notStarted, null);
AssessmentEvaluation child1 = getAssessmentEvaluation(Boolean.FALSE, AssessmentEntryStatus.notReady,
AssessmentObligation.optional);
AssessmentEvaluation child2 = getAssessmentEvaluation(Boolean.FALSE, AssessmentEntryStatus.notStarted,
AssessmentObligation.optional);
List<AssessmentEvaluation> children = Arrays.asList(child1, child2);
AssessmentEntryStatus status = sut.getStatus(currentEvaluation, children);
assertThat(status).isEqualTo(AssessmentEntryStatus.done);
}
private AssessmentEvaluation getAssessmentEvaluation(Boolean fullyAssessd, AssessmentEntryStatus assessmentStatus, AssessmentObligation obligation) {
return new AssessmentEvaluation(null, null, null, null, null, null, assessmentStatus, null, fullyAssessd, null,
......
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