From 3df2940dae41fa8fca24df1457ae6f7f62c068d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Thu, 12 Nov 2009 19:18:17 +0100 Subject: [PATCH] ItEr34S12CUCreacionUnidadesPlanificacionItEr33S14: Specifying behaviour for when removing the last child --- .../business/orders/entities/SchedulingState.java | 10 ++++++---- .../test/orders/entities/SchedulingStateTest.java | 9 +++++++++ 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/SchedulingState.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/SchedulingState.java index 1171f21b2..85c0c99a7 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/SchedulingState.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/SchedulingState.java @@ -226,14 +226,16 @@ public class SchedulingState { } private void typeChangedOnChild(SchedulingState child) { - if (getType().belongsToSchedulingPoint()) { - return; - } setType(calculateTypeFromChildren()); } private Type calculateTypeFromChildren() { - Validate.isTrue(!children.isEmpty()); + if (getType().belongsToSchedulingPoint()) { + return getType(); + } + if (children.isEmpty()) { + return Type.NO_SCHEDULED; + } boolean allScheduled = true; boolean someScheduled = false; for (SchedulingState each : children) { diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/SchedulingStateTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/SchedulingStateTest.java index 7da71ae89..7f6e37f15 100644 --- a/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/SchedulingStateTest.java +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/SchedulingStateTest.java @@ -299,6 +299,15 @@ public class SchedulingStateTest { assertTrue(typeChanged[0]); } + @Test + public void removingAllTheChildrenOfACompletelyScheduledSuperelementMakesItNoScheduled() { + childA.schedule(); + childB.schedule(); + root.removeChild(childA); + root.removeChild(childB); + assertThat(root, hasType(Type.NO_SCHEDULED)); + } + abstract static class SchedulingStateMatcher extends BaseMatcher { @Override