Index: Ringtoets/Piping/src/Ringtoets.Piping.Data/PipingCalculation.cs =================================================================== diff -u -red0b4ea830beb801bcc0e3eb5b28993001ed2981 -r495647ee1c652fecc15eea7fefeab29ae01347fe --- Ringtoets/Piping/src/Ringtoets.Piping.Data/PipingCalculation.cs (.../PipingCalculation.cs) (revision ed0b4ea830beb801bcc0e3eb5b28993001ed2981) +++ Ringtoets/Piping/src/Ringtoets.Piping.Data/PipingCalculation.cs (.../PipingCalculation.cs) (revision 495647ee1c652fecc15eea7fefeab29ae01347fe) @@ -15,7 +15,7 @@ /// public PipingCalculation() { - Name = Resources.PipingCalculationData_DefaultName; + Name = Resources.PipingCalculation_DefaultName; Comments = new InputPlaceholder(Resources.Comments_DisplayName); InputParameters = new PipingInput(); Index: Ringtoets/Piping/src/Ringtoets.Piping.Data/PipingCalculationGroup.cs =================================================================== diff -u -red0b4ea830beb801bcc0e3eb5b28993001ed2981 -r495647ee1c652fecc15eea7fefeab29ae01347fe --- Ringtoets/Piping/src/Ringtoets.Piping.Data/PipingCalculationGroup.cs (.../PipingCalculationGroup.cs) (revision ed0b4ea830beb801bcc0e3eb5b28993001ed2981) +++ Ringtoets/Piping/src/Ringtoets.Piping.Data/PipingCalculationGroup.cs (.../PipingCalculationGroup.cs) (revision 495647ee1c652fecc15eea7fefeab29ae01347fe) @@ -3,6 +3,8 @@ using Core.Common.Base; +using Ringtoets.Piping.Data.Properties; + namespace Ringtoets.Piping.Data { /// @@ -15,7 +17,7 @@ /// public PipingCalculationGroup() { - Name = "Berekening groep"; + Name = Resources.PipingCalculationGroup_DefaultName; Children = new List(); } Index: Ringtoets/Piping/src/Ringtoets.Piping.Data/Properties/Resources.Designer.cs =================================================================== diff -u -r6b3d2269de35bec503bbd3965ae9b532e1c6f216 -r495647ee1c652fecc15eea7fefeab29ae01347fe --- Ringtoets/Piping/src/Ringtoets.Piping.Data/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision 6b3d2269de35bec503bbd3965ae9b532e1c6f216) +++ Ringtoets/Piping/src/Ringtoets.Piping.Data/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision 495647ee1c652fecc15eea7fefeab29ae01347fe) @@ -133,15 +133,24 @@ } /// - /// Looks up a localized string similar to Berekening. + /// Looks up a localized string similar to Nieuwe berekening. /// - internal static string PipingCalculationData_DefaultName { + internal static string PipingCalculation_DefaultName { get { - return ResourceManager.GetString("PipingCalculationData_DefaultName", resourceCulture); + return ResourceManager.GetString("PipingCalculation_DefaultName", resourceCulture); } } /// + /// Looks up a localized string similar to Nieuwe map. + /// + internal static string PipingCalculationGroup_DefaultName { + get { + return ResourceManager.GetString("PipingCalculationGroup_DefaultName", resourceCulture); + } + } + + /// /// Looks up a localized string similar to Een punt in de geometrie voor de profielmeting heeft geen waarde.. /// internal static string RingtoetsPipingSurfaceLine_A_point_in_the_collection_was_null { Index: Ringtoets/Piping/src/Ringtoets.Piping.Data/Properties/Resources.resx =================================================================== diff -u -r6b3d2269de35bec503bbd3965ae9b532e1c6f216 -r495647ee1c652fecc15eea7fefeab29ae01347fe --- Ringtoets/Piping/src/Ringtoets.Piping.Data/Properties/Resources.resx (.../Resources.resx) (revision 6b3d2269de35bec503bbd3965ae9b532e1c6f216) +++ Ringtoets/Piping/src/Ringtoets.Piping.Data/Properties/Resources.resx (.../Resources.resx) (revision 495647ee1c652fecc15eea7fefeab29ae01347fe) @@ -150,13 +150,16 @@ De geometrie die opgegeven werd voor de profielmeting heeft geen waarde. - - Berekening + + Nieuwe berekening Commentaar Berekeningsverslag + + Nieuwe map + \ No newline at end of file Index: Ringtoets/Piping/src/Ringtoets.Piping.Forms/NodePresenters/PipingCalculationContextNodePresenter.cs =================================================================== diff -u -re388ea76d1d044298cc89156c8744fbea1bcb736 -r495647ee1c652fecc15eea7fefeab29ae01347fe --- Ringtoets/Piping/src/Ringtoets.Piping.Forms/NodePresenters/PipingCalculationContextNodePresenter.cs (.../PipingCalculationContextNodePresenter.cs) (revision e388ea76d1d044298cc89156c8744fbea1bcb736) +++ Ringtoets/Piping/src/Ringtoets.Piping.Forms/NodePresenters/PipingCalculationContextNodePresenter.cs (.../PipingCalculationContextNodePresenter.cs) (revision 495647ee1c652fecc15eea7fefeab29ae01347fe) @@ -30,23 +30,23 @@ protected override void UpdateNode(ITreeNode parentNode, ITreeNode node, PipingCalculationContext pipingCalculationContext) { - node.Text = pipingCalculationContext.WrappedPipingCalculation.Name; + node.Text = pipingCalculationContext.WrappedData.Name; node.Image = Resources.PipingIcon; } protected override IEnumerable GetChildNodeObjects(PipingCalculationContext pipingCalculationContext) { - yield return pipingCalculationContext.WrappedPipingCalculation.Comments; + yield return pipingCalculationContext.WrappedData.Comments; yield return new PipingInputContext { - WrappedPipingInput = pipingCalculationContext.WrappedPipingCalculation.InputParameters, + WrappedPipingInput = pipingCalculationContext.WrappedData.InputParameters, AvailablePipingSurfaceLines = pipingCalculationContext.AvailablePipingSurfaceLines, AvailablePipingSoilProfiles = pipingCalculationContext.AvailablePipingSoilProfiles }; - if (pipingCalculationContext.WrappedPipingCalculation.HasOutput) + if (pipingCalculationContext.WrappedData.HasOutput) { - yield return pipingCalculationContext.WrappedPipingCalculation.Output; - yield return pipingCalculationContext.WrappedPipingCalculation.CalculationReport; + yield return pipingCalculationContext.WrappedData.Output; + yield return pipingCalculationContext.WrappedData.CalculationReport; } else { @@ -80,7 +80,7 @@ var calculationsFolder = parentNodeData as PipingCalculationsTreeFolder; if (calculationsFolder != null) { - var succesfullyRemovedData = calculationsFolder.ParentFailureMechanism.Calculations.Remove(nodeData.WrappedPipingCalculation); + var succesfullyRemovedData = calculationsFolder.ParentFailureMechanism.Calculations.Remove(nodeData.WrappedData); calculationsFolder.ParentFailureMechanism.NotifyObservers(); return succesfullyRemovedData; } @@ -89,18 +89,18 @@ protected override void OnNodeRenamed(PipingCalculationContext pipingCalculationContext, string newName) { - pipingCalculationContext.WrappedPipingCalculation.Name = newName; - pipingCalculationContext.WrappedPipingCalculation.NotifyObservers(); + pipingCalculationContext.WrappedData.Name = newName; + pipingCalculationContext.WrappedData.NotifyObservers(); } protected override ContextMenuStrip GetContextMenu(ITreeNode sender, PipingCalculationContext nodeData) { - PipingCalculation calculation = nodeData.WrappedPipingCalculation; + PipingCalculation calculation = nodeData.WrappedData; var contextMenu = new ContextMenuStrip(); contextMenu.AddMenuItem(Resources.Validate, null, - null, + Resources.ValidationIcon, (o, args) => { PipingCalculationService.Validate(calculation); Index: Ringtoets/Piping/src/Ringtoets.Piping.Forms/NodePresenters/PipingCalculationGroupContextNodePresenter.cs =================================================================== diff -u --- Ringtoets/Piping/src/Ringtoets.Piping.Forms/NodePresenters/PipingCalculationGroupContextNodePresenter.cs (revision 0) +++ Ringtoets/Piping/src/Ringtoets.Piping.Forms/NodePresenters/PipingCalculationGroupContextNodePresenter.cs (revision 495647ee1c652fecc15eea7fefeab29ae01347fe) @@ -0,0 +1,177 @@ +using System; +using System.Collections; +using System.Linq; +using System.Windows.Forms; + +using Core.Common.Base.Workflow; +using Core.Common.Controls; + +using Ringtoets.Common.Forms.Extensions; +using Ringtoets.Common.Forms.NodePresenters; +using Ringtoets.Piping.Data; +using Ringtoets.Piping.Data.Properties; +using Ringtoets.Piping.Forms.Helpers; +using Ringtoets.Piping.Forms.PresentationObjects; +using Ringtoets.Piping.Service; + +using RingtoetsFormsResources = Ringtoets.Common.Forms.Properties.Resources; +using PipingFormsResources = Ringtoets.Piping.Forms.Properties.Resources; + +namespace Ringtoets.Piping.Forms.NodePresenters +{ + /// + /// Node presenter class for instances. + /// + public class PipingCalculationGroupContextNodePresenter : RingtoetsNodePresenterBase + { + /// + /// Injection points for a method to cause an to be scheduled for execution. + /// + public Action RunActivityAction { private get; set; } + + public override bool CanRenameNode(ITreeNode node) + { + return true; + } + + public override bool CanRenameNodeTo(ITreeNode node, string newName) + { + return true; + } + + protected override void UpdateNode(ITreeNode parentNode, ITreeNode node, PipingCalculationGroupContext nodeData) + { + node.Text = nodeData.WrappedData.Name; + node.Image = PipingFormsResources.FolderIcon; + } + + protected override void OnNodeRenamed(PipingCalculationGroupContext nodeData, string newName) + { + nodeData.WrappedData.Name = newName; + nodeData.NotifyObservers(); + } + + protected override bool CanRemove(object parentNodeData, PipingCalculationGroupContext nodeData) + { + var failureMechanism = parentNodeData as PipingFailureMechanism; + if (failureMechanism != null) + { + return failureMechanism.Calculations.Contains(nodeData.WrappedData); + } + + var group = parentNodeData as PipingCalculationGroupContext; + if (group != null) + { + return group.WrappedData.Children.Contains(nodeData.WrappedData); + } + + return base.CanRemove(parentNodeData, nodeData); + } + + protected override bool RemoveNodeData(object parentNodeData, PipingCalculationGroupContext nodeData) + { + var failureMechanism = parentNodeData as PipingFailureMechanism; + if (failureMechanism != null) + { + var removeNodeData = failureMechanism.Calculations.Remove(nodeData.WrappedData); + failureMechanism.NotifyObservers(); + return removeNodeData; + } + + var group = parentNodeData as PipingCalculationGroupContext; + if (group != null) + { + var removeNodeData = group.WrappedData.Children.Remove(nodeData.WrappedData); + group.NotifyObservers(); + return removeNodeData; + } + + return base.RemoveNodeData(parentNodeData, nodeData); + } + + protected override ContextMenuStrip GetContextMenu(ITreeNode sender, PipingCalculationGroupContext nodeData) + { + var rootMenu = new ContextMenuStrip(); + + var group = nodeData.WrappedData; + rootMenu.AddMenuItem("Map toevoegen", + "Voeg een nieuwe berekeningsmap toe aan deze berekeningsmap.", + PipingFormsResources.AddFolderIcon, (o, args) => + { + var newGroup = new PipingCalculationGroup + { + Name = NamingHelper.GetUniqueName(group.Children, Resources.PipingCalculationGroup_DefaultName, c => c.Name) + }; + group.Children.Add(newGroup); + nodeData.NotifyObservers(); + }); + rootMenu.AddMenuItem("Berekening toevoegen", + "Voeg een nieuwe berekening toe aan deze berekeningsmap.", + PipingFormsResources.PipingIcon, (o, args) => + { + var calculation = new PipingCalculation + { + Name = NamingHelper.GetUniqueName(group.Children, Resources.PipingCalculation_DefaultName, c => c.Name) + }; + group.Children.Add(calculation); + nodeData.NotifyObservers(); + }); + rootMenu.AddMenuItem("Valideren", + "Valideer alle berekeningen binnen deze berekeningsmap.", + PipingFormsResources.ValidationIcon, (o, args) => + { + foreach (PipingCalculation calculation in group.Children.GetPipingCalculations()) + { + PipingCalculationService.Validate(calculation); + } + }); + rootMenu.AddMenuItem("Alles be&rekenen", + "Valideer en voer alle berekeningen binnen deze berekeningsmap uit.", + RingtoetsFormsResources.CalculateAllIcon, (o, args) => + { + foreach (PipingCalculation calc in group.GetPipingCalculations()) + { + RunActivityAction(new PipingCalculationActivity(calc)); + } + }); + rootMenu.AddMenuItem("&Wis alle uitvoer", + "Wis de uitvoer van alle berekeningen binnen deze berekeningsmap.", + RingtoetsFormsResources.ClearIcon, (o, args) => + { + foreach (PipingCalculation calc in group.GetPipingCalculations().Where(c => c.HasOutput)) + { + calc.ClearOutput(); + calc.NotifyObservers(); + } + }); + + return rootMenu; + } + + protected override IEnumerable GetChildNodeObjects(PipingCalculationGroupContext nodeData) + { + foreach (IPipingCalculationItem item in nodeData.WrappedData.Children) + { + var calculation = item as PipingCalculation; + var group = item as PipingCalculationGroup; + + if (calculation != null) + { + yield return new PipingCalculationContext(calculation, + nodeData.AvailablePipingSurfaceLines, + nodeData.AvailablePipingSoilProfiles); + } + else if (group != null) + { + yield return new PipingCalculationGroupContext(group, + nodeData.AvailablePipingSurfaceLines, + nodeData.AvailablePipingSoilProfiles); + } + else + { + yield return item; + } + } + } + } +} \ No newline at end of file Index: Ringtoets/Piping/src/Ringtoets.Piping.Forms/NodePresenters/PipingFailureMechanismNodePresenter.cs =================================================================== diff -u -re388ea76d1d044298cc89156c8744fbea1bcb736 -r495647ee1c652fecc15eea7fefeab29ae01347fe --- Ringtoets/Piping/src/Ringtoets.Piping.Forms/NodePresenters/PipingFailureMechanismNodePresenter.cs (.../PipingFailureMechanismNodePresenter.cs) (revision e388ea76d1d044298cc89156c8744fbea1bcb736) +++ Ringtoets/Piping/src/Ringtoets.Piping.Forms/NodePresenters/PipingFailureMechanismNodePresenter.cs (.../PipingFailureMechanismNodePresenter.cs) (revision 495647ee1c652fecc15eea7fefeab29ae01347fe) @@ -49,17 +49,28 @@ { var rootMenu = new ContextMenuStrip(); - rootMenu.AddMenuItem(Resources.PipingFailureMechanism_Add_Piping_Calculation, - Resources.PipingFailureMechanism_Add_Piping_Calculation_Tooltip, + rootMenu.AddMenuItem(Resources.PipingFailureMechanism_Add_PipingCalculation, + Resources.PipingFailureMechanism_Add_PipingCalculation_Tooltip, Resources.PipingIcon, (o, args) => { var calculation = new PipingCalculation { - Name = NamingHelper.GetUniqueName(failureMechanism.Calculations, PipingDataResources.PipingCalculationData_DefaultName, pd => pd.Name) + Name = NamingHelper.GetUniqueName(failureMechanism.Calculations, PipingDataResources.PipingCalculation_DefaultName, c => c.Name) }; failureMechanism.Calculations.Add(calculation); failureMechanism.NotifyObservers(); }); + rootMenu.AddMenuItem(Resources.PipingFailureMechanism_Add_PipingCalculationGroup, + Resources.PipingFailureMechanism_Add_PipingCalculationGroup_Tooltip, + Resources.AddFolderIcon, (o, args) => + { + var calculation = new PipingCalculationGroup + { + Name = NamingHelper.GetUniqueName(failureMechanism.Calculations, PipingDataResources.PipingCalculationGroup_DefaultName, c => c.Name) + }; + failureMechanism.Calculations.Add(calculation); + failureMechanism.NotifyObservers(); + }); rootMenu.AddMenuItem(RingtoetsCommonFormsResources.Calculate_all, Resources.PipingFailureMechanism_Calculate_Tooltip, RingtoetsCommonFormsResources.CalculateAllIcon, (o, args) => Index: Ringtoets/Piping/src/Ringtoets.Piping.Forms/PresentationObjects/PipingCalculationContext.cs =================================================================== diff -u -rfb32e3411873a7b4c567792b9f335eba462e2702 -r495647ee1c652fecc15eea7fefeab29ae01347fe --- Ringtoets/Piping/src/Ringtoets.Piping.Forms/PresentationObjects/PipingCalculationContext.cs (.../PipingCalculationContext.cs) (revision fb32e3411873a7b4c567792b9f335eba462e2702) +++ Ringtoets/Piping/src/Ringtoets.Piping.Forms/PresentationObjects/PipingCalculationContext.cs (.../PipingCalculationContext.cs) (revision 495647ee1c652fecc15eea7fefeab29ae01347fe) @@ -1,67 +1,31 @@ using System.Collections.Generic; -using System.Linq; -using Core.Common.Base; using Ringtoets.Piping.Data; namespace Ringtoets.Piping.Forms.PresentationObjects { /// - /// Presentation object for all data required to configure an instance of + /// Presentation object for all data required to configure an instance of /// in order to prepare it for performing a calculation. /// - public class PipingCalculationContext : IObservable + public class PipingCalculationContext : PipingContext { /// /// Initializes a new instance of the class. /// - public PipingCalculationContext() - { - AvailablePipingSurfaceLines = Enumerable.Empty(); - AvailablePipingSoilProfiles = Enumerable.Empty(); - } + /// The instance wrapped by this context object. + /// The surface lines available within the piping context. + /// The soil profiles available within the piping context. + public PipingCalculationContext(PipingCalculation calculation, + IEnumerable surfaceLines, + IEnumerable soilProfiles) + : base(calculation, surfaceLines, soilProfiles) {} /// - /// Gets or sets the piping data to be configured. - /// - public PipingCalculation WrappedPipingCalculation { get; set; } - - /// - /// Gets or sets the available piping surface lines in order for the user to select - /// one to set . - /// - public IEnumerable AvailablePipingSurfaceLines { get; set; } - - /// - /// Gets or sets the available piping soil profiles in order for the user to select - /// one to set . - /// - public IEnumerable AvailablePipingSoilProfiles { get; set; } - - #region IObservable - - public void Attach(IObserver observer) - { - WrappedPipingCalculation.Attach(observer); - } - - public void Detach(IObserver observer) - { - WrappedPipingCalculation.Detach(observer); - } - - public void NotifyObservers() - { - WrappedPipingCalculation.NotifyObservers(); - } - - #endregion - - /// /// Clears the output of the . /// public void ClearOutput() { - WrappedPipingCalculation.ClearOutput(); + WrappedData.ClearOutput(); } } } \ No newline at end of file Index: Ringtoets/Piping/src/Ringtoets.Piping.Forms/PresentationObjects/PipingCalculationGroupContext.cs =================================================================== diff -u --- Ringtoets/Piping/src/Ringtoets.Piping.Forms/PresentationObjects/PipingCalculationGroupContext.cs (revision 0) +++ Ringtoets/Piping/src/Ringtoets.Piping.Forms/PresentationObjects/PipingCalculationGroupContext.cs (revision 495647ee1c652fecc15eea7fefeab29ae01347fe) @@ -0,0 +1,27 @@ +using System.Collections.Generic; + +using Ringtoets.Piping.Data; + +namespace Ringtoets.Piping.Forms.PresentationObjects +{ + /// + /// Presentation object for all data required to configure an instance of + /// in order be able to create configurable piping calculations. + /// + public class PipingCalculationGroupContext : PipingContext + { + /// + /// Initializes a new instance of the class. + /// + /// The instance wrapped by this context object. + /// The surface lines available within the piping context. + /// The soil profiles available within the piping context. + public PipingCalculationGroupContext(PipingCalculationGroup group, + IEnumerable surfaceLines, + IEnumerable soilProfiles) : + base(group, surfaceLines, soilProfiles) + { + + } + } +} \ No newline at end of file Index: Ringtoets/Piping/src/Ringtoets.Piping.Forms/PresentationObjects/PipingCalculationsTreeFolder.cs =================================================================== diff -u -red0b4ea830beb801bcc0e3eb5b28993001ed2981 -r495647ee1c652fecc15eea7fefeab29ae01347fe --- Ringtoets/Piping/src/Ringtoets.Piping.Forms/PresentationObjects/PipingCalculationsTreeFolder.cs (.../PipingCalculationsTreeFolder.cs) (revision ed0b4ea830beb801bcc0e3eb5b28993001ed2981) +++ Ringtoets/Piping/src/Ringtoets.Piping.Forms/PresentationObjects/PipingCalculationsTreeFolder.cs (.../PipingCalculationsTreeFolder.cs) (revision 495647ee1c652fecc15eea7fefeab29ae01347fe) @@ -28,15 +28,19 @@ foreach (var calculationItem in failureMechanism.Calculations) { var pipingCalculation = calculationItem as PipingCalculation; + var pipingCalculationGroup = calculationItem as PipingCalculationGroup; if (pipingCalculation != null) { - yield return new PipingCalculationContext - { - WrappedPipingCalculation = pipingCalculation, - AvailablePipingSurfaceLines = failureMechanism.SurfaceLines, - AvailablePipingSoilProfiles = failureMechanism.SoilProfiles - }; + yield return new PipingCalculationContext(pipingCalculation, + failureMechanism.SurfaceLines, + failureMechanism.SoilProfiles); } + else if (pipingCalculationGroup != null) + { + yield return new PipingCalculationGroupContext(pipingCalculationGroup, + failureMechanism.SurfaceLines, + failureMechanism.SoilProfiles); + } else { yield return calculationItem; Index: Ringtoets/Piping/src/Ringtoets.Piping.Forms/PresentationObjects/PipingContext.cs =================================================================== diff -u --- Ringtoets/Piping/src/Ringtoets.Piping.Forms/PresentationObjects/PipingContext.cs (revision 0) +++ Ringtoets/Piping/src/Ringtoets.Piping.Forms/PresentationObjects/PipingContext.cs (revision 495647ee1c652fecc15eea7fefeab29ae01347fe) @@ -0,0 +1,101 @@ +using System; +using System.Collections.Generic; + +using Core.Common.Base; + +using Ringtoets.Piping.Data; +using Ringtoets.Piping.Forms.Properties; + +namespace Ringtoets.Piping.Forms.PresentationObjects +{ + /// + /// Presentation object representing all required piping knowledge to configure and create + /// piping related objects. It'll delegate observable behavior to the wrapped data object. + /// + public abstract class PipingContext : IObservable where T : IObservable + { + /// + /// Initializes a new instance of the class. + /// + /// The concrete data instance wrapped by this context object. + /// The surface lines available within the piping context. + /// The soil profiles available within the piping context. + /// When any input parameter is null. + protected PipingContext( + T wrappedData, + IEnumerable surfaceLines, + IEnumerable soilProfiles) + { + AssertInputsAreNotNull(wrappedData, surfaceLines, soilProfiles); + + WrappedData = wrappedData; + AvailablePipingSurfaceLines = surfaceLines; + AvailablePipingSoilProfiles = soilProfiles; + } + + /// + /// Gets the available piping surface lines in order for the user to select one to + /// set . + /// + public IEnumerable AvailablePipingSurfaceLines { get; private set; } + + /// + /// Gets the available piping soil profiles in order for the user to select one to + /// set . + /// + public IEnumerable AvailablePipingSoilProfiles { get; private set; } + + /// + /// Gets the concrete data instance wrapped by this context object. + /// + public T WrappedData { get; private set; } + + /// + /// Asserts the inputs are not null. + /// + /// The wrapped data. + /// The surface lines. + /// The soil profiles. + /// When any input parameter is null. + private static void AssertInputsAreNotNull(object wrappedData, object surfaceLines, object soilProfiles) + { + if (wrappedData == null) + { + var message = String.Format(Resources.PipingContext_AssertInputsAreNotNull_DataDescription_0_cannot_be_null, + Resources.PipingContext_DataDescription_WrappedData); + throw new ArgumentNullException("wrappedData", message); + } + if (surfaceLines == null) + { + var message = String.Format(Resources.PipingContext_AssertInputsAreNotNull_DataDescription_0_cannot_be_null, + Resources.PipingContext_DataDescription_Surfacelines); + throw new ArgumentNullException("surfaceLines", message); + } + if (soilProfiles == null) + { + var message = String.Format(Resources.PipingContext_AssertInputsAreNotNull_DataDescription_0_cannot_be_null, + Resources.PipingContext_DataDescription_Soilprofiles); + throw new ArgumentNullException("soilProfiles", message); + } + } + + #region IObservable + + public void Attach(IObserver observer) + { + WrappedData.Attach(observer); + } + + public void Detach(IObserver observer) + { + WrappedData.Detach(observer); + } + + public void NotifyObservers() + { + WrappedData.NotifyObservers(); + } + + #endregion + } +} \ No newline at end of file Index: Ringtoets/Piping/src/Ringtoets.Piping.Forms/Properties/Resources.Designer.cs =================================================================== diff -u -rfb32e3411873a7b4c567792b9f335eba462e2702 -r495647ee1c652fecc15eea7fefeab29ae01347fe --- Ringtoets/Piping/src/Ringtoets.Piping.Forms/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision fb32e3411873a7b4c567792b9f335eba462e2702) +++ Ringtoets/Piping/src/Ringtoets.Piping.Forms/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision 495647ee1c652fecc15eea7fefeab29ae01347fe) @@ -61,6 +61,16 @@ } /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + public static System.Drawing.Bitmap AddFolderIcon { + get { + object obj = ResourceManager.GetObject("AddFolderIcon", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// /// Looks up a localized string similar to Berekenen. /// public static string Calculate { @@ -234,6 +244,24 @@ } /// + /// Looks up a localized string similar to Naam van de piping berekening.. + /// + public static string PipingCalculation_Name_Description { + get { + return ResourceManager.GetString("PipingCalculation_Name_Description", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Naam. + /// + public static string PipingCalculation_Name_DisplayName { + get { + return ResourceManager.GetString("PipingCalculation_Name_DisplayName", resourceCulture); + } + } + + /// /// Looks up a localized string similar to Piping. /// public static string PipingCalculationContextProperties_DisplayName { @@ -243,24 +271,33 @@ } /// - /// Looks up a localized string similar to Naam van de piping berekening.. + /// Looks up a localized string similar to Naam van de berekeningsmap.. /// - public static string PipingCalculationData_Name_Description { + public static string PipingCalculationGroup_Name_Description { get { - return ResourceManager.GetString("PipingCalculationData_Name_Description", resourceCulture); + return ResourceManager.GetString("PipingCalculationGroup_Name_Description", resourceCulture); } } /// /// Looks up a localized string similar to Naam. /// - public static string PipingCalculationData_Name_DisplayName { + public static string PipingCalculationGroup_Name_DisplayName { get { - return ResourceManager.GetString("PipingCalculationData_Name_DisplayName", resourceCulture); + return ResourceManager.GetString("PipingCalculationGroup_Name_DisplayName", resourceCulture); } } /// + /// Looks up a localized string similar to Berekeningsmap. + /// + public static string PipingCalculationGroupContextProperties_DisplayName { + get { + return ResourceManager.GetString("PipingCalculationGroupContextProperties_DisplayName", resourceCulture); + } + } + + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// public static System.Drawing.Bitmap PipingCalculationReportIcon { @@ -271,24 +308,78 @@ } /// + /// Looks up a localized string similar to {0} mag niet 'null' zijn.. + /// + public static string PipingContext_AssertInputsAreNotNull_DataDescription_0_cannot_be_null { + get { + return ResourceManager.GetString("PipingContext_AssertInputsAreNotNull_DataDescription_0_cannot_be_null", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to De verzameling van ondergrondschematiseringen. + /// + public static string PipingContext_DataDescription_Soilprofiles { + get { + return ResourceManager.GetString("PipingContext_DataDescription_Soilprofiles", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to De verzameling van profielmetingen. + /// + public static string PipingContext_DataDescription_Surfacelines { + get { + return ResourceManager.GetString("PipingContext_DataDescription_Surfacelines", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Het piping data object. + /// + public static string PipingContext_DataDescription_WrappedData { + get { + return ResourceManager.GetString("PipingContext_DataDescription_WrappedData", resourceCulture); + } + } + + /// /// Looks up a localized string similar to Berekening toevoegen. /// - public static string PipingFailureMechanism_Add_Piping_Calculation { + public static string PipingFailureMechanism_Add_PipingCalculation { get { - return ResourceManager.GetString("PipingFailureMechanism_Add_Piping_Calculation", resourceCulture); + return ResourceManager.GetString("PipingFailureMechanism_Add_PipingCalculation", resourceCulture); } } /// /// Looks up a localized string similar to Voeg een nieuwe piping berekening toe aan het faalmechanisme.. /// - public static string PipingFailureMechanism_Add_Piping_Calculation_Tooltip { + public static string PipingFailureMechanism_Add_PipingCalculation_Tooltip { get { - return ResourceManager.GetString("PipingFailureMechanism_Add_Piping_Calculation_Tooltip", resourceCulture); + return ResourceManager.GetString("PipingFailureMechanism_Add_PipingCalculation_Tooltip", resourceCulture); } } /// + /// Looks up a localized string similar to Map toevoegen. + /// + public static string PipingFailureMechanism_Add_PipingCalculationGroup { + get { + return ResourceManager.GetString("PipingFailureMechanism_Add_PipingCalculationGroup", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Voeg een nieuwe berekeningsmap toe aan het faalmechanisme.. + /// + public static string PipingFailureMechanism_Add_PipingCalculationGroup_Tooltip { + get { + return ResourceManager.GetString("PipingFailureMechanism_Add_PipingCalculationGroup_Tooltip", resourceCulture); + } + } + + /// /// Looks up a localized string similar to Valideer en voer alle berekeningen binnen het piping faalmechanisme uit.. /// public static string PipingFailureMechanism_Calculate_Tooltip { @@ -768,7 +859,7 @@ } /// - /// Looks up a localized string similar to Veiligheidsfactor heave. + /// Looks up a localized string similar to Veiligheidsfactor heave.. /// public static string PipingOutput_HeaveFactorOfSafety_Description { get { @@ -786,7 +877,7 @@ } /// - /// Looks up a localized string similar to Z-waarde heave. + /// Looks up a localized string similar to Z-waarde heave.. /// public static string PipingOutput_HeaveZValue_Description { get { @@ -813,7 +904,7 @@ } /// - /// Looks up a localized string similar to Veiligheidsfactor Sellmeijer. + /// Looks up a localized string similar to Veiligheidsfactor Sellmeijer.. /// public static string PipingOutput_SellmeijerFactorOfSafety_Description { get { @@ -831,7 +922,7 @@ } /// - /// Looks up a localized string similar to Z-waarde Sellmeijer. + /// Looks up a localized string similar to Z-waarde Sellmeijer.. /// public static string PipingOutput_SellmeijerZValue_Description { get { @@ -867,7 +958,7 @@ } /// - /// Looks up a localized string similar to Z-waarde opbarsten. + /// Looks up a localized string similar to Z-waarde opbarsten.. /// public static string PipingOutput_UpliftZValue_Description { get { @@ -1069,7 +1160,7 @@ } /// - /// Looks up a localized string similar to Naam van de profielmeting. + /// Looks up a localized string similar to Naam van de profielmeting.. /// public static string RingtoetsPipingSurfaceLine_Name_Description { get { @@ -1130,5 +1221,15 @@ return ResourceManager.GetString("Validate", resourceCulture); } } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + public static System.Drawing.Bitmap ValidationIcon { + get { + object obj = ResourceManager.GetObject("ValidationIcon", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } } } Index: Ringtoets/Piping/src/Ringtoets.Piping.Forms/Properties/Resources.resx =================================================================== diff -u -rfb32e3411873a7b4c567792b9f335eba462e2702 -r495647ee1c652fecc15eea7fefeab29ae01347fe --- Ringtoets/Piping/src/Ringtoets.Piping.Forms/Properties/Resources.resx (.../Resources.resx) (revision fb32e3411873a7b4c567792b9f335eba462e2702) +++ Ringtoets/Piping/src/Ringtoets.Piping.Forms/Properties/Resources.resx (.../Resources.resx) (revision 495647ee1c652fecc15eea7fefeab29ae01347fe) @@ -266,13 +266,13 @@ Piping resultaat - Veiligheidsfactor heave + Veiligheidsfactor heave. Veiligheidsfactor heave - Z-waarde heave + Z-waarde heave. Z-waarde heave @@ -281,13 +281,13 @@ Piping resultaten - Veiligheidsfactor Sellmeijer + Veiligheidsfactor Sellmeijer. Veiligheidsfactor Sellmeijer - Z-waarde Sellmeijer + Z-waarde Sellmeijer. Z-waarde Sellmeijer @@ -299,7 +299,7 @@ Veiligheidsfactor opbarsten - Z-waarde opbarsten + Z-waarde opbarsten. Z-waarde opbarsten @@ -338,7 +338,7 @@ ..\Resources\chart_curve.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - Naam van de profielmeting + Naam van de profielmeting. Naam @@ -358,10 +358,10 @@ Profielmeting - + Naam van de piping berekening. - + Naam @@ -391,10 +391,10 @@ Ondergrondschematisering - + Berekening toevoegen - + Voeg een nieuwe piping berekening toe aan het faalmechanisme. @@ -472,4 +472,37 @@ ..\Resources\control-record.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\folder_add.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Map toevoegen + + + Voeg een nieuwe berekeningsmap toe aan het faalmechanisme. + + + ..\Resources\tick.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Berekeningsmap + + + Naam van de berekeningsmap. + + + Naam + + + {0} mag niet 'null' zijn. + + + Het piping data object + + + De verzameling van profielmetingen + + + De verzameling van ondergrondschematiseringen + \ No newline at end of file Index: Ringtoets/Piping/src/Ringtoets.Piping.Forms/PropertyClasses/PipingCalculationContextProperties.cs =================================================================== diff -u -rfb32e3411873a7b4c567792b9f335eba462e2702 -r495647ee1c652fecc15eea7fefeab29ae01347fe --- Ringtoets/Piping/src/Ringtoets.Piping.Forms/PropertyClasses/PipingCalculationContextProperties.cs (.../PipingCalculationContextProperties.cs) (revision fb32e3411873a7b4c567792b9f335eba462e2702) +++ Ringtoets/Piping/src/Ringtoets.Piping.Forms/PropertyClasses/PipingCalculationContextProperties.cs (.../PipingCalculationContextProperties.cs) (revision 495647ee1c652fecc15eea7fefeab29ae01347fe) @@ -10,18 +10,18 @@ public class PipingCalculationContextProperties : ObjectProperties { [ResourcesCategory(typeof(Resources), "Categories_General")] - [ResourcesDisplayName(typeof(Resources), "PipingCalculationData_Name_DisplayName")] - [ResourcesDescription(typeof(Resources), "PipingCalculationData_Name_Description")] + [ResourcesDisplayName(typeof(Resources), "PipingCalculation_Name_DisplayName")] + [ResourcesDescription(typeof(Resources), "PipingCalculation_Name_Description")] public string Name { get { - return data.WrappedPipingCalculation.Name; + return data.WrappedData.Name; } set { - data.WrappedPipingCalculation.Name = value; - data.WrappedPipingCalculation.NotifyObservers(); + data.WrappedData.Name = value; + data.WrappedData.NotifyObservers(); } } } Index: Ringtoets/Piping/src/Ringtoets.Piping.Forms/PropertyClasses/PipingCalculationGroupContextProperties.cs =================================================================== diff -u --- Ringtoets/Piping/src/Ringtoets.Piping.Forms/PropertyClasses/PipingCalculationGroupContextProperties.cs (revision 0) +++ Ringtoets/Piping/src/Ringtoets.Piping.Forms/PropertyClasses/PipingCalculationGroupContextProperties.cs (revision 495647ee1c652fecc15eea7fefeab29ae01347fe) @@ -0,0 +1,32 @@ +using Core.Common.Gui; +using Core.Common.Utils; + +using Ringtoets.Piping.Data; +using Ringtoets.Piping.Forms.PresentationObjects; +using Ringtoets.Piping.Forms.Properties; + +namespace Ringtoets.Piping.Forms.PropertyClasses +{ + /// + /// Object properties class for + /// + [ResourcesDisplayName(typeof(Resources), "PipingCalculationGroupContextProperties_DisplayName")] + public class PipingCalculationGroupContextProperties : ObjectProperties + { + [ResourcesCategory(typeof(Resources), "Categories_General")] + [ResourcesDisplayName(typeof(Resources), "PipingCalculationGroup_Name_DisplayName")] + [ResourcesDescription(typeof(Resources), "PipingCalculationGroup_Name_Description")] + public string Name + { + get + { + return data.WrappedData.Name; + } + set + { + data.WrappedData.Name = value; + data.NotifyObservers(); + } + } + } +} \ No newline at end of file Index: Ringtoets/Piping/src/Ringtoets.Piping.Forms/Resources/folder_add.png =================================================================== diff -u Binary files differ Index: Ringtoets/Piping/src/Ringtoets.Piping.Forms/Resources/tick.png =================================================================== diff -u Binary files differ Index: Ringtoets/Piping/src/Ringtoets.Piping.Forms/Ringtoets.Piping.Forms.csproj =================================================================== diff -u -r2afad189e942019ef3da47d72e134f3a4c6c7884 -r495647ee1c652fecc15eea7fefeab29ae01347fe --- Ringtoets/Piping/src/Ringtoets.Piping.Forms/Ringtoets.Piping.Forms.csproj (.../Ringtoets.Piping.Forms.csproj) (revision 2afad189e942019ef3da47d72e134f3a4c6c7884) +++ Ringtoets/Piping/src/Ringtoets.Piping.Forms/Ringtoets.Piping.Forms.csproj (.../Ringtoets.Piping.Forms.csproj) (revision 495647ee1c652fecc15eea7fefeab29ae01347fe) @@ -71,7 +71,9 @@ + + @@ -80,6 +82,8 @@ Resources.resx + + @@ -168,8 +172,11 @@ + + + Index: Ringtoets/Piping/src/Ringtoets.Piping.Plugin/PipingGuiPlugin.cs =================================================================== diff -u -rbc238ea43fae81b8a49aa2bdb2c8349815c46039 -r495647ee1c652fecc15eea7fefeab29ae01347fe --- Ringtoets/Piping/src/Ringtoets.Piping.Plugin/PipingGuiPlugin.cs (.../PipingGuiPlugin.cs) (revision bc238ea43fae81b8a49aa2bdb2c8349815c46039) +++ Ringtoets/Piping/src/Ringtoets.Piping.Plugin/PipingGuiPlugin.cs (.../PipingGuiPlugin.cs) (revision 495647ee1c652fecc15eea7fefeab29ae01347fe) @@ -24,6 +24,7 @@ public override IEnumerable GetPropertyInfos() { yield return new PropertyInfo(); + yield return new PropertyInfo(); yield return new PropertyInfo(); yield return new PropertyInfo(); yield return new PropertyInfo(); @@ -36,6 +37,7 @@ { RunActivityAction = Gui.ActivityRunner.Enqueue }; + yield return new PipingCalculationGroupContextNodePresenter(); yield return new PipingInputContextNodePresenter(); yield return new PipingFailureMechanismNodePresenter { Index: Ringtoets/Piping/test/Ringtoets.Piping.Data.Test/PipingCalculationGroupTest.cs =================================================================== diff -u -red0b4ea830beb801bcc0e3eb5b28993001ed2981 -r495647ee1c652fecc15eea7fefeab29ae01347fe --- Ringtoets/Piping/test/Ringtoets.Piping.Data.Test/PipingCalculationGroupTest.cs (.../PipingCalculationGroupTest.cs) (revision ed0b4ea830beb801bcc0e3eb5b28993001ed2981) +++ Ringtoets/Piping/test/Ringtoets.Piping.Data.Test/PipingCalculationGroupTest.cs (.../PipingCalculationGroupTest.cs) (revision 495647ee1c652fecc15eea7fefeab29ae01347fe) @@ -18,7 +18,7 @@ // Assert Assert.IsInstanceOf(group); Assert.IsInstanceOf(group); - Assert.AreEqual("Berekening groep", group.Name); + Assert.AreEqual("Nieuwe map", group.Name); Assert.IsFalse(group.HasOutput); CollectionAssert.IsEmpty(group.Children); } Index: Ringtoets/Piping/test/Ringtoets.Piping.Data.Test/PipingCalculationTest.cs =================================================================== diff -u -red0b4ea830beb801bcc0e3eb5b28993001ed2981 -r495647ee1c652fecc15eea7fefeab29ae01347fe --- Ringtoets/Piping/test/Ringtoets.Piping.Data.Test/PipingCalculationTest.cs (.../PipingCalculationTest.cs) (revision ed0b4ea830beb801bcc0e3eb5b28993001ed2981) +++ Ringtoets/Piping/test/Ringtoets.Piping.Data.Test/PipingCalculationTest.cs (.../PipingCalculationTest.cs) (revision 495647ee1c652fecc15eea7fefeab29ae01347fe) @@ -24,7 +24,7 @@ // Assert Assert.IsInstanceOf(calculation); - Assert.AreEqual("Berekening", calculation.Name); + Assert.AreEqual("Nieuwe berekening", calculation.Name); Assert.AreEqual("Commentaar", calculation.Comments.Name); Assert.IsInstanceOf(calculation.InputParameters); Index: Ringtoets/Piping/test/Ringtoets.Piping.Data.TestUtil/PipingCalculationFactory.cs =================================================================== diff -u --- Ringtoets/Piping/test/Ringtoets.Piping.Data.TestUtil/PipingCalculationFactory.cs (revision 0) +++ Ringtoets/Piping/test/Ringtoets.Piping.Data.TestUtil/PipingCalculationFactory.cs (revision 495647ee1c652fecc15eea7fefeab29ae01347fe) @@ -0,0 +1,74 @@ +using System; + +namespace Ringtoets.Piping.Data.TestUtil +{ + public static class PipingCalculationFactory + { + public static PipingCalculation CreateCalculationWithInvalidData() + { + return new PipingCalculation(); + } + + public static PipingCalculation CreateCalculationWithValidInput() + { + var random = new Random(22); + var soilProfile = new PipingSoilProfile(String.Empty, random.NextDouble(), new[] + { + new PipingSoilLayer(random.NextDouble()) + { + IsAquifer = true + } + }); + return new PipingCalculation + { + InputParameters = + { + AssessmentLevel = 1.0, + BeddingAngle = 1.0, + DampingFactorExit = + { + Mean = 1.0 + }, + DarcyPermeability = + { + Mean = 1.0 + }, + Diameter70 = + { + Mean = 1.0 + }, + ExitPointXCoordinate = 1.0, + Gravity = 1.0, + MeanDiameter70 = 1.0, + PiezometricHeadExit = 1.0, + PiezometricHeadPolder = 1.0, + PhreaticLevelExit = + { + Mean = 2.0 + }, + SandParticlesVolumicWeight = 1.0, + SeepageLength = + { + Mean = 1.0 + }, + SellmeijerModelFactor = 1.0, + SellmeijerReductionFactor = 1.0, + ThicknessAquiferLayer = + { + Mean = 1.0 + }, + ThicknessCoverageLayer = + { + Mean = 1.0 + }, + UpliftModelFactor = 1.0, + WaterKinematicViscosity = 1.0, + WaterVolumetricWeight = 1.0, + WhitesDragCoefficient = 1.0, + SurfaceLine = new RingtoetsPipingSurfaceLine(), + SoilProfile = soilProfile + } + }; + } + } +} \ No newline at end of file Index: Ringtoets/Piping/test/Ringtoets.Piping.Data.TestUtil/Ringtoets.Piping.Data.TestUtil.csproj =================================================================== diff -u -r2f3973a8a6122be9d4c0a0db7a27dc3ca68580e3 -r495647ee1c652fecc15eea7fefeab29ae01347fe --- Ringtoets/Piping/test/Ringtoets.Piping.Data.TestUtil/Ringtoets.Piping.Data.TestUtil.csproj (.../Ringtoets.Piping.Data.TestUtil.csproj) (revision 2f3973a8a6122be9d4c0a0db7a27dc3ca68580e3) +++ Ringtoets/Piping/test/Ringtoets.Piping.Data.TestUtil/Ringtoets.Piping.Data.TestUtil.csproj (.../Ringtoets.Piping.Data.TestUtil.csproj) (revision 495647ee1c652fecc15eea7fefeab29ae01347fe) @@ -44,10 +44,15 @@ + + + {3bbfd65b-b277-4e50-ae6d-bd24c3434609} + Core.Common.Base + {CE994CC9-6F6A-48AC-B4BE-02C30A21F4DB} Ringtoets.Piping.Data Index: Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/NodePresenters/PipingCalculationContextNodePresenterTest.cs =================================================================== diff -u --- Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/NodePresenters/PipingCalculationContextNodePresenterTest.cs (revision 0) +++ Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/NodePresenters/PipingCalculationContextNodePresenterTest.cs (revision 495647ee1c652fecc15eea7fefeab29ae01347fe) @@ -0,0 +1,750 @@ +using System; +using System.ComponentModel; +using System.Linq; + +using Core.Common.Controls; +using Core.Common.Utils.Collections; +using Core.Common.TestUtils; +using System.Windows.Forms; +using Core.Common.Base; +using Core.Common.Base.Workflow; +using NUnit.Framework; +using Rhino.Mocks; + +using Ringtoets.Piping.Data; +using Ringtoets.Piping.Calculation.TestUtil; +using Ringtoets.Piping.Forms.NodePresenters; +using Ringtoets.Piping.Forms.PresentationObjects; + +using RingtoetsFormsResources = Ringtoets.Piping.Forms.Properties.Resources; + +namespace Ringtoets.Piping.Forms.Test.NodePresenters +{ + [TestFixture] + public class PipingCalculationContextNodePresenterTest + { + private MockRepository mockRepository; + + private const int contextMenuValidateIndex = 0; + private const int contextMenuCalculateIndex = 1; + private const int contextMenuClearIndex = 2; + + [SetUp] + public void SetUp() + { + mockRepository = new MockRepository(); + } + + [Test] + public void DefaultConstructor_ExpectedValues() + { + // Call + var nodePresenter = new PipingCalculationContextNodePresenter(); + + // Assert + Assert.IsInstanceOf(nodePresenter); + Assert.IsNull(nodePresenter.TreeView); + Assert.AreEqual(typeof(PipingCalculationContext), nodePresenter.NodeTagType); + } + + [Test] + public void UpdateNode_WithData_InitializeNode() + { + // Setup + const string nodeName = ""; + + var pipingNode = mockRepository.Stub(); + mockRepository.ReplayAll(); + + var nodePresenter = new PipingCalculationContextNodePresenter(); + + var calculation = new PipingCalculation + { + Name = nodeName + }; + var pipingCalculationContext = new PipingCalculationContext(calculation, + Enumerable.Empty(), + Enumerable.Empty()); + + // Call + nodePresenter.UpdateNode(null, pipingNode, pipingCalculationContext); + + // Assert + Assert.AreEqual(nodeName, pipingNode.Text); + TestHelper.AssertImagesAreEqual(RingtoetsFormsResources.PipingIcon, pipingNode.Image); + } + + [Test] + public void GetChildNodeObjects_WithOutputData_ReturnOutputChildNode() + { + // Setup + var nodeMock = mockRepository.StrictMock(); + mockRepository.ReplayAll(); + + var nodePresenter = new PipingCalculationContextNodePresenter(); + + var calculation = new PipingCalculation + { + Output = new PipingOutput(0.0, 0.0, 0.0, 0.0, 0.0, 0.0) + }; + var pipingCalculationContext = new PipingCalculationContext(calculation, + new[] + { + new RingtoetsPipingSurfaceLine() + }, + new[] + { + new TestPipingSoilProfile() + }); + + // Call + var children = nodePresenter.GetChildNodeObjects(pipingCalculationContext).OfType().ToArray(); + + // Assert + Assert.AreEqual(4, children.Length); + Assert.AreSame(pipingCalculationContext.WrappedData.Comments, children[0]); + var pipingInputContext = (PipingInputContext)children[1]; + Assert.AreSame(pipingCalculationContext.WrappedData.InputParameters, pipingInputContext.WrappedPipingInput); + CollectionAssert.AreEqual(pipingCalculationContext.AvailablePipingSurfaceLines, pipingInputContext.AvailablePipingSurfaceLines); + CollectionAssert.AreEqual(pipingCalculationContext.AvailablePipingSoilProfiles, pipingInputContext.AvailablePipingSoilProfiles); + Assert.AreSame(pipingCalculationContext.WrappedData.Output, children[2]); + Assert.AreSame(pipingCalculationContext.WrappedData.CalculationReport, children[3]); + mockRepository.VerifyAll(); // Expect no calls on tree node + } + + [Test] + public void GetChildNodeObjects_WithoutOutput_ReturnNoChildNodes() + { + // Setup + var nodeMock = mockRepository.StrictMock(); + mockRepository.ReplayAll(); + + var nodePresenter = new PipingCalculationContextNodePresenter(); + + var pipingCalculationContext = new PipingCalculationContext(new PipingCalculation(), + Enumerable.Empty(), + Enumerable.Empty()); + + + // Precondition + Assert.IsFalse(pipingCalculationContext.WrappedData.HasOutput); + + // Call + var children = nodePresenter.GetChildNodeObjects(pipingCalculationContext).OfType().ToArray(); + + // Assert + Assert.AreEqual(4, children.Length); + Assert.AreSame(pipingCalculationContext.WrappedData.Comments, children[0]); + var pipingInputContext = (PipingInputContext)children[1]; + Assert.AreSame(pipingCalculationContext.WrappedData.InputParameters, pipingInputContext.WrappedPipingInput); + CollectionAssert.AreEqual(pipingCalculationContext.AvailablePipingSurfaceLines, pipingInputContext.AvailablePipingSurfaceLines); + CollectionAssert.AreEqual(pipingCalculationContext.AvailablePipingSoilProfiles, pipingInputContext.AvailablePipingSoilProfiles); + + Assert.IsInstanceOf(children[2]); + Assert.IsInstanceOf(children[3]); + mockRepository.VerifyAll(); // Expect no calls on tree node + } + + [Test] + public void CanRenameNode_Always_ReturnTrue() + { + // Setup + var nodeMock = mockRepository.StrictMock(); + mockRepository.ReplayAll(); + + var nodePresenter = new PipingCalculationContextNodePresenter(); + + // Call + var renameAllowed = nodePresenter.CanRenameNode(nodeMock); + + // Assert + Assert.IsTrue(renameAllowed); + mockRepository.VerifyAll(); // Expect no calls on tree node + } + + [Test] + public void CanRenameNodeTo_Always_ReturnTrue() + { + // Setup + var nodeMock = mockRepository.StrictMock(); + mockRepository.ReplayAll(); + + var nodePresenter = new PipingCalculationContextNodePresenter(); + + // Call + var renameAllowed = nodePresenter.CanRenameNodeTo(nodeMock, ""); + + // Assert + Assert.IsTrue(renameAllowed); + mockRepository.ReplayAll(); // Expect no calls on tree node + } + + [Test] + public void OnNodeRenamed_Always_SetNewNameToPipingCalculation() + { + // Setup + var observerMock = mockRepository.StrictMock(); + observerMock.Expect(o => o.UpdateObserver()); + mockRepository.ReplayAll(); + + var calculation = new PipingCalculation + { + Name = "" + }; + var pipingCalculationsInputs = new PipingCalculationContext(calculation, + Enumerable.Empty(), + Enumerable.Empty()); + pipingCalculationsInputs.Attach(observerMock); + + var nodePresenter = new PipingCalculationContextNodePresenter(); + + // Call + const string newName = ""; + nodePresenter.OnNodeRenamed(pipingCalculationsInputs, newName); + + // Assert + Assert.AreEqual(newName, calculation.Name); + mockRepository.VerifyAll(); + } + + [Test] + public void OnNodeChecked_Always_DoNothing() + { + // Setup + var nodeMock = mockRepository.StrictMock(); + mockRepository.ReplayAll(); + + var nodePresenter = new PipingCalculationContextNodePresenter(); + + // Call + nodePresenter.OnNodeChecked(nodeMock); + + // Assert + mockRepository.VerifyAll(); // Expect no calls on tree node + } + + [Test] + public void CanDrag_Always_ReturnNone() + { + // Setup + var nodeData = new PipingCalculationContext(new PipingCalculation(), + Enumerable.Empty(), + Enumerable.Empty()); + + var nodePresenter = new PipingCalculationContextNodePresenter(); + + // Call + DragOperations dragAllowed = nodePresenter.CanDrag(nodeData); + + // Assert + Assert.AreEqual(DragOperations.None, dragAllowed); + } + + [Test] + public void CanDrop_Always_ReturnNone() + { + // Setup + var sourceMock = mockRepository.StrictMock(); + var targetMock = mockRepository.StrictMock(); + var dataMock = mockRepository.StrictMock(new PipingCalculation(), + Enumerable.Empty(), + Enumerable.Empty()); + mockRepository.ReplayAll(); + + var nodePresenter = new PipingCalculationContextNodePresenter(); + + // Call + DragOperations dropAllowed = nodePresenter.CanDrop(dataMock, sourceMock, targetMock, DragOperations.Move); + + // Assert + Assert.AreEqual(DragOperations.None, dropAllowed); + mockRepository.VerifyAll(); // Expect no calls on mockRepository. + } + + [Test] + public void CanInsert_Always_ReturnFalse() + { + // Setup + var sourceMock = mockRepository.StrictMock(); + var targetMock = mockRepository.StrictMock(); + var dataMock = mockRepository.StrictMock(new PipingCalculation(), + Enumerable.Empty(), + Enumerable.Empty()); + mockRepository.ReplayAll(); + + + + var nodePresenter = new PipingCalculationContextNodePresenter(); + + // Call + bool insertionAllowed = nodePresenter.CanInsert(dataMock, sourceMock, targetMock); + + // Assert + Assert.IsFalse(insertionAllowed); + mockRepository.VerifyAll(); // Expect no calls on arguments + } + + [Test] + public void OnDragDrop_Always_DoNothing() + { + // Setup + var sourceParentNodeMock = mockRepository.StrictMock(); + var targetParentNodeDataMock = mockRepository.StrictMock(); + var dataMock = mockRepository.StrictMock(new PipingCalculation(), + Enumerable.Empty(), + Enumerable.Empty()); + mockRepository.ReplayAll(); + + + + var nodePresenter = new PipingCalculationContextNodePresenter(); + + // Call + nodePresenter.OnDragDrop(dataMock, sourceParentNodeMock, targetParentNodeDataMock, DragOperations.Move, 2); + + // Assert + mockRepository.VerifyAll(); // Expect no calls on arguments + } + + [Test] + public void OnNodeSelected_Always_DoNothing() + { + // Setup + var dataMock = mockRepository.StrictMock(new PipingCalculation(), + Enumerable.Empty(), + Enumerable.Empty()); + mockRepository.ReplayAll(); + + var nodePresenter = new PipingCalculationContextNodePresenter(); + + // Call + nodePresenter.OnNodeSelected(dataMock); + + // Assert + mockRepository.VerifyAll(); // Expect no calls on arguments + } + + [Test] + public void GetContextMenu_WithPipingCalculation_ContextMenuWithThreeItems() + { + // Setup + var nodeMock = mockRepository.StrictMock(); + mockRepository.ReplayAll(); + + var nodeData = new PipingCalculationContext(new PipingCalculation(), + Enumerable.Empty(), + Enumerable.Empty()); + + var nodePresenter = new PipingCalculationContextNodePresenter(); + + // Call + ContextMenuStrip contextMenu = nodePresenter.GetContextMenu(nodeMock, nodeData); + + // Assert + Assert.IsNotNull(contextMenu); + Assert.AreEqual(3, contextMenu.Items.Count); + var validateItem = contextMenu.Items[contextMenuValidateIndex]; + Assert.AreEqual(RingtoetsFormsResources.Validate, validateItem.Text); + TestHelper.AssertImagesAreEqual(RingtoetsFormsResources.ValidationIcon, validateItem.Image); + + ToolStripItem calculatePipingItem = contextMenu.Items[contextMenuCalculateIndex]; + Assert.AreEqual(RingtoetsFormsResources.Calculate, calculatePipingItem.Text); + Assert.AreEqual(16, calculatePipingItem.Image.Height); + Assert.AreEqual(16, calculatePipingItem.Image.Width); + + ToolStripItem clearOutputItem = contextMenu.Items[contextMenuClearIndex]; + Assert.AreEqual(RingtoetsFormsResources.Clear_output, clearOutputItem.Text); + Assert.AreEqual(16, clearOutputItem.Image.Height); + Assert.AreEqual(16, clearOutputItem.Image.Width); + mockRepository.VerifyAll(); // Expect no calls on arguments + } + + [Test] + public void GetContextMenu_PipingCalculationWithoutOutput_ContextMenuItemClearOutputDisabled() + { + // Setup + var nodeMock = mockRepository.StrictMock(); + mockRepository.ReplayAll(); + + var nodeData = new PipingCalculationContext(new PipingCalculation(), + Enumerable.Empty(), + Enumerable.Empty()); + + var nodePresenter = new PipingCalculationContextNodePresenter(); + + // Call + ContextMenuStrip contextMenu = nodePresenter.GetContextMenu(nodeMock, nodeData); + + // Assert + Assert.IsNotNull(contextMenu); + Assert.AreEqual(3, contextMenu.Items.Count); + + ToolStripItem clearOutputItem = contextMenu.Items[contextMenuClearIndex]; + Assert.IsFalse(clearOutputItem.Enabled); + Assert.AreEqual(RingtoetsFormsResources.ClearOutput_No_output_to_clear, clearOutputItem.ToolTipText); + mockRepository.VerifyAll(); // Expect no calls on arguments + } + + [Test] + public void GetContextMenu_PipingCalculationWithOutput_ContextMenuItemClearOutputEnabled() + { + // Setup + var nodeMock = mockRepository.StrictMock(); + mockRepository.ReplayAll(); + + var calculation = new PipingCalculation + { + Output = new TestPipingOutput() + }; + var nodeData = new PipingCalculationContext(calculation, + Enumerable.Empty(), + Enumerable.Empty()); + + + var nodePresenter = new PipingCalculationContextNodePresenter(); + + // Call + ContextMenuStrip contextMenu = nodePresenter.GetContextMenu(nodeMock, nodeData); + + // Assert + Assert.IsNotNull(contextMenu); + Assert.AreEqual(3, contextMenu.Items.Count); + + ToolStripItem clearOutputItem = contextMenu.Items[contextMenuClearIndex]; + Assert.IsTrue(clearOutputItem.Enabled); + Assert.IsNull(clearOutputItem.ToolTipText); + mockRepository.VerifyAll(); // Expect no calls on arguments + } + + [Test] + public void OnPropertyChange_Always_DoNothing() + { + // Setup + var nodeMock = mockRepository.StrictMock(); + var eventArgsMock = mockRepository.StrictMock(""); + mockRepository.ReplayAll(); + + var dataMock = new PipingCalculationContext(new PipingCalculation(), + Enumerable.Empty(), + Enumerable.Empty()); + + var nodePresenter = new PipingCalculationContextNodePresenter(); + + // Call + nodePresenter.OnPropertyChanged(dataMock, nodeMock, eventArgsMock); + + // Assert + mockRepository.VerifyAll(); // Expect no calls on arguments + } + + [Test] + public void OnCollectionChange_Always_DoNothing() + { + // Setup + var eventArgsMock = mockRepository.StrictMock(); + mockRepository.ReplayAll(); + + var dataMock = new PipingCalculationContext(new PipingCalculation(), + Enumerable.Empty(), + Enumerable.Empty()); + + var nodePresenter = new PipingCalculationContextNodePresenter(); + + // Call + nodePresenter.OnCollectionChanged(dataMock, eventArgsMock); + + // Assert + mockRepository.VerifyAll(); // Expect no calls on arguments + } + + [Test] + public void CanRemove_ParentIsPipingCalculationsTreeFolder_ReturnTrue() + { + // Setup + var pipingFailureMechanism = new PipingFailureMechanism(); + var pipingCalculationsFolder = new PipingCalculationsTreeFolder("Berekeningen", pipingFailureMechanism); + + var nodePresenter = new PipingCalculationContextNodePresenter(); + + // Call + bool removalAllowed = nodePresenter.CanRemove(pipingCalculationsFolder, pipingCalculationsFolder.Contents.OfType().First()); + + // Assert + Assert.IsTrue(removalAllowed); + } + + [Test] + public void CanRemove_ParentIsPipingCalculationsTreeFolderForCalculationNotInFolder_ReturnFalse() + { + // Setup + var pipingFailureMechanism = new PipingFailureMechanism(); + var pipingCalculationsFolder = new PipingCalculationsTreeFolder("Berekeningen", pipingFailureMechanism); + + var nodePresenter = new PipingCalculationContextNodePresenter(); + + var calculationContext = new PipingCalculationContext(new PipingCalculation(), + Enumerable.Empty(), + Enumerable.Empty()); + + // Call + bool removalAllowed = nodePresenter.CanRemove(pipingCalculationsFolder, calculationContext); + + // Assert + Assert.IsFalse(removalAllowed); + } + + [Test] + public void CanRemove_EverythingElse_ReturnFalse() + { + // Setup + var dataMock = mockRepository.StrictMock(); + mockRepository.ReplayAll(); + + var nodeMock = new PipingCalculationContext(new PipingCalculation(), + Enumerable.Empty(), + Enumerable.Empty()); + + var nodePresenter = new PipingCalculationContextNodePresenter(); + + // Call + bool removalAllowed = nodePresenter.CanRemove(dataMock, nodeMock); + + // Assert + Assert.IsFalse(removalAllowed); + mockRepository.VerifyAll(); // Expect no calls on arguments + } + + [Test] + public void RemoveNodeData_ParentIsPipingCalculationsTreeFolder_RemoveCalculationFromFailureMechanism() + { + // Setup + var mocks = new MockRepository(); + var observer = mocks.StrictMock(); + observer.Expect(o => o.UpdateObserver()); + mocks.ReplayAll(); + + var elementToBeRemoved = new PipingCalculation(); + + var pipingFailureMechanism = new PipingFailureMechanism(); + pipingFailureMechanism.Calculations.Add(elementToBeRemoved); + pipingFailureMechanism.Calculations.Add(new PipingCalculation()); + pipingFailureMechanism.Attach(observer); + + var pipingCalculationsFolder = new PipingCalculationsTreeFolder("Berekeningen", pipingFailureMechanism); + + var nodePresenter = new PipingCalculationContextNodePresenter(); + + // Precondition + var treeElementToRemove = pipingCalculationsFolder.Contents.OfType().ElementAt(1); + Assert.IsTrue(nodePresenter.CanRemove(pipingCalculationsFolder, treeElementToRemove)); + Assert.AreEqual(3, pipingFailureMechanism.Calculations.Count); + + // Call + bool removalSuccesful = nodePresenter.RemoveNodeData(pipingCalculationsFolder, treeElementToRemove); + + // Assert + Assert.IsTrue(removalSuccesful); + Assert.AreEqual(2, pipingFailureMechanism.Calculations.Count); + CollectionAssert.DoesNotContain(pipingFailureMechanism.Calculations, elementToBeRemoved); + + mocks.VerifyAll(); + } + + [Test] + public void RemoveNodeData_Always_ThrowsInvalidOperationException() + { + // Setup + var nodePresenter = new PipingCalculationContextNodePresenter(); + + // Call + TestDelegate removeAction = () => nodePresenter.RemoveNodeData(null, null); + + // Assert + var exception = Assert.Throws(removeAction); + var expectedMessage = string.Format("Kan knoop uit boom van type {0} niet verwijderen.", nodePresenter.GetType().Name); + Assert.AreEqual(expectedMessage, exception.Message); + } + + [Test] + public void GivenInvalidPipingCalculation_WhenCalculatingFromContextMenu_ThenPipingCalculationNotifiesObserversAndLogMessageAdded() + { + // Given + var expectedValidationMessageCount = 2; // No surfaceline or soil profile selected for calculation + + var observer = mockRepository.StrictMock(); + mockRepository.ReplayAll(); + + var calculateContextMenuItemIndex = 1; + var calculation = new PipingCalculation(); + calculation.Attach(observer); + + var activityRunner = new ActivityRunner(); + + var nodePresenter = new PipingCalculationContextNodePresenter + { + RunActivityAction = activity => activityRunner.Enqueue(activity) + }; + var contextMenuAdapter = nodePresenter.GetContextMenu(null, new PipingCalculationContext(calculation, + Enumerable.Empty(), + Enumerable.Empty())); + + // When + Action action = () => + { + contextMenuAdapter.Items[calculateContextMenuItemIndex].PerformClick(); + while (activityRunner.IsRunning) + { + // Do something useful while waiting for calculation to finish... + Application.DoEvents(); + } + }; + + // Then + TestHelper.AssertLogMessages(action, messages => + { + var msgs = messages.GetEnumerator(); + Assert.IsTrue(msgs.MoveNext()); + StringAssert.StartsWith("Validatie van 'Nieuwe berekening' gestart om: ", msgs.Current); + for (int i = 0; i < expectedValidationMessageCount; i++) + { + Assert.IsTrue(msgs.MoveNext()); + StringAssert.StartsWith("Validatie mislukt: ", msgs.Current); + } + Assert.IsTrue(msgs.MoveNext()); + StringAssert.StartsWith("Validatie van 'Nieuwe berekening' beëindigd om: ", msgs.Current); + }); + Assert.IsNull(calculation.Output); + mockRepository.VerifyAll();// Expect no calls on observer as no calculation has been performed + } + + [Test] + public void GivenInvalidPipingCalculation_WhenValidatingFromContextMenu_ThenLogMessageAddedAndNoNotifyObserver() + { + // Given + var expectedValidationMessageCount = 2; // No surfaceline or soil profile selected for calculation + var expectedStatusMessageCount = 2; + var expectedLogMessageCount = expectedValidationMessageCount + expectedStatusMessageCount; + + var validateContextMenuItemIndex = 0; + var calculation = new PipingCalculation(); + var observer = mockRepository.StrictMock(); + var nodePresenter = new PipingCalculationContextNodePresenter(); + observer.Expect(o => o.UpdateObserver()).Repeat.Never(); + calculation.Attach(observer); + + mockRepository.ReplayAll(); + + var contextMenuAdapter = nodePresenter.GetContextMenu(null, new PipingCalculationContext(calculation, + Enumerable.Empty(), + Enumerable.Empty())); + + // When + Action action = () => contextMenuAdapter.Items[validateContextMenuItemIndex].PerformClick(); + + // Then + TestHelper.AssertLogMessagesCount(action, expectedLogMessageCount); + mockRepository.VerifyAll(); + } + + [Test] + public void GivenValidPipingCalculation_WhenCalculatingFromContextMenu_ThenPipingCalculationNotifiesObservers() + { + // Given + var calculateContextMenuItemIndex = 1; + var calculation = new PipingCalculation(); + var validPipingInput = new TestPipingInput(); + calculation.InputParameters.AssessmentLevel = validPipingInput.AssessmentLevel; + calculation.InputParameters.BeddingAngle = validPipingInput.BeddingAngle; + calculation.InputParameters.DampingFactorExit.Mean = validPipingInput.DampingFactorExit; + calculation.InputParameters.DarcyPermeability.Mean = validPipingInput.DarcyPermeability; + calculation.InputParameters.Diameter70.Mean = validPipingInput.Diameter70; + calculation.InputParameters.ExitPointXCoordinate = validPipingInput.ExitPointXCoordinate; + calculation.InputParameters.Gravity = validPipingInput.Gravity; + calculation.InputParameters.MeanDiameter70 = validPipingInput.MeanDiameter70; + calculation.InputParameters.PhreaticLevelExit.Mean = validPipingInput.PhreaticLevelExit; + calculation.InputParameters.PiezometricHeadExit = validPipingInput.PiezometricHeadExit; + calculation.InputParameters.PiezometricHeadPolder = validPipingInput.PiezometricHeadPolder; + calculation.InputParameters.SandParticlesVolumicWeight = validPipingInput.SandParticlesVolumicWeight; + calculation.InputParameters.SeepageLength.Mean = validPipingInput.SeepageLength; + calculation.InputParameters.SellmeijerModelFactor = validPipingInput.SellmeijerModelFactor; + calculation.InputParameters.SellmeijerReductionFactor = validPipingInput.SellmeijerReductionFactor; + calculation.InputParameters.ThicknessAquiferLayer.Mean = validPipingInput.ThicknessAquiferLayer; + calculation.InputParameters.ThicknessCoverageLayer.Mean = validPipingInput.ThicknessCoverageLayer; + calculation.InputParameters.UpliftModelFactor = validPipingInput.UpliftModelFactor; + calculation.InputParameters.WaterVolumetricWeight = validPipingInput.WaterVolumetricWeight; + calculation.InputParameters.WaterKinematicViscosity = validPipingInput.WaterKinematicViscosity; + calculation.InputParameters.WhitesDragCoefficient = validPipingInput.WhitesDragCoefficient; + calculation.InputParameters.SurfaceLine = validPipingInput.SurfaceLine; + calculation.InputParameters.SoilProfile = validPipingInput.SoilProfile; + + var observer = mockRepository.StrictMock(); + observer.Expect(o => o.UpdateObserver()); + calculation.Attach(observer); + + mockRepository.ReplayAll(); + + var activityRunner = new ActivityRunner(); + + var nodePresenter = new PipingCalculationContextNodePresenter(); + var contextMenuAdapter = nodePresenter.GetContextMenu(null, new PipingCalculationContext(calculation, + Enumerable.Empty(), + Enumerable.Empty())); + nodePresenter.RunActivityAction = activity => activityRunner.Enqueue(activity); + + // When + Action action = () => + { + contextMenuAdapter.Items[calculateContextMenuItemIndex].PerformClick(); + while (activityRunner.IsRunning) + { + // Do something useful while waiting for calculation to finish... + Application.DoEvents(); + } + }; + + // Then + TestHelper.AssertLogMessages(action, messages => + { + var msgs = messages.GetEnumerator(); + Assert.IsTrue(msgs.MoveNext()); + StringAssert.StartsWith("Validatie van 'Nieuwe berekening' gestart om: ", msgs.Current); + Assert.IsTrue(msgs.MoveNext()); + StringAssert.StartsWith("Validatie van 'Nieuwe berekening' beëindigd om: ", msgs.Current); + + Assert.IsTrue(msgs.MoveNext()); + StringAssert.StartsWith("Berekening van 'Nieuwe berekening' gestart om: ", msgs.Current); + Assert.IsTrue(msgs.MoveNext()); + StringAssert.StartsWith("Berekening van 'Nieuwe berekening' beëindigd om: ", msgs.Current); + }); + Assert.IsNotNull(calculation.Output); + mockRepository.VerifyAll(); + } + + [Test] + public void GivenPipingCalculationWithOutput_WhenClearingOutputFromContextMenu_ThenPipingCalculationOutputClearedAndNotified() + { + // Given + int clearOutputItemPosition = 2; + var calculation = new PipingCalculation(); + var observer = mockRepository.StrictMock(); + observer.Expect(o => o.UpdateObserver()); + calculation.Output = new TestPipingOutput(); + calculation.Attach(observer); + + mockRepository.ReplayAll(); + + var nodePresenter = new PipingCalculationContextNodePresenter(); + var contextMenuAdapter = nodePresenter.GetContextMenu(null, new PipingCalculationContext(calculation, + Enumerable.Empty(), + Enumerable.Empty())); + + // When + contextMenuAdapter.Items[clearOutputItemPosition].PerformClick(); + + // Then + Assert.IsFalse(calculation.HasOutput); + + mockRepository.VerifyAll(); + } + } +} \ No newline at end of file Index: Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/NodePresenters/PipingCalculationGroupContextNodePresenterTest.cs =================================================================== diff -u --- Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/NodePresenters/PipingCalculationGroupContextNodePresenterTest.cs (revision 0) +++ Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/NodePresenters/PipingCalculationGroupContextNodePresenterTest.cs (revision 495647ee1c652fecc15eea7fefeab29ae01347fe) @@ -0,0 +1,628 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Windows.Forms; + +using Core.Common.Base; +using Core.Common.Base.Workflow; +using Core.Common.Controls; +using Core.Common.TestUtils; + +using NUnit.Framework; + +using Rhino.Mocks; + +using Ringtoets.Common.Forms.NodePresenters; +using Ringtoets.Piping.Calculation.TestUtil; +using Ringtoets.Piping.Data; +using Ringtoets.Piping.Data.TestUtil; +using Ringtoets.Piping.Forms.NodePresenters; +using Ringtoets.Piping.Forms.PresentationObjects; +using Ringtoets.Piping.Service; + +using RingtoetsFormsResources = Ringtoets.Common.Forms.Properties.Resources; +using PipingFormsResources = Ringtoets.Piping.Forms.Properties.Resources; + +namespace Ringtoets.Piping.Forms.Test.NodePresenters +{ + [TestFixture] + public class PipingCalculationGroupContextNodePresenterTest + { + private const int contextMenuAddCalculationGroupIndex = 0; + private const int contextMenuAddCalculationIndex = 1; + private const int contextMenuValidateAllIndex = 2; + private const int contextMenuCalculateAllIndex = 3; + private const int contextMenuClearOutputIndex = 4; + + [Test] + public void DefaultConstructor_ExpectedValues() + { + // Setup + + // Call + var nodePresenter = new PipingCalculationGroupContextNodePresenter(); + + // Assert + Assert.IsInstanceOf>(nodePresenter); + Assert.AreEqual(typeof(PipingCalculationGroupContext), nodePresenter.NodeTagType); + Assert.IsNull(nodePresenter.TreeView); + } + + [Test] + public void UpdateNode_WithData_InitializeNode() + { + // Setup + var mocks = new MockRepository(); + var parentNode = mocks.StrictMock(); + var node = mocks.Stub(); + mocks.ReplayAll(); + + var group = new PipingCalculationGroup(); + var nodeData = new PipingCalculationGroupContext(group, + Enumerable.Empty(), + Enumerable.Empty()); + + var nodePresenter = new PipingCalculationGroupContextNodePresenter(); + + // Call + nodePresenter.UpdateNode(parentNode, node, nodeData); + + // Assert + Assert.AreEqual(group.Name, node.Text); + TestHelper.AssertImagesAreEqual(PipingFormsResources.FolderIcon, node.Image); + mocks.VerifyAll(); + } + + [Test] + public void CanRenameNode_Always_ReturnTrue() + { + // Setup + var mocks = new MockRepository(); + var node = mocks.StrictMock(); + mocks.ReplayAll(); + + var nodePresenter = new PipingCalculationGroupContextNodePresenter(); + + // Call + bool isRenamingAllowed = nodePresenter.CanRenameNode(node); + + // Assert + Assert.IsTrue(isRenamingAllowed); + mocks.VerifyAll(); + } + + [Test] + public void CanRenamedNodeTo_Always_ReturnTrue() + { + // Setup + var mocks = new MockRepository(); + var node = mocks.StrictMock(); + mocks.ReplayAll(); + + var nodePresenter = new PipingCalculationGroupContextNodePresenter(); + + // Call + bool isRenamingAllowed = nodePresenter.CanRenameNodeTo(node, "newName"); + + // Assert + Assert.IsTrue(isRenamingAllowed); + mocks.VerifyAll(); + } + + [Test] + public void OnNodeRenamed_WithData_RenameGroupAndNotifyObservers() + { + // Setup + var mocks = new MockRepository(); + var observer = mocks.StrictMock(); + observer.Expect(o => o.UpdateObserver()); + mocks.ReplayAll(); + + var group = new PipingCalculationGroup(); + var nodeData = new PipingCalculationGroupContext(group, + Enumerable.Empty(), + Enumerable.Empty()); + nodeData.Attach(observer); + + var nodePresenter = new PipingCalculationGroupContextNodePresenter(); + + // Call + const string newName = "new name"; + nodePresenter.OnNodeRenamed(nodeData, newName); + + // Assert + Assert.AreEqual(newName, group.Name); + mocks.VerifyAll(); + } + + [Test] + public void CanRemove_ParentIsFailureMechanismContainingGroup_ReturnTrue() + { + // Setup + var group = new PipingCalculationGroup(); + var nodeData = new PipingCalculationGroupContext(group, + Enumerable.Empty(), + Enumerable.Empty()); + + var parentNodeData = new PipingFailureMechanism(); + parentNodeData.Calculations.Add(group); + + var nodePresenter = new PipingCalculationGroupContextNodePresenter(); + + // Call + bool isRemovalAllowed = nodePresenter.CanRemove(parentNodeData, nodeData); + + // Assert + Assert.IsTrue(isRemovalAllowed); + } + + [Test] + public void CanRemove_ParentIsFailureMechanismNotContainingGroup_ReturnFalse() + { + // Setup + var nodeData = new PipingCalculationGroupContext(new PipingCalculationGroup(), + Enumerable.Empty(), + Enumerable.Empty()); + + var parentNodeData = new PipingFailureMechanism(); + + var nodePresenter = new PipingCalculationGroupContextNodePresenter(); + + // Precondition + CollectionAssert.DoesNotContain(parentNodeData.Calculations, nodeData); + + // Call + bool isRemovalAllowed = nodePresenter.CanRemove(parentNodeData, nodeData); + + // Assert + Assert.IsFalse(isRemovalAllowed); + } + + [Test] + public void CanRemove_ParentIsPipingCalculationGroupContainingGroup_ReturnTrue() + { + // Setup + var group = new PipingCalculationGroup(); + var nodeData = new PipingCalculationGroupContext(group, + Enumerable.Empty(), + Enumerable.Empty()); + + var parentGroup = new PipingCalculationGroup(); + parentGroup.Children.Add(group); + var parentNodeData = new PipingCalculationGroupContext(parentGroup, + Enumerable.Empty(), + Enumerable.Empty()); + + + var nodePresenter = new PipingCalculationGroupContextNodePresenter(); + + // Call + bool isRemovalAllowed = nodePresenter.CanRemove(parentNodeData, nodeData); + + // Assert + Assert.IsTrue(isRemovalAllowed); + } + + [Test] + public void CanRemove_ParentIsPipingCalculationGroupNotContainingGroup_ReturnFalse() + { + // Setup + var group = new PipingCalculationGroup(); + var nodeData = new PipingCalculationGroupContext(group, + Enumerable.Empty(), + Enumerable.Empty()); + + var parentGroup = new PipingCalculationGroup(); + var parentNodeData = new PipingCalculationGroupContext(parentGroup, + Enumerable.Empty(), + Enumerable.Empty()); + + var nodePresenter = new PipingCalculationGroupContextNodePresenter(); + + // Precondition + CollectionAssert.DoesNotContain(parentGroup.Children, group); + + // Call + bool isRemovalAllowed = nodePresenter.CanRemove(parentNodeData, nodeData); + + // Assert + Assert.IsFalse(isRemovalAllowed); + } + + [Test] + public void CanRemove_ParentIsFailureMechanismContainingGroup_RemoveGroupAndNotifyObservers() + { + // Setup + var mocks = new MockRepository(); + var observer = mocks.StrictMock(); + observer.Expect(o => o.UpdateObserver()); + mocks.ReplayAll(); + + var group = new PipingCalculationGroup(); + var nodeData = new PipingCalculationGroupContext(group, + Enumerable.Empty(), + Enumerable.Empty()); + + var parentNodeData = new PipingFailureMechanism(); + parentNodeData.Calculations.Add(group); + parentNodeData.Attach(observer); + + var nodePresenter = new PipingCalculationGroupContextNodePresenter(); + + // Precondition + Assert.IsTrue(nodePresenter.CanRemove(parentNodeData, nodeData)); + + // Call + bool removealSuccesful = nodePresenter.RemoveNodeData(parentNodeData, nodeData); + + // Assert + Assert.IsTrue(removealSuccesful); + CollectionAssert.DoesNotContain(parentNodeData.Calculations, nodeData); + mocks.VerifyAll(); + } + + [Test] + public void CanRemove_ParentIsPipingCalculationGroupContainingGroup_RemoveGroupAndNotifyObservers() + { + // Setup + var mocks = new MockRepository(); + var observer = mocks.StrictMock(); + observer.Expect(o => o.UpdateObserver()); + mocks.ReplayAll(); + + var group = new PipingCalculationGroup(); + var nodeData = new PipingCalculationGroupContext(group, + Enumerable.Empty(), + Enumerable.Empty()); + + var parentGroup = new PipingCalculationGroup(); + parentGroup.Children.Add(group); + var parentNodeData = new PipingCalculationGroupContext(parentGroup, + Enumerable.Empty(), + Enumerable.Empty()); + parentNodeData.Attach(observer); + + var nodePresenter = new PipingCalculationGroupContextNodePresenter(); + + // Precondition + Assert.IsTrue(nodePresenter.CanRemove(parentNodeData, nodeData)); + + // Call + bool removealSuccesful = nodePresenter.RemoveNodeData(parentNodeData, nodeData); + + // Assert + Assert.IsTrue(removealSuccesful); + CollectionAssert.DoesNotContain(parentGroup.Children, group); + mocks.VerifyAll(); + } + + [Test] + public void GetContextMenu_ValidData_ReturnContextWithItems() + { + // Setup + var mocks = new MockRepository(); + var node = mocks.StrictMock(); + mocks.ReplayAll(); + + var group = new PipingCalculationGroup(); + var nodeData = new PipingCalculationGroupContext(group, + Enumerable.Empty(), + Enumerable.Empty()); + + var nodePresenter = new PipingCalculationGroupContextNodePresenter(); + + // Call + ContextMenuStrip contextMenu = nodePresenter.GetContextMenu(node, nodeData); + + // Assert + Assert.AreEqual(5, contextMenu.Items.Count); + + ToolStripItem addFolderItem = contextMenu.Items[contextMenuAddCalculationGroupIndex]; + Assert.AreEqual("Map toevoegen", addFolderItem.Text); + Assert.AreEqual("Voeg een nieuwe berekeningsmap toe aan deze berekeningsmap.", addFolderItem.ToolTipText); + TestHelper.AssertImagesAreEqual(PipingFormsResources.AddFolderIcon, addFolderItem.Image); + + ToolStripItem addCalculationItem = contextMenu.Items[contextMenuAddCalculationIndex]; + Assert.AreEqual("Berekening toevoegen", addCalculationItem.Text); + Assert.AreEqual("Voeg een nieuwe berekening toe aan deze berekeningsmap.", addCalculationItem.ToolTipText); + TestHelper.AssertImagesAreEqual(PipingFormsResources.PipingIcon, addCalculationItem.Image); + + ToolStripItem validateAllItem = contextMenu.Items[contextMenuValidateAllIndex]; + Assert.AreEqual("Valideren", validateAllItem.Text); + Assert.AreEqual("Valideer alle berekeningen binnen deze berekeningsmap.", validateAllItem.ToolTipText); + TestHelper.AssertImagesAreEqual(PipingFormsResources.ValidationIcon, validateAllItem.Image); + + ToolStripItem calculateAllItem = contextMenu.Items[contextMenuCalculateAllIndex]; + Assert.AreEqual("Alles be&rekenen", calculateAllItem.Text); + Assert.AreEqual("Valideer en voer alle berekeningen binnen deze berekeningsmap uit.", calculateAllItem.ToolTipText); + TestHelper.AssertImagesAreEqual(RingtoetsFormsResources.CalculateAllIcon, calculateAllItem.Image); + + ToolStripItem clearOutputItem = contextMenu.Items[contextMenuClearOutputIndex]; + Assert.AreEqual("&Wis alle uitvoer", clearOutputItem.Text); + Assert.AreEqual("Wis de uitvoer van alle berekeningen binnen deze berekeningsmap.", clearOutputItem.ToolTipText); + TestHelper.AssertImagesAreEqual(RingtoetsFormsResources.ClearIcon, clearOutputItem.Image); + mocks.VerifyAll(); + } + + [Test] + public void GetContextMenu_ClickOnAddGroupItem_AddGroupToCalculationGroupAndNotifyObservers() + { + // Setup + var mocks = new MockRepository(); + var calculationItem = mocks.Stub(); + calculationItem.Name = "Nieuwe map"; + + var observer = mocks.StrictMock(); + observer.Expect(o => o.UpdateObserver()); + + var node = mocks.StrictMock(); + mocks.ReplayAll(); + + var group = new PipingCalculationGroup(); + group.Children.Add(calculationItem); + var nodeData = new PipingCalculationGroupContext(group, + Enumerable.Empty(), + Enumerable.Empty()); + nodeData.Attach(observer); + + var nodePresenter = new PipingCalculationGroupContextNodePresenter(); + + var contextMenu = nodePresenter.GetContextMenu(node, nodeData); + + // Precondition + Assert.AreEqual(1, group.Children.Count); + + // Call + contextMenu.Items[contextMenuAddCalculationGroupIndex].PerformClick(); + + // Assert + Assert.AreEqual(2, group.Children.Count); + var newlyAddedItem = group.Children.Last(); + Assert.IsInstanceOf(newlyAddedItem); + Assert.AreEqual("Nieuwe map (1)", newlyAddedItem.Name); + mocks.VerifyAll(); + } + + [Test] + public void GetContextMenu_ClickOnAddCalculationItem_AddCalculationToCalculationGroupAndNotifyObservers() + { + // Setup + var mocks = new MockRepository(); + var calculationItem = mocks.Stub(); + calculationItem.Name = "Nieuwe berekening"; + + var observer = mocks.StrictMock(); + observer.Expect(o => o.UpdateObserver()); + + var node = mocks.StrictMock(); + mocks.ReplayAll(); + + var group = new PipingCalculationGroup(); + group.Children.Add(calculationItem); + var nodeData = new PipingCalculationGroupContext(group, + Enumerable.Empty(), + Enumerable.Empty()); + nodeData.Attach(observer); + + var nodePresenter = new PipingCalculationGroupContextNodePresenter(); + + var contextMenu = nodePresenter.GetContextMenu(node, nodeData); + + // Precondition + Assert.AreEqual(1, group.Children.Count); + + // Call + contextMenu.Items[contextMenuAddCalculationIndex].PerformClick(); + + // Assert + Assert.AreEqual(2, group.Children.Count); + var newlyAddedItem = group.Children.Last(); + Assert.IsInstanceOf(newlyAddedItem); + Assert.AreEqual("Nieuwe berekening (1)", newlyAddedItem.Name); + mocks.VerifyAll(); + } + + [Test] + public void GetContextMenu_ClickOnValidateAllItem_ValidateAllChildCalculations() + { + // Setup + var mocks = new MockRepository(); + var node = mocks.StrictMock(); + mocks.ReplayAll(); + + var validCalculation = PipingCalculationFactory.CreateCalculationWithValidInput(); + validCalculation.Name = "A"; + var invalidCalculation = PipingCalculationFactory.CreateCalculationWithInvalidData(); + invalidCalculation.Name = "B"; + + var childGroup = new PipingCalculationGroup(); + childGroup.Children.Add(validCalculation); + + var emptyChildGroup = new PipingCalculationGroup(); + + var group = new PipingCalculationGroup(); + group.Children.Add(childGroup); + group.Children.Add(emptyChildGroup); + group.Children.Add(invalidCalculation); + var nodeData = new PipingCalculationGroupContext(group, + Enumerable.Empty(), + Enumerable.Empty()); + + var nodePresenter = new PipingCalculationGroupContextNodePresenter(); + + var contextMenu = nodePresenter.GetContextMenu(node, nodeData); + + // Call + Action call = () => contextMenu.Items[contextMenuValidateAllIndex].PerformClick(); + + // Assert + TestHelper.AssertLogMessages(call, messages => + { + var msgs = messages.ToArray(); + Assert.AreEqual(6, msgs.Length); + StringAssert.StartsWith(String.Format("Validatie van '{0}' gestart om: ", validCalculation.Name), msgs[0]); + StringAssert.StartsWith(String.Format("Validatie van '{0}' beëindigd om: ", validCalculation.Name), msgs[1]); + + StringAssert.StartsWith(String.Format("Validatie van '{0}' gestart om: ", invalidCalculation.Name), msgs[2]); + // Some validation error from validation service + StringAssert.StartsWith(String.Format("Validatie van '{0}' beëindigd om: ", invalidCalculation.Name), msgs[5]); + }); + mocks.VerifyAll(); + } + + [Test] + public void GetContextMenu_ClickOnCalculateAllItem_ScheduleAllChildCalculations() + { + // Setup + var mocks = new MockRepository(); + var node = mocks.StrictMock(); + mocks.ReplayAll(); + + var validCalculation = PipingCalculationFactory.CreateCalculationWithValidInput(); + validCalculation.Name = "A"; + var invalidCalculation = PipingCalculationFactory.CreateCalculationWithInvalidData(); + invalidCalculation.Name = "B"; + + var childGroup = new PipingCalculationGroup(); + childGroup.Children.Add(validCalculation); + + var emptyChildGroup = new PipingCalculationGroup(); + + var group = new PipingCalculationGroup(); + group.Children.Add(childGroup); + group.Children.Add(emptyChildGroup); + group.Children.Add(invalidCalculation); + var nodeData = new PipingCalculationGroupContext(group, + Enumerable.Empty(), + Enumerable.Empty()); + + var activitesToRun = new List(); + + var nodePresenter = new PipingCalculationGroupContextNodePresenter + { + RunActivityAction = activity => activitesToRun.Add(activity) + }; + + var contextMenu = nodePresenter.GetContextMenu(node, nodeData); + + // Call + contextMenu.Items[contextMenuCalculateAllIndex].PerformClick(); + + // Assert + Assert.AreEqual(2, activitesToRun.Count); + foreach (var activity in activitesToRun) + { + Assert.IsInstanceOf(activity); + } + CollectionAssert.AreEquivalent(new[]{validCalculation.Name, invalidCalculation.Name}, activitesToRun.Select(a=>a.Name)); + mocks.VerifyAll(); + } + + [Test] + public void GetContextMenu_ClickOnClearOutputItem_ClearOutputAllChildCalculationsAndNotifyCalculationObservers() + { + // Setup + var mocks = new MockRepository(); + var node = mocks.StrictMock(); + + var calculation1Observer = mocks.StrictMock(); + calculation1Observer.Expect(o => o.UpdateObserver()); + + var calculation2Observer = mocks.StrictMock(); + calculation2Observer.Expect(o => o.UpdateObserver()); + mocks.ReplayAll(); + + var calculation1 = PipingCalculationFactory.CreateCalculationWithValidInput(); + calculation1.Name = "A"; + calculation1.Output = new TestPipingOutput(); + calculation1.Attach(calculation1Observer); + var calculation2 = PipingCalculationFactory.CreateCalculationWithValidInput(); + calculation2.Name = "B"; + calculation2.Output = new TestPipingOutput(); + calculation1.Attach(calculation2Observer); + + var childGroup = new PipingCalculationGroup(); + childGroup.Children.Add(calculation1); + + var emptyChildGroup = new PipingCalculationGroup(); + + var group = new PipingCalculationGroup(); + group.Children.Add(childGroup); + group.Children.Add(emptyChildGroup); + group.Children.Add(calculation2); + var nodeData = new PipingCalculationGroupContext(group, + Enumerable.Empty(), + Enumerable.Empty()); + + // Precondition + Assert.IsTrue(group.HasOutput); + + var nodePresenter = new PipingCalculationGroupContextNodePresenter(); + + var contextMenu = nodePresenter.GetContextMenu(node, nodeData); + + // Call + contextMenu.Items[contextMenuClearOutputIndex].PerformClick(); + + // Assert + Assert.IsFalse(group.HasOutput); + Assert.IsFalse(calculation1.HasOutput); + Assert.IsFalse(calculation2.HasOutput); + mocks.VerifyAll(); + } + + [Test] + public void GetChildNodeObjects_EmptyGroup_ReturnEmpty() + { + // Setup + var group = new PipingCalculationGroup(); + var groupContext = new PipingCalculationGroupContext(group, + Enumerable.Empty(), + Enumerable.Empty()); + + var nodePresenter = new PipingCalculationGroupContextNodePresenter(); + + // Call + var children = nodePresenter.GetChildNodeObjects(groupContext); + + // Assert + CollectionAssert.IsEmpty(children); + } + + [Test] + public void GetChildNodeObjects_GroupWithMixedContents_ReturnChildren() + { + // Setup + var mocks = new MockRepository(); + var calculationItem = mocks.StrictMock(); + mocks.ReplayAll(); + + var childCalculation = new PipingCalculation(); + + var childGroup = new PipingCalculationGroup(); + + var group = new PipingCalculationGroup(); + group.Children.Add(calculationItem); + group.Children.Add(childCalculation); + group.Children.Add(childGroup); + var nodeData = new PipingCalculationGroupContext(group, + Enumerable.Empty(), + Enumerable.Empty()); + + + var nodePresenter = new PipingCalculationGroupContextNodePresenter(); + + // Call + var children = nodePresenter.GetChildNodeObjects(nodeData).OfType().ToArray(); + + // Assert + Assert.AreEqual(group.Children.Count, children.Length); + Assert.AreSame(calculationItem, children[0]); + var returnedCalculationContext = (PipingCalculationContext)children[1]; + Assert.AreSame(childCalculation, returnedCalculationContext.WrappedData); + var returnedCalculationGroupContext = (PipingCalculationGroupContext)children[2]; + Assert.AreSame(childGroup, returnedCalculationGroupContext.WrappedData); + mocks.VerifyAll(); + } + } +} \ No newline at end of file Fisheye: Tag 495647ee1c652fecc15eea7fefeab29ae01347fe refers to a dead (removed) revision in file `Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/NodePresenters/PipingCalculationNodePresenterTest.cs'. Fisheye: No comparison available. Pass `N' to diff? Index: Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/NodePresenters/PipingFailureMechanismNodePresenterTest.cs =================================================================== diff -u -re388ea76d1d044298cc89156c8744fbea1bcb736 -r495647ee1c652fecc15eea7fefeab29ae01347fe --- Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/NodePresenters/PipingFailureMechanismNodePresenterTest.cs (.../PipingFailureMechanismNodePresenterTest.cs) (revision e388ea76d1d044298cc89156c8744fbea1bcb736) +++ Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/NodePresenters/PipingFailureMechanismNodePresenterTest.cs (.../PipingFailureMechanismNodePresenterTest.cs) (revision 495647ee1c652fecc15eea7fefeab29ae01347fe) @@ -3,6 +3,7 @@ using System.Linq; using Core.Common.Base; using Core.Common.Controls; +using Core.Common.TestUtils; using Core.Common.Utils.Collections; using NUnit.Framework; using Rhino.Mocks; @@ -15,15 +16,17 @@ using Ringtoets.Piping.Forms.PresentationObjects; using RingtoetsFormsResources = Ringtoets.Common.Forms.Properties.Resources; +using PipingFormsResources = Ringtoets.Piping.Forms.Properties.Resources; namespace Ringtoets.Piping.Forms.Test.NodePresenters { public class PipingFailureMechanismNodePresenterTest { - private const int contextMenuAddIndex = 0; - private const int contextMenuCalculateIndex = 1; - private const int contextMenuClearIndex = 2; + private const int contextMenuAddCalculationIndex = 0; + private const int contextMenuAddFolderIndex = 1; + private const int contextMenuCalculateIndex = 2; + private const int contextMenuClearIndex = 3; [Test] public void DefaultConstructor_ExpectedValues() @@ -94,7 +97,7 @@ var pipingCalculationChildObjects = calculationsFolder.Contents.Cast() .Take(pipingFailureMechanism.Calculations.Count) .ToArray(); - CollectionAssert.AreEqual(pipingFailureMechanism.Calculations, pipingCalculationChildObjects.Select(pci => pci.WrappedPipingCalculation).ToArray()); + CollectionAssert.AreEqual(pipingFailureMechanism.Calculations, pipingCalculationChildObjects.Select(pci => pci.WrappedData).ToArray()); foreach (var pipingCalculationContext in pipingCalculationChildObjects) { Assert.AreSame(pipingFailureMechanism.SurfaceLines, pipingCalculationContext.AvailablePipingSurfaceLines); @@ -279,38 +282,43 @@ } [Test] - public void GetContextMenu_PipingFailureMechanism_ReturnsContextMenuWithThreeItems() + public void GetContextMenu_PipingFailureMechanism_ReturnsContextMenuWithFourItems() { // Setup var mocks = new MockRepository(); var nodeMock = mocks.StrictMock(); - var dataMock = mocks.StrictMock(); + mocks.ReplayAll(); + var nodeData = new PipingFailureMechanism(); + ((PipingCalculation)nodeData.Calculations.First()).Output = new TestPipingOutput(); + var nodePresenter = new PipingFailureMechanismNodePresenter(); - mocks.ReplayAll(); - // Call - var contextMenu = nodePresenter.GetContextMenu(nodeMock, dataMock); + var contextMenu = nodePresenter.GetContextMenu(nodeMock, nodeData); // Assert - Assert.AreEqual(3, contextMenu.Items.Count); - var addCalculationItem = contextMenu.Items[contextMenuAddIndex]; + Assert.AreEqual(4, contextMenu.Items.Count); + var addCalculationItem = contextMenu.Items[contextMenuAddCalculationIndex]; Assert.AreEqual("Berekening toevoegen", addCalculationItem.Text); Assert.AreEqual("Voeg een nieuwe piping berekening toe aan het faalmechanisme.", addCalculationItem.ToolTipText); Assert.AreEqual(16, addCalculationItem.Image.Width); Assert.AreEqual(16, addCalculationItem.Image.Height); + var addFolderItem = contextMenu.Items[contextMenuAddFolderIndex]; + Assert.AreEqual("Map toevoegen", addFolderItem.Text); + Assert.AreEqual("Voeg een nieuwe berekeningsmap toe aan het faalmechanisme.", addFolderItem.ToolTipText); + TestHelper.AssertImagesAreEqual(PipingFormsResources.AddFolderIcon, addFolderItem.Image); + var runAllItem = contextMenu.Items[contextMenuCalculateIndex]; Assert.AreEqual("Alles be&rekenen", runAllItem.Text); Assert.AreEqual("Valideer en voer alle berekeningen binnen het piping faalmechanisme uit.", runAllItem.ToolTipText); - Assert.AreEqual(16, runAllItem.Image.Width); - Assert.AreEqual(16, runAllItem.Image.Height); + TestHelper.AssertImagesAreEqual(RingtoetsFormsResources.CalculateAllIcon, runAllItem.Image); var clearOutputItem = contextMenu.Items[contextMenuClearIndex]; Assert.AreEqual("&Wis alle uitvoer", clearOutputItem.Text); - Assert.AreEqual(16, clearOutputItem.Image.Width); - Assert.AreEqual(16, clearOutputItem.Image.Height); + Assert.AreEqual("Wis de uitvoer van alle berekeningen binnen het faalmechanisme.", clearOutputItem.ToolTipText); + TestHelper.AssertImagesAreEqual(RingtoetsFormsResources.ClearIcon, clearOutputItem.Image); mocks.VerifyAll(); // Expect no calls on arguments } @@ -331,7 +339,7 @@ var contextMenu = nodePresenter.GetContextMenu(nodeMock, dataMock); // Assert - Assert.AreEqual(3, contextMenu.Items.Count); + Assert.AreEqual(4, contextMenu.Items.Count); var clearOutputItem = contextMenu.Items[contextMenuClearIndex]; Assert.IsFalse(clearOutputItem.Enabled); @@ -360,7 +368,7 @@ var contextMenu = nodePresenter.GetContextMenu(nodeMock, dataMock); // Assert - Assert.AreEqual(3, contextMenu.Items.Count); + Assert.AreEqual(4, contextMenu.Items.Count); var clearOutputItem = contextMenu.Items[contextMenuClearIndex]; Assert.IsTrue(clearOutputItem.Enabled); @@ -388,16 +396,50 @@ // Call var contextMenu = nodePresenter.GetContextMenu(nodeMock, failureMechanism); - var addCalculationItem = contextMenu.Items[contextMenuAddIndex]; + var addCalculationItem = contextMenu.Items[contextMenuAddCalculationIndex]; addCalculationItem.PerformClick(); // Assert Assert.AreEqual(2, failureMechanism.Calculations.Count); - Assert.AreEqual("Berekening (1)", failureMechanism.Calculations.ElementAt(1).Name); + IPipingCalculationItem addedItem = failureMechanism.Calculations.ElementAt(1); + Assert.AreEqual("Nieuwe berekening (1)", addedItem.Name); + Assert.IsInstanceOf(addedItem); mocks.VerifyAll(); } [Test] + public void GetContextMenu_ClickOnAddFolderItem_NewPipingCalculationGroupInstanceAddedToFailureMechanismAndNotifyObservers() + { + // Setup + var mocks = new MockRepository(); + var nodeMock = mocks.StrictMock(); + var observerMock = mocks.StrictMock(); + observerMock.Expect(o => o.UpdateObserver()); + mocks.ReplayAll(); + + var failureMechanism = new PipingFailureMechanism(); + failureMechanism.Attach(observerMock); + failureMechanism.Calculations.Clear(); + failureMechanism.Calculations.Add(new PipingCalculationGroup()); + var nodePresenter = new PipingFailureMechanismNodePresenter(); + + // Precondition + Assert.AreEqual(1, failureMechanism.Calculations.Count); + + // Call + var contextMenu = nodePresenter.GetContextMenu(nodeMock, failureMechanism); + var addCalculationItem = contextMenu.Items[contextMenuAddFolderIndex]; + addCalculationItem.PerformClick(); + + // Assert + Assert.AreEqual(2, failureMechanism.Calculations.Count); + IPipingCalculationItem addedItem = failureMechanism.Calculations.ElementAt(1); + Assert.AreEqual("Nieuwe map (1)", addedItem.Name); + Assert.IsInstanceOf(addedItem); + mocks.VerifyAll(); + } + + [Test] public void OnPropertyChange_Always_DoNothing() { // Setup Index: Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/NodePresenters/PipingOutputNodePresenterTest.cs =================================================================== diff -u -rfb32e3411873a7b4c567792b9f335eba462e2702 -r495647ee1c652fecc15eea7fefeab29ae01347fe --- Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/NodePresenters/PipingOutputNodePresenterTest.cs (.../PipingOutputNodePresenterTest.cs) (revision fb32e3411873a7b4c567792b9f335eba462e2702) +++ Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/NodePresenters/PipingOutputNodePresenterTest.cs (.../PipingOutputNodePresenterTest.cs) (revision 495647ee1c652fecc15eea7fefeab29ae01347fe) @@ -1,4 +1,5 @@ using System; +using System.Linq; using System.Windows.Forms; using Core.Common.Controls; using NUnit.Framework; @@ -143,37 +144,25 @@ } [Test] - public void RemoveNodeData_WithParentNotContainingPipingCalculation_ThrowsNullReferenceException() - { - // Setup - var nodePresenter = new PipingOutputNodePresenter(); - - // Call - TestDelegate removeAction = () => nodePresenter.RemoveNodeData(new PipingCalculationContext(), new TestPipingOutput()); - - // Assert - Assert.Throws(removeAction); - } - - [Test] public void RemoveNodeData_WithParentContainingOutput_OutputCleared() { // Setup var nodePresenter = new PipingOutputNodePresenter(); - var pipingCalculationContext = new PipingCalculationContext + var calculation = new PipingCalculation { - WrappedPipingCalculation = new PipingCalculation - { - Output = new TestPipingOutput() - } + Output = new TestPipingOutput() }; + var pipingCalculationContext = new PipingCalculationContext(calculation, + Enumerable.Empty(), + Enumerable.Empty()); // Call - nodePresenter.RemoveNodeData(pipingCalculationContext, new TestPipingOutput()); + nodePresenter.RemoveNodeData(pipingCalculationContext, calculation.Output); // Assert - Assert.IsNull(pipingCalculationContext.WrappedPipingCalculation.Output); + Assert.IsNull(calculation.Output); + Assert.IsFalse(calculation.HasOutput); } } } \ No newline at end of file Index: Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/PresentationObjects/PipingCalculationContextTest.cs =================================================================== diff -u -rfb32e3411873a7b4c567792b9f335eba462e2702 -r495647ee1c652fecc15eea7fefeab29ae01347fe --- Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/PresentationObjects/PipingCalculationContextTest.cs (.../PipingCalculationContextTest.cs) (revision fb32e3411873a7b4c567792b9f335eba462e2702) +++ Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/PresentationObjects/PipingCalculationContextTest.cs (.../PipingCalculationContextTest.cs) (revision 495647ee1c652fecc15eea7fefeab29ae01347fe) @@ -15,14 +15,26 @@ [Test] public void DefaultConstructor_ExpectedValues() { + // Setup + var surfacelines = new[] + { + new RingtoetsPipingSurfaceLine() + }; + var profiles = new[] + { + new TestPipingSoilProfile() + }; + var calculation = new PipingCalculation(); + // Call - var presentationObject = new PipingCalculationContext(); + var presentationObject = new PipingCalculationContext(calculation, surfacelines, profiles); // Assert Assert.IsInstanceOf(presentationObject); - Assert.IsNull(presentationObject.WrappedPipingCalculation); - CollectionAssert.IsEmpty(presentationObject.AvailablePipingSurfaceLines); - CollectionAssert.IsEmpty(presentationObject.AvailablePipingSoilProfiles); + Assert.IsInstanceOf>(presentationObject); + Assert.AreSame(calculation, presentationObject.WrappedData); + Assert.AreSame(surfacelines, presentationObject.AvailablePipingSurfaceLines); + Assert.AreSame(profiles, presentationObject.AvailablePipingSoilProfiles); } [Test] @@ -34,10 +46,17 @@ observer.Expect(o => o.UpdateObserver()); mocks.ReplayAll(); - var presentationObject = new PipingCalculationContext + var surfacelines = new[] { - WrappedPipingCalculation = new PipingCalculation() + new RingtoetsPipingSurfaceLine() }; + var profiles = new[] + { + new TestPipingSoilProfile() + }; + var calculation = new PipingCalculation(); + + var presentationObject = new PipingCalculationContext(calculation, surfacelines, profiles); presentationObject.Attach(observer); // Call @@ -55,10 +74,17 @@ var observer = mocks.StrictMock(); mocks.ReplayAll(); - var presentationObject = new PipingCalculationContext + var surfacelines = new[] { - WrappedPipingCalculation = new PipingCalculation() + new RingtoetsPipingSurfaceLine() }; + var profiles = new[] + { + new TestPipingSoilProfile() + }; + var calculation = new PipingCalculation(); + + var presentationObject = new PipingCalculationContext(calculation, surfacelines, profiles); presentationObject.Attach(observer); presentationObject.Detach(observer); @@ -78,11 +104,17 @@ observer.Expect(o => o.UpdateObserver()); mocks.ReplayAll(); - var calculation = new PipingCalculation(); - var presentationObject = new PipingCalculationContext + var surfacelines = new[] { - WrappedPipingCalculation = calculation + new RingtoetsPipingSurfaceLine() }; + var profiles = new[] + { + new TestPipingSoilProfile() + }; + var calculation = new PipingCalculation(); + + var presentationObject = new PipingCalculationContext(calculation, surfacelines, profiles); presentationObject.Attach(observer); // Call @@ -96,19 +128,28 @@ public void ClearOutput_Always_SetsOutputToNull() { // Setup - var inputs = new PipingCalculationContext + // Setup + var surfacelines = new[] { - WrappedPipingCalculation = new PipingCalculation - { - Output = new TestPipingOutput() - } + new RingtoetsPipingSurfaceLine() }; + var profiles = new[] + { + new TestPipingSoilProfile() + }; + var calculation = new PipingCalculation + { + Output = new TestPipingOutput() + }; // Call - inputs.ClearOutput(); + var presentationObject = new PipingCalculationContext(calculation, surfacelines, profiles); + // Call + presentationObject.ClearOutput(); + // Assert - Assert.IsNull(inputs.WrappedPipingCalculation.Output); + Assert.IsNull(presentationObject.WrappedData.Output); } } } \ No newline at end of file Index: Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/PresentationObjects/PipingCalculationGroupContextTest.cs =================================================================== diff -u --- Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/PresentationObjects/PipingCalculationGroupContextTest.cs (revision 0) +++ Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/PresentationObjects/PipingCalculationGroupContextTest.cs (revision 495647ee1c652fecc15eea7fefeab29ae01347fe) @@ -0,0 +1,107 @@ +using System.Linq; + +using Core.Common.Base; + +using NUnit.Framework; + +using Rhino.Mocks; + +using Ringtoets.Piping.Calculation.TestUtil; +using Ringtoets.Piping.Data; +using Ringtoets.Piping.Forms.PresentationObjects; + +namespace Ringtoets.Piping.Forms.Test.PresentationObjects +{ + [TestFixture] + public class PipingCalculationGroupContextTest + { + [Test] + public void DefaultConstructor_ExpectedValues() + { + // Setup + var group = new PipingCalculationGroup(); + var surfaceLines = new[] + { + new RingtoetsPipingSurfaceLine() + }; + var soilProfiles = new[] + { + new TestPipingSoilProfile() + }; + + // Call + var groupContext = new PipingCalculationGroupContext(group, surfaceLines, soilProfiles); + + // Assert + Assert.IsInstanceOf(groupContext); + Assert.IsInstanceOf>(groupContext); + Assert.AreSame(group, groupContext.WrappedData); + Assert.AreSame(surfaceLines, groupContext.AvailablePipingSurfaceLines); + Assert.AreSame(soilProfiles, groupContext.AvailablePipingSoilProfiles); + } + + [Test] + public void NotifyObservers_HasPipingCalculationAndObserverAttached_NotifyObserver() + { + // Setup + var mocks = new MockRepository(); + var observer = mocks.StrictMock(); + observer.Expect(o => o.UpdateObserver()); + mocks.ReplayAll(); + + var presentationObject = new PipingCalculationGroupContext(new PipingCalculationGroup(), + Enumerable.Empty(), + Enumerable.Empty()); + presentationObject.Attach(observer); + + // Call + presentationObject.NotifyObservers(); + + // Assert + mocks.VerifyAll(); + } + + [Test] + public void NotifyObservers_HasPipingCalculationAndObserverDetached_NoCallsOnObserver() + { + // Setup + var mocks = new MockRepository(); + var observer = mocks.StrictMock(); + mocks.ReplayAll(); + + var presentationObject = new PipingCalculationGroupContext(new PipingCalculationGroup(), + Enumerable.Empty(), + Enumerable.Empty()); + presentationObject.Attach(observer); + presentationObject.Detach(observer); + + // Call + presentationObject.NotifyObservers(); + + // Assert + mocks.VerifyAll(); // Expect not calls on 'observer' + } + + [Test] + public void PipingCalculationNotifyObservers_AttachedOnPipingCalculationContext_ObserverNotified() + { + // Setup + var mocks = new MockRepository(); + var observer = mocks.StrictMock(); + observer.Expect(o => o.UpdateObserver()); + mocks.ReplayAll(); + + var group = new PipingCalculationGroup(); + var presentationObject = new PipingCalculationGroupContext(group, + Enumerable.Empty(), + Enumerable.Empty()); + presentationObject.Attach(observer); + + // Call + group.NotifyObservers(); + + // Assert + mocks.VerifyAll(); + } + } +} \ No newline at end of file Index: Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/PresentationObjects/PipingCalculationsTreeFolderTest.cs =================================================================== diff -u -red0b4ea830beb801bcc0e3eb5b28993001ed2981 -r495647ee1c652fecc15eea7fefeab29ae01347fe --- Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/PresentationObjects/PipingCalculationsTreeFolderTest.cs (.../PipingCalculationsTreeFolderTest.cs) (revision ed0b4ea830beb801bcc0e3eb5b28993001ed2981) +++ Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/PresentationObjects/PipingCalculationsTreeFolderTest.cs (.../PipingCalculationsTreeFolderTest.cs) (revision 495647ee1c652fecc15eea7fefeab29ae01347fe) @@ -40,22 +40,21 @@ CollectionAssert.AreEqual(failureMechanism.SoilProfiles, pipingCalculationContext.AvailablePipingSoilProfiles); } CollectionAssert.AreEqual(failureMechanism.Calculations, calculationPresentationObjects - .Select(pci => pci.WrappedPipingCalculation) + .Select(pci => pci.WrappedData) .ToArray()); Assert.AreEqual(TreeFolderCategory.General, calculationsFolder.Category); } [Test] - public void ParameteredConstructor_FailureMechanismWithOneEmptyCalculationGroup_ExpectedValues() + public void ParameteredConstructor_FailureMechanismWithOneCalculationGroup_ExpectedValues() { // Setup const string folderName = "Berekeningen"; - - var group = new PipingCalculationGroup(); - var failureMechanism = new PipingFailureMechanism(); failureMechanism.Calculations.Clear(); - failureMechanism.Calculations.Add(group); + failureMechanism.Calculations.Add(new PipingCalculationGroup()); + AddTestSurfaceLines(failureMechanism); + AddTestSoilProfiles(failureMechanism); // Call var calculationsFolder = new PipingCalculationsTreeFolder(folderName, failureMechanism); @@ -67,7 +66,17 @@ object[] contentsAsArray = calculationsFolder.Contents.OfType().ToArray(); Assert.AreEqual(1, contentsAsArray.Length); - CollectionAssert.AreEqual(new[]{group}, contentsAsArray); + var groupPresentationObjects = contentsAsArray.Cast() + .ToArray(); + foreach (var groupContext in groupPresentationObjects) + { + CollectionAssert.AreEqual(failureMechanism.SurfaceLines, groupContext.AvailablePipingSurfaceLines); + CollectionAssert.AreEqual(failureMechanism.SoilProfiles, groupContext.AvailablePipingSoilProfiles); + } + CollectionAssert.AreEqual(failureMechanism.Calculations, groupPresentationObjects + .Select(gc => gc.WrappedData) + .ToArray()); + Assert.AreEqual(TreeFolderCategory.General, calculationsFolder.Category); } private void AddTestSurfaceLines(PipingFailureMechanism failureMechanism) Index: Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/PresentationObjects/PipingContextTest.cs =================================================================== diff -u --- Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/PresentationObjects/PipingContextTest.cs (revision 0) +++ Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/PresentationObjects/PipingContextTest.cs (revision 495647ee1c652fecc15eea7fefeab29ae01347fe) @@ -0,0 +1,177 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +using Core.Common.Base; +using NUnit.Framework; +using Rhino.Mocks; +using Ringtoets.Piping.Calculation.TestUtil; +using Ringtoets.Piping.Data; +using Ringtoets.Piping.Forms.PresentationObjects; + +namespace Ringtoets.Piping.Forms.Test.PresentationObjects +{ + [TestFixture] + public class PipingContextTest + { + [Test] + public void ParameterdConstrcutor_ExpectedValues() + { + // Setup + RingtoetsPipingSurfaceLine[] surfaceLines = { + new RingtoetsPipingSurfaceLine(), + new RingtoetsPipingSurfaceLine(), + }; + + PipingSoilProfile[] soilProfiles = { + new TestPipingSoilProfile(), + new TestPipingSoilProfile() + }; + + var target = new ObserveableObject(); + + // Call + var context = new SimplePipingContext(target, surfaceLines, soilProfiles); + + // Assert + Assert.IsInstanceOf(context); + Assert.AreSame(surfaceLines, context.AvailablePipingSurfaceLines, + "It is vital that the iterator should be identical to the collection, in order to stay in sync when items are added or removed."); + Assert.AreSame(soilProfiles, context.AvailablePipingSoilProfiles, + "It is vital that the iterator should be identical to the collection, in order to stay in sync when items are added or removed."); + Assert.AreSame(target, context.WrappedData); + } + + [Test] + public void ParameteredConstructor_DataIsNull_ThrowArgumentNullException() + { + // Setup + + // Call + TestDelegate call = () => new SimplePipingContext(null, + Enumerable.Empty(), + Enumerable.Empty()); + + // Assert + var exception = Assert.Throws(call); + string customMessage = exception.Message.Split(new [] { Environment.NewLine }, StringSplitOptions.None)[0]; + Assert.AreEqual("Het piping data object mag niet 'null' zijn.", customMessage); + } + + [Test] + public void ParameteredConstructor_SurfaceLinesIsNull_ThrowArgumentNullException() + { + // Setup + + // Call + TestDelegate call = () => new SimplePipingContext(new ObserveableObject(), + null, + Enumerable.Empty()); + + // Assert + var exception = Assert.Throws(call); + string customMessage = exception.Message.Split(new[] { Environment.NewLine }, StringSplitOptions.None)[0]; + Assert.AreEqual("De verzameling van profielmetingen mag niet 'null' zijn.", customMessage); + } + + [Test] + public void ParameteredConstructor_ProfilesIsNull_ThrowArgumentNullException() + { + // Setup + + // Call + TestDelegate call = () => new SimplePipingContext(new ObserveableObject(), + Enumerable.Empty(), + null); + + // Assert + var exception = Assert.Throws(call); + string customMessage = exception.Message.Split(new[] { Environment.NewLine }, StringSplitOptions.None)[0]; + Assert.AreEqual("De verzameling van ondergrondschematiseringen mag niet 'null' zijn.", customMessage); + } + + [Test] + public void NotifyObservers_HasPipingCalculationAndObserverAttached_NotifyObserver() + { + // Setup + var mocks = new MockRepository(); + var observer = mocks.StrictMock(); + observer.Expect(o => o.UpdateObserver()); + mocks.ReplayAll(); + + var target = new ObserveableObject(); + + var presentationObject = new SimplePipingContext(target, + Enumerable.Empty(), + Enumerable.Empty()); + + presentationObject.Attach(observer); + + // Call + presentationObject.NotifyObservers(); + + // Assert + mocks.VerifyAll(); + } + + [Test] + public void NotifyObservers_HasPipingCalculationAndObserverDetached_NoCallsOnObserver() + { + // Setup + var mocks = new MockRepository(); + var observer = mocks.StrictMock(); + mocks.ReplayAll(); + + var target = new ObserveableObject(); + + var presentationObject = new SimplePipingContext(target, + Enumerable.Empty(), + Enumerable.Empty()); + presentationObject.Attach(observer); + presentationObject.Detach(observer); + + // Call + presentationObject.NotifyObservers(); + + // Assert + mocks.VerifyAll(); // Expect not calls on 'observer' + } + + [Test] + public void PipingCalculationNotifyObservers_AttachedOnPipingCalculationContext_ObserverNotified() + { + // Setup + var mocks = new MockRepository(); + var observer = mocks.StrictMock(); + observer.Expect(o => o.UpdateObserver()); + mocks.ReplayAll(); + + var target = new ObserveableObject(); + + var presentationObject = new SimplePipingContext(target, + Enumerable.Empty(), + Enumerable.Empty()); + presentationObject.Attach(observer); + + // Call + target.NotifyObservers(); + + // Assert + mocks.VerifyAll(); + } + + private class SimplePipingContext : PipingContext where T : IObservable + { + public SimplePipingContext(T target, IEnumerable surfaceLines, IEnumerable soilProfiles) + : base(target, surfaceLines, soilProfiles) + { + + } + } + + private class ObserveableObject : Observable + { + + } + } +} \ No newline at end of file Index: Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/PropertyClasses/PipingCalculationContextPropertiesTest.cs =================================================================== diff -u -rfb32e3411873a7b4c567792b9f335eba462e2702 -r495647ee1c652fecc15eea7fefeab29ae01347fe --- Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/PropertyClasses/PipingCalculationContextPropertiesTest.cs (.../PipingCalculationContextPropertiesTest.cs) (revision fb32e3411873a7b4c567792b9f335eba462e2702) +++ Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/PropertyClasses/PipingCalculationContextPropertiesTest.cs (.../PipingCalculationContextPropertiesTest.cs) (revision 495647ee1c652fecc15eea7fefeab29ae01347fe) @@ -1,4 +1,6 @@ -using Core.Common.Base; +using System.Linq; + +using Core.Common.Base; using Core.Common.Gui; using NUnit.Framework; using Rhino.Mocks; @@ -35,10 +37,9 @@ var properties = new PipingCalculationContextProperties { - Data = new PipingCalculationContext - { - WrappedPipingCalculation = calculation - } + Data = new PipingCalculationContext(calculation, + Enumerable.Empty(), + Enumerable.Empty()) }; // Call & Assert @@ -59,10 +60,9 @@ var properties = new PipingCalculationContextProperties { - Data = new PipingCalculationContext - { - WrappedPipingCalculation = calculation - } + Data = new PipingCalculationContext(calculation, + Enumerable.Empty(), + Enumerable.Empty()) }; // Call & Assert @@ -85,18 +85,19 @@ var calculation = new PipingCalculation(); calculation.Attach(projectObserver); - // Call - new PipingCalculationContextProperties + var properties = new PipingCalculationContextProperties { - Data = new PipingCalculationContext - { - WrappedPipingCalculation = calculation - }, - Name = string.Empty + Data = new PipingCalculationContext(calculation, + Enumerable.Empty(), + Enumerable.Empty()) }; + // Call + const string newName = "Some new cool pretty name"; + properties.Name = newName; + // Assert - Assert.AreEqual(string.Empty, calculation.Name); + Assert.AreEqual(newName, calculation.Name); mocks.VerifyAll(); } Index: Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/PropertyClasses/PipingCalculationGroupContextPropertiesTest.cs =================================================================== diff -u --- Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/PropertyClasses/PipingCalculationGroupContextPropertiesTest.cs (revision 0) +++ Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/PropertyClasses/PipingCalculationGroupContextPropertiesTest.cs (revision 495647ee1c652fecc15eea7fefeab29ae01347fe) @@ -0,0 +1,73 @@ +using System.Linq; + +using Core.Common.Base; +using Core.Common.Gui; + +using NUnit.Framework; + +using Rhino.Mocks; + +using Ringtoets.Piping.Data; +using Ringtoets.Piping.Forms.PresentationObjects; +using Ringtoets.Piping.Forms.PropertyClasses; + +namespace Ringtoets.Piping.Forms.Test.PropertyClasses +{ + [TestFixture] + public class PipingCalculationGroupContextPropertiesTest + { + [Test] + public void DefaultConstructor_ExpectedValues() + { + // Call + var properties = new PipingCalculationGroupContextProperties(); + + // Assert + Assert.IsInstanceOf>(properties); + Assert.IsNull(properties.Data); + } + + [Test] + public void GetProperties_WithData_ReturnTheSameValueAsData() + { + // Setup + var group = new PipingCalculationGroup(); + + var properties = new PipingCalculationGroupContextProperties + { + Data = new PipingCalculationGroupContext(group, + Enumerable.Empty(), + Enumerable.Empty()) + }; + + // Call & Assert + Assert.AreEqual(group.Name, properties.Name); + } + + [Test] + public void SetProperties_WithData_UpdateDataAndNotifyObservers() + { + // Setup + var mocks = new MockRepository(); + var projectObserver = mocks.StrictMock(); + projectObserver.Expect(o => o.UpdateObserver()); + mocks.ReplayAll(); + + var group = new PipingCalculationGroup(); + group.Attach(projectObserver); + + var properties = new PipingCalculationGroupContextProperties + { + Data = new PipingCalculationGroupContext(group, + Enumerable.Empty(), + Enumerable.Empty()) + }; + + // Call & Assert + const string name = "cool new name!"; + properties.Name = name; + Assert.AreEqual(name, group.Name); + mocks.VerifyAll(); + } + } +} \ No newline at end of file Index: Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/Ringtoets.Piping.Forms.Test.csproj =================================================================== diff -u -r2f3973a8a6122be9d4c0a0db7a27dc3ca68580e3 -r495647ee1c652fecc15eea7fefeab29ae01347fe --- Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/Ringtoets.Piping.Forms.Test.csproj (.../Ringtoets.Piping.Forms.Test.csproj) (revision 2f3973a8a6122be9d4c0a0db7a27dc3ca68580e3) +++ Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/Ringtoets.Piping.Forms.Test.csproj (.../Ringtoets.Piping.Forms.Test.csproj) (revision 495647ee1c652fecc15eea7fefeab29ae01347fe) @@ -59,11 +59,15 @@ + + + + - + @@ -127,10 +131,18 @@ {7cd038e1-e111-4969-aced-22c5bd2974e1} Ringtoets.Piping.Forms + + {10b8d63d-87e8-46df-aca9-a8cf22ee8fb5} + Ringtoets.Piping.Service + {27E0A5C9-3ABF-426A-A3DA-7D0B83A218C8} Ringtoets.Piping.Calculation.TestUtil + + {955e574d-67ce-4347-aa6b-7df8a04ed754} + Ringtoets.Piping.Data.TestUtil + Index: Ringtoets/Piping/test/Ringtoets.Piping.Plugin.Test/PipingGuiPluginTest.cs =================================================================== diff -u -rbc238ea43fae81b8a49aa2bdb2c8349815c46039 -r495647ee1c652fecc15eea7fefeab29ae01347fe --- Ringtoets/Piping/test/Ringtoets.Piping.Plugin.Test/PipingGuiPluginTest.cs (.../PipingGuiPluginTest.cs) (revision bc238ea43fae81b8a49aa2bdb2c8349815c46039) +++ Ringtoets/Piping/test/Ringtoets.Piping.Plugin.Test/PipingGuiPluginTest.cs (.../PipingGuiPluginTest.cs) (revision 495647ee1c652fecc15eea7fefeab29ae01347fe) @@ -40,14 +40,20 @@ PropertyInfo[] propertyInfos = guiPlugin.GetPropertyInfos().ToArray(); // assert - Assert.AreEqual(5, propertyInfos.Length); + Assert.AreEqual(6, propertyInfos.Length); var pipingCalculationContextProperties = propertyInfos.Single(pi => pi.ObjectType == typeof(PipingCalculationContext)); Assert.AreEqual(typeof(PipingCalculationContextProperties), pipingCalculationContextProperties.PropertyType); Assert.IsNull(pipingCalculationContextProperties.AdditionalDataCheck); Assert.IsNull(pipingCalculationContextProperties.GetObjectPropertiesData); Assert.IsNull(pipingCalculationContextProperties.AfterCreate); + var pipingCalculationGroupProperties = propertyInfos.Single(pi => pi.ObjectType == typeof(PipingCalculationGroupContext)); + Assert.AreEqual(typeof(PipingCalculationGroupContextProperties), pipingCalculationGroupProperties.PropertyType); + Assert.IsNull(pipingCalculationGroupProperties.AdditionalDataCheck); + Assert.IsNull(pipingCalculationGroupProperties.GetObjectPropertiesData); + Assert.IsNull(pipingCalculationGroupProperties.AfterCreate); + var pipingInputContextProperties = propertyInfos.Single(pi => pi.ObjectType == typeof(PipingInputContext)); Assert.AreEqual(typeof(PipingInputContextProperties), pipingInputContextProperties.PropertyType); Assert.IsNull(pipingInputContextProperties.AdditionalDataCheck); @@ -98,12 +104,13 @@ ITreeNodePresenter[] nodePresenters = guiPlugin.GetProjectTreeViewNodePresenters().ToArray(); // assert - Assert.AreEqual(10, nodePresenters.Length); + Assert.AreEqual(11, nodePresenters.Length); Assert.IsTrue(nodePresenters.Any(np => np is PipingSurfaceLineCollectionNodePresenter)); Assert.IsTrue(nodePresenters.Any(np => np is PipingSurfaceLineNodePresenter)); Assert.IsTrue(nodePresenters.Any(np => np is PipingSoilProfileCollectionNodePresenter)); Assert.IsTrue(nodePresenters.Any(np => np is PipingSoilProfileNodePresenter)); Assert.IsTrue(nodePresenters.Any(np => np is PipingCalculationContextNodePresenter)); + Assert.IsTrue(nodePresenters.Any(np => np is PipingCalculationGroupContextNodePresenter)); Assert.IsTrue(nodePresenters.Any(np => np is PipingInputContextNodePresenter)); Assert.IsTrue(nodePresenters.Any(np => np is PipingFailureMechanismNodePresenter)); Assert.IsTrue(nodePresenters.Any(np => np is PipingOutputNodePresenter)); Index: Ringtoets/Piping/test/Ringtoets.Piping.Service.Test/PipingCalculationActivityTest.cs =================================================================== diff -u -rfb32e3411873a7b4c567792b9f335eba462e2702 -r495647ee1c652fecc15eea7fefeab29ae01347fe --- Ringtoets/Piping/test/Ringtoets.Piping.Service.Test/PipingCalculationActivityTest.cs (.../PipingCalculationActivityTest.cs) (revision fb32e3411873a7b4c567792b9f335eba462e2702) +++ Ringtoets/Piping/test/Ringtoets.Piping.Service.Test/PipingCalculationActivityTest.cs (.../PipingCalculationActivityTest.cs) (revision 495647ee1c652fecc15eea7fefeab29ae01347fe) @@ -9,7 +9,7 @@ using Ringtoets.Piping.Calculation.TestUtil; using Ringtoets.Piping.Data; -using Ringtoets.Piping.Service.Test.TestHelpers; +using Ringtoets.Piping.Data.TestUtil; namespace Ringtoets.Piping.Service.Test { Index: Ringtoets/Piping/test/Ringtoets.Piping.Service.Test/PipingCalculationServiceTest.cs =================================================================== diff -u -rfb32e3411873a7b4c567792b9f335eba462e2702 -r495647ee1c652fecc15eea7fefeab29ae01347fe --- Ringtoets/Piping/test/Ringtoets.Piping.Service.Test/PipingCalculationServiceTest.cs (.../PipingCalculationServiceTest.cs) (revision fb32e3411873a7b4c567792b9f335eba462e2702) +++ Ringtoets/Piping/test/Ringtoets.Piping.Service.Test/PipingCalculationServiceTest.cs (.../PipingCalculationServiceTest.cs) (revision 495647ee1c652fecc15eea7fefeab29ae01347fe) @@ -6,9 +6,8 @@ using NUnit.Framework; using Ringtoets.Piping.Data; +using Ringtoets.Piping.Data.TestUtil; -using Ringtoets.Piping.Service.Test.TestHelpers; - namespace Ringtoets.Piping.Service.Test { public class PipingCalculationServiceTest Index: Ringtoets/Piping/test/Ringtoets.Piping.Service.Test/Ringtoets.Piping.Service.Test.csproj =================================================================== diff -u -r2f3973a8a6122be9d4c0a0db7a27dc3ca68580e3 -r495647ee1c652fecc15eea7fefeab29ae01347fe --- Ringtoets/Piping/test/Ringtoets.Piping.Service.Test/Ringtoets.Piping.Service.Test.csproj (.../Ringtoets.Piping.Service.Test.csproj) (revision 2f3973a8a6122be9d4c0a0db7a27dc3ca68580e3) +++ Ringtoets/Piping/test/Ringtoets.Piping.Service.Test/Ringtoets.Piping.Service.Test.csproj (.../Ringtoets.Piping.Service.Test.csproj) (revision 495647ee1c652fecc15eea7fefeab29ae01347fe) @@ -57,7 +57,6 @@ - @@ -84,6 +83,10 @@ {27E0A5C9-3ABF-426A-A3DA-7D0B83A218C8} Ringtoets.Piping.Calculation.TestUtil + + {955e574d-67ce-4347-aa6b-7df8a04ed754} + Ringtoets.Piping.Data.TestUtil + Fisheye: Tag 495647ee1c652fecc15eea7fefeab29ae01347fe refers to a dead (removed) revision in file `Ringtoets/Piping/test/Ringtoets.Piping.Service.Test/TestHelpers/PipingCalculationFactory.cs'. Fisheye: No comparison available. Pass `N' to diff?