Index: Riskeer/Integration/src/Riskeer.Integration.Plugin/RiskeerPlugin.cs =================================================================== diff -u -rea58bf4e2497098edf2125a0fb76c728beb2fd40 -ra6489525b171ce91e4205da06bf3d1b47b232c02 --- Riskeer/Integration/src/Riskeer.Integration.Plugin/RiskeerPlugin.cs (.../RiskeerPlugin.cs) (revision ea58bf4e2497098edf2125a0fb76c728beb2fd40) +++ Riskeer/Integration/src/Riskeer.Integration.Plugin/RiskeerPlugin.cs (.../RiskeerPlugin.cs) (revision a6489525b171ce91e4205da06bf3d1b47b232c02) @@ -1347,9 +1347,9 @@ private static bool WaveHeightCalculationsForUserDefinedTargetProbabilitiesGroupContext_CanDropOrInsert(object draggedData, object targetData) { var waveHeightCalculationsForTargetProbabilitiesGroupContext = (WaveHeightCalculationsForUserDefinedTargetProbabilitiesGroupContext) targetData; - var waveHeightCalculationsForTargetProbabilityContext = (WaveHeightCalculationsForUserDefinedTargetProbabilityContext) draggedData; - return waveHeightCalculationsForTargetProbabilitiesGroupContext.WrappedData.Contains(waveHeightCalculationsForTargetProbabilityContext.WrappedData); + return draggedData is WaveHeightCalculationsForUserDefinedTargetProbabilityContext waveHeightCalculationsForTargetProbabilityContext + && waveHeightCalculationsForTargetProbabilitiesGroupContext.WrappedData.Contains(waveHeightCalculationsForTargetProbabilityContext.WrappedData); } private static void WaveHeightCalculationsForUserDefinedTargetProbabilitiesGroupContext_OnDrop(object droppedData, object newParentData, object oldParentData, int position, TreeViewControl treeViewControl) Index: Riskeer/Integration/test/Riskeer.Integration.Plugin.Test/TreeNodeInfos/WaveHeightCalculationsForUserDefinedTargetProbabilitiesGroupContextTreeNodeInfoTest.cs =================================================================== diff -u -r14c5f66501f9265a20bc042c0440d06d0df771fd -ra6489525b171ce91e4205da06bf3d1b47b232c02 --- Riskeer/Integration/test/Riskeer.Integration.Plugin.Test/TreeNodeInfos/WaveHeightCalculationsForUserDefinedTargetProbabilitiesGroupContextTreeNodeInfoTest.cs (.../WaveHeightCalculationsForUserDefinedTargetProbabilitiesGroupContextTreeNodeInfoTest.cs) (revision 14c5f66501f9265a20bc042c0440d06d0df771fd) +++ Riskeer/Integration/test/Riskeer.Integration.Plugin.Test/TreeNodeInfos/WaveHeightCalculationsForUserDefinedTargetProbabilitiesGroupContextTreeNodeInfoTest.cs (.../WaveHeightCalculationsForUserDefinedTargetProbabilitiesGroupContextTreeNodeInfoTest.cs) (revision a6489525b171ce91e4205da06bf3d1b47b232c02) @@ -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 WaveHeightCalculationsForUserDefinedTargetProbabilitiesGroupContext( + 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 WaveHeightCalculationsForUserDefinedTargetProbabilitiesGroupContext( + new ObservableList(), + assessmentSectionStub); + + var draggedData = new WaveHeightCalculationsForUserDefinedTargetProbabilityContext( + 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 WaveHeightCalculationsForUserDefinedTargetProbabilitiesGroupContext( + new ObservableList + { + calculationsForTargetProbability + }, + assessmentSectionStub); + + var draggedData = new WaveHeightCalculationsForUserDefinedTargetProbabilityContext( + 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 WaveHeightCalculationsForUserDefinedTargetProbabilitiesGroupContext( + 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 WaveHeightCalculationsForUserDefinedTargetProbabilitiesGroupContext( + new ObservableList(), + assessmentSectionStub); + + var draggedData = new WaveHeightCalculationsForUserDefinedTargetProbabilityContext( + 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 WaveHeightCalculationsForUserDefinedTargetProbabilitiesGroupContext( + new ObservableList + { + calculationsForTargetProbability + }, + assessmentSectionStub); + + var draggedData = new WaveHeightCalculationsForUserDefinedTargetProbabilityContext( + 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 WaveHeightCalculationsForUserDefinedTargetProbabilitiesGroupContext( + calculationsForTargetProbabilities, + assessmentSectionStub); + + var droppedData = new WaveHeightCalculationsForUserDefinedTargetProbabilityContext( + calculationsForTargetProbability3, + assessmentSectionStub); + + // Call + info.OnDrop(droppedData, parentData, parentData, 1, null); + + // Assert + CollectionAssert.AreEquivalent(new[] + { + calculationsForTargetProbability1, + calculationsForTargetProbability3, + calculationsForTargetProbability2 + }, calculationsForTargetProbabilities); + } + } + private static void AssertHydraulicBoundaryLocationCalculationOutput(IWaveHeightCalculator waveHeightCalculator, HydraulicBoundaryLocationCalculationOutput actualOutput) {