Index: Riskeer/Integration/src/Riskeer.Integration.Plugin/RiskeerPlugin.cs =================================================================== diff -u -r24ff1a991d8a2e42be8fc689b3c401c4c6ed7f5a -rea58bf4e2497098edf2125a0fb76c728beb2fd40 --- Riskeer/Integration/src/Riskeer.Integration.Plugin/RiskeerPlugin.cs (.../RiskeerPlugin.cs) (revision 24ff1a991d8a2e42be8fc689b3c401c4c6ed7f5a) +++ Riskeer/Integration/src/Riskeer.Integration.Plugin/RiskeerPlugin.cs (.../RiskeerPlugin.cs) (revision ea58bf4e2497098edf2125a0fb76c728beb2fd40) @@ -1328,9 +1328,9 @@ private static bool WaterLevelCalculationsForUserDefinedTargetProbabilitiesGroupContext_CanDropOrInsert(object draggedData, object targetData) { var waterLevelCalculationsForTargetProbabilitiesGroupContext = (WaterLevelCalculationsForUserDefinedTargetProbabilitiesGroupContext) targetData; - var waterLevelCalculationsForTargetProbabilityContext = (WaterLevelCalculationsForUserDefinedTargetProbabilityContext) draggedData; - return waterLevelCalculationsForTargetProbabilitiesGroupContext.WrappedData.Contains(waterLevelCalculationsForTargetProbabilityContext.WrappedData); + return draggedData is WaterLevelCalculationsForUserDefinedTargetProbabilityContext waterLevelCalculationsForTargetProbabilityContext + && waterLevelCalculationsForTargetProbabilitiesGroupContext.WrappedData.Contains(waterLevelCalculationsForTargetProbabilityContext.WrappedData); } private static void WaterLevelCalculationsForUserDefinedTargetProbabilitiesGroupContext_OnDrop(object droppedData, object newParentData, object oldParentData, int position, TreeViewControl treeViewControl) Index: Riskeer/Integration/test/Riskeer.Integration.Plugin.Test/TreeNodeInfos/WaterLevelCalculationsForUserDefinedTargetProbabilitiesGroupContextTreeNodeInfoTest.cs =================================================================== diff -u -r14c5f66501f9265a20bc042c0440d06d0df771fd -rea58bf4e2497098edf2125a0fb76c728beb2fd40 --- Riskeer/Integration/test/Riskeer.Integration.Plugin.Test/TreeNodeInfos/WaterLevelCalculationsForUserDefinedTargetProbabilitiesGroupContextTreeNodeInfoTest.cs (.../WaterLevelCalculationsForUserDefinedTargetProbabilitiesGroupContextTreeNodeInfoTest.cs) (revision 14c5f66501f9265a20bc042c0440d06d0df771fd) +++ Riskeer/Integration/test/Riskeer.Integration.Plugin.Test/TreeNodeInfos/WaterLevelCalculationsForUserDefinedTargetProbabilitiesGroupContextTreeNodeInfoTest.cs (.../WaterLevelCalculationsForUserDefinedTargetProbabilitiesGroupContextTreeNodeInfoTest.cs) (revision ea58bf4e2497098edf2125a0fb76c728beb2fd40) @@ -86,9 +86,9 @@ Assert.IsNull(info.CheckedState); Assert.IsNull(info.OnNodeChecked); Assert.IsNull(info.CanDrag); - Assert.IsNull(info.CanDrop); - Assert.IsNull(info.CanInsert); - Assert.IsNull(info.OnDrop); + Assert.IsNotNull(info.CanDrop); + Assert.IsNotNull(info.CanInsert); + Assert.IsNotNull(info.OnDrop); } } @@ -776,6 +776,200 @@ mockRepository.VerifyAll(); } + [Test] + public void CanInsert_DraggedDataOfUnsupportedDataType_ReturnsFalse() + { + // Setup + using (var plugin = new RiskeerPlugin()) + { + TreeNodeInfo info = GetInfo(plugin); + + var targetData = new WaterLevelCalculationsForUserDefinedTargetProbabilitiesGroupContext( + new ObservableList(), + new AssessmentSectionStub()); + + // Call + bool canInsert = info.CanInsert(new object(), targetData); + + // Assert + Assert.IsFalse(canInsert); + } + } + + [Test] + public void CanInsert_DraggedDataNotPartOfGroupContext_ReturnsFalse() + { + // Setup + using (var plugin = new RiskeerPlugin()) + { + TreeNodeInfo info = GetInfo(plugin); + + var assessmentSectionStub = new AssessmentSectionStub(); + + var targetData = new WaterLevelCalculationsForUserDefinedTargetProbabilitiesGroupContext( + new ObservableList(), + assessmentSectionStub); + + var draggedData = new WaterLevelCalculationsForUserDefinedTargetProbabilityContext( + new HydraulicBoundaryLocationCalculationsForTargetProbability(), + assessmentSectionStub); + + // Call + bool canInsert = info.CanInsert(draggedData, targetData); + + // Assert + Assert.IsFalse(canInsert); + } + } + + [Test] + public void CanInsert_DraggedDataPartOfGroupContext_ReturnsTrue() + { + // Setup + using (var plugin = new RiskeerPlugin()) + { + TreeNodeInfo info = GetInfo(plugin); + + var assessmentSectionStub = new AssessmentSectionStub(); + var calculationsForTargetProbability = new HydraulicBoundaryLocationCalculationsForTargetProbability(); + + var targetData = new WaterLevelCalculationsForUserDefinedTargetProbabilitiesGroupContext( + new ObservableList + { + calculationsForTargetProbability + }, + assessmentSectionStub); + + var draggedData = new WaterLevelCalculationsForUserDefinedTargetProbabilityContext( + calculationsForTargetProbability, + assessmentSectionStub); + + // Call + bool canInsert = info.CanInsert(draggedData, targetData); + + // Assert + Assert.IsTrue(canInsert); + } + } + + [Test] + public void CanDrop_DraggedDataOfUnsupportedDataType_ReturnsFalse() + { + // Setup + using (var plugin = new RiskeerPlugin()) + { + TreeNodeInfo info = GetInfo(plugin); + + var targetData = new WaterLevelCalculationsForUserDefinedTargetProbabilitiesGroupContext( + new ObservableList(), + new AssessmentSectionStub()); + + // Call + bool canDrop = info.CanDrop(new object(), targetData); + + // Assert + Assert.IsFalse(canDrop); + } + } + + [Test] + public void CanDrop_DraggedDataNotPartOfGroupContext_ReturnsFalse() + { + // Setup + using (var plugin = new RiskeerPlugin()) + { + TreeNodeInfo info = GetInfo(plugin); + + var assessmentSectionStub = new AssessmentSectionStub(); + + var targetData = new WaterLevelCalculationsForUserDefinedTargetProbabilitiesGroupContext( + new ObservableList(), + assessmentSectionStub); + + var draggedData = new WaterLevelCalculationsForUserDefinedTargetProbabilityContext( + new HydraulicBoundaryLocationCalculationsForTargetProbability(), + assessmentSectionStub); + + // Call + bool canDrop = info.CanDrop(draggedData, targetData); + + // Assert + Assert.IsFalse(canDrop); + } + } + + [Test] + public void CanDrop_DraggedDataPartOfGroupContext_ReturnsTrue() + { + // Setup + using (var plugin = new RiskeerPlugin()) + { + TreeNodeInfo info = GetInfo(plugin); + + var assessmentSectionStub = new AssessmentSectionStub(); + var calculationsForTargetProbability = new HydraulicBoundaryLocationCalculationsForTargetProbability(); + + var targetData = new WaterLevelCalculationsForUserDefinedTargetProbabilitiesGroupContext( + new ObservableList + { + calculationsForTargetProbability + }, + assessmentSectionStub); + + var draggedData = new WaterLevelCalculationsForUserDefinedTargetProbabilityContext( + calculationsForTargetProbability, + assessmentSectionStub); + + // Call + bool canDrop = info.CanDrop(draggedData, targetData); + + // Assert + Assert.IsTrue(canDrop); + } + } + + [Test] + public void OnDrop_DataDroppedToDifferentIndex_DroppedDataCorrectlyMoved() + { + // Setup + using (var plugin = new RiskeerPlugin()) + { + TreeNodeInfo info = GetInfo(plugin); + + var assessmentSectionStub = new AssessmentSectionStub(); + + var calculationsForTargetProbability1 = new HydraulicBoundaryLocationCalculationsForTargetProbability(); + var calculationsForTargetProbability2 = new HydraulicBoundaryLocationCalculationsForTargetProbability(); + var calculationsForTargetProbability3 = new HydraulicBoundaryLocationCalculationsForTargetProbability(); + + var calculationsForTargetProbabilities = new ObservableList + { + calculationsForTargetProbability1, + calculationsForTargetProbability2, + calculationsForTargetProbability3 + }; + + var parentData = new WaterLevelCalculationsForUserDefinedTargetProbabilitiesGroupContext( + calculationsForTargetProbabilities, + assessmentSectionStub); + + var droppedData = new WaterLevelCalculationsForUserDefinedTargetProbabilityContext( + calculationsForTargetProbability3, + assessmentSectionStub); + + // Call + info.OnDrop(droppedData, parentData, parentData, 1, null); + + // Assert + CollectionAssert.AreEquivalent(new[] + { + calculationsForTargetProbability1, + calculationsForTargetProbability3, + calculationsForTargetProbability2 + }, calculationsForTargetProbabilities); + } + } + private static void AssertHydraulicBoundaryLocationCalculationOutput(IDesignWaterLevelCalculator designWaterLevelCalculator, HydraulicBoundaryLocationCalculationOutput actualOutput) {