Index: Riskeer/GrassCoverErosionInwards/test/Riskeer.GrassCoverErosionInwards.Forms.Test/Views/GrassCoverErosionInwardsCalculationsViewTest.cs =================================================================== diff -u -r35ed476374d2ea25474e5798336d051531829319 -r72b33880a86de98a6d4c49394fc5a71e94afd00b --- Riskeer/GrassCoverErosionInwards/test/Riskeer.GrassCoverErosionInwards.Forms.Test/Views/GrassCoverErosionInwardsCalculationsViewTest.cs (.../GrassCoverErosionInwardsCalculationsViewTest.cs) (revision 35ed476374d2ea25474e5798336d051531829319) +++ Riskeer/GrassCoverErosionInwards/test/Riskeer.GrassCoverErosionInwards.Forms.Test/Views/GrassCoverErosionInwardsCalculationsViewTest.cs (.../GrassCoverErosionInwardsCalculationsViewTest.cs) (revision 72b33880a86de98a6d4c49394fc5a71e94afd00b) @@ -27,6 +27,7 @@ using Core.Common.Base; using Core.Common.Base.Data; using Core.Common.Base.Geometry; +using Core.Common.Controls.DataGrid; using Core.Common.Controls.Views; using Core.Common.TestUtil; using NUnit.Extensions.Forms; @@ -570,6 +571,160 @@ mocks.VerifyAll(); } + [Test] + public void GivenCalculationsView_WhenGenerateScenariosButtonClicked_ThenShowViewWithDikeProfiles() + { + // Given + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + ConfigureHydraulicBoundaryDatabase(assessmentSection); + mocks.ReplayAll(); + + const string arbitraryFilePath = "path"; + var failureMechanism = new GrassCoverErosionInwardsFailureMechanism(); + failureMechanism.DikeProfiles.AddRange(new[] + { + DikeProfileTestFactory.CreateDikeProfile("1", "Profiel 1", new Point2D(0.0, 0.0)), + DikeProfileTestFactory.CreateDikeProfile("2", "Profiel 2", new Point2D(5.0, 0.0)) + }, arbitraryFilePath); + + ShowCalculationsView(failureMechanism.CalculationsGroup, failureMechanism, assessmentSection); + + var button = new ButtonTester("generateButton", testForm); + + GrassCoverErosionInwardsDikeProfileSelectionDialog selectionDialog = null; + DataGridViewControl grid = null; + var rows = 0; + DialogBoxHandler = (name, wnd) => + { + selectionDialog = (GrassCoverErosionInwardsDikeProfileSelectionDialog) new FormTester(name).TheObject; + grid = (DataGridViewControl) new ControlTester("DataGridViewControl", selectionDialog).TheObject; + rows = grid.Rows.Count; + + new ButtonTester("CustomCancelButton", selectionDialog).Click(); + }; + + // When + button.Click(); + + // Then + Assert.NotNull(selectionDialog); + Assert.NotNull(grid); + Assert.AreEqual(failureMechanism.DikeProfiles.Count, rows); + mocks.VerifyAll(); + } + + [Test] + public void GivenCalculationsViewGenerateCalculationsButtonClicked_WhenDialogClosed_ThenNotifyCalculationGroup() + { + // Given + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + ConfigureHydraulicBoundaryDatabase(assessmentSection); + var observer = mocks.StrictMock(); + observer.Expect(o => o.UpdateObserver()); + mocks.ReplayAll(); + + const string arbitraryFilePath = "path"; + var failureMechanism = new GrassCoverErosionInwardsFailureMechanism(); + failureMechanism.DikeProfiles.AddRange(new[] + { + DikeProfileTestFactory.CreateDikeProfile("1", "Profiel 1", new Point2D(0.0, 0.0)), + DikeProfileTestFactory.CreateDikeProfile("2", "Profiel 2", new Point2D(5.0, 0.0)) + }, arbitraryFilePath); + failureMechanism.CalculationsGroup.Attach(observer); + + ShowCalculationsView(failureMechanism.CalculationsGroup, failureMechanism, assessmentSection); + + var button = new ButtonTester("generateButton", testForm); + + DialogBoxHandler = (name, wnd) => + { + var selectionDialog = (GrassCoverErosionInwardsDikeProfileSelectionDialog)new FormTester(name).TheObject; + var selectionView = (DataGridViewControl)new ControlTester("DataGridViewControl", selectionDialog).TheObject; + selectionView.Rows[0].Cells[0].Value = true; + + // When + new ButtonTester("DoForSelectedButton", selectionDialog).Click(); + }; + + button.Click(); + + // Then + mocks.VerifyAll(); + } + + [Test] + public void GivenCalculationsViewGenerateCalculationsButtonClicked_WhenDikeProfileSelectedAndDialogClosed_ThenUpdateSectionResultScenarios() + { + // Given + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + ConfigureHydraulicBoundaryDatabase(assessmentSection); + mocks.ReplayAll(); + + GrassCoverErosionInwardsFailureMechanism failureMechanism = ConfigureFailureMechanism(); + + ShowCalculationsView(failureMechanism.CalculationsGroup, failureMechanism, assessmentSection); + + var button = new ButtonTester("generateButton", testForm); + + DialogBoxHandler = (name, wnd) => + { + var selectionDialog = (GrassCoverErosionInwardsDikeProfileSelectionDialog) new FormTester(name).TheObject; + var selectionView = (DataGridViewControl)new ControlTester("DataGridViewControl", selectionDialog).TheObject; + selectionView.Rows[0].Cells[0].Value = true; + + // When + new ButtonTester("DoForSelectedButton", selectionDialog).Click(); + }; + + button.Click(); + + // Then + GrassCoverErosionInwardsCalculationScenario[] calculationScenarios = failureMechanism.Calculations.OfType().ToArray(); + GrassCoverErosionInwardsFailureMechanismSectionResult failureMechanismSectionResult1 = failureMechanism.SectionResults.First(); + GrassCoverErosionInwardsFailureMechanismSectionResult failureMechanismSectionResult2 = failureMechanism.SectionResults.ElementAt(1); + + Assert.AreEqual(1, failureMechanismSectionResult1.GetCalculationScenarios(calculationScenarios).Count()); + CollectionAssert.IsEmpty(failureMechanismSectionResult2.GetCalculationScenarios(calculationScenarios)); + mocks.VerifyAll(); + } + + [Test] + public void GivenCalculationsViewGenerateCalculationsCancelButtonClicked_WhenDialogClosed_CalculationsNotUpdatedAndCalculationGroupNotNotified() + { + // Given + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + ConfigureHydraulicBoundaryDatabase(assessmentSection); + var observer = mocks.StrictMock(); + mocks.ReplayAll(); + + GrassCoverErosionInwardsFailureMechanism failureMechanism = ConfigureFailureMechanism(); + ShowCalculationsView(failureMechanism.CalculationsGroup, failureMechanism, assessmentSection); + + failureMechanism.CalculationsGroup.Attach(observer); + + var button = new ButtonTester("generateButton", testForm); + + DialogBoxHandler = (name, wnd) => + { + var selectionDialog = (GrassCoverErosionInwardsDikeProfileSelectionDialog)new FormTester(name).TheObject; + var selectionView = (DataGridViewControl)new ControlTester("DataGridViewControl", selectionDialog).TheObject; + selectionView.Rows[0].Cells[0].Value = true; + + // When + new ButtonTester("CustomCancelButton", selectionDialog).Click(); + }; + + button.Click(); + + // Then + CollectionAssert.IsEmpty(failureMechanism.Calculations); + mocks.VerifyAll(); // No observer notified + } + public override void Setup() { base.Setup(); Index: Riskeer/MacroStabilityInwards/src/Riskeer.MacroStabilityInwards.Forms/Views/MacroStabilityInwardsCalculationsView.cs =================================================================== diff -u -r4aa24b0114123b208d69cbf6645152b02261687f -r72b33880a86de98a6d4c49394fc5a71e94afd00b --- Riskeer/MacroStabilityInwards/src/Riskeer.MacroStabilityInwards.Forms/Views/MacroStabilityInwardsCalculationsView.cs (.../MacroStabilityInwardsCalculationsView.cs) (revision 4aa24b0114123b208d69cbf6645152b02261687f) +++ Riskeer/MacroStabilityInwards/src/Riskeer.MacroStabilityInwards.Forms/Views/MacroStabilityInwardsCalculationsView.cs (.../MacroStabilityInwardsCalculationsView.cs) (revision 72b33880a86de98a6d4c49394fc5a71e94afd00b) @@ -136,17 +136,23 @@ { var calculationGroup = (CalculationGroup) Data; - var dialog = new MacroStabilityInwardsSurfaceLineSelectionDialog(Parent, FailureMechanism.SurfaceLines); - dialog.ShowDialog(); - IEnumerable calculationsStructure = MacroStabilityInwardsCalculationConfigurationHelper.GenerateCalculationItemsStructure( - dialog.SelectedItems, - FailureMechanism.StochasticSoilModels); - foreach (ICalculationBase item in calculationsStructure) + using (var dialog = new MacroStabilityInwardsSurfaceLineSelectionDialog(Parent, FailureMechanism.SurfaceLines)) { - calculationGroup.Children.Add(item); - } + dialog.ShowDialog(); - calculationGroup.NotifyObservers(); + if (dialog.SelectedItems.Any()) + { + IEnumerable calculationsStructure = MacroStabilityInwardsCalculationConfigurationHelper.GenerateCalculationItemsStructure( + dialog.SelectedItems, + FailureMechanism.StochasticSoilModels); + foreach (ICalculationBase item in calculationsStructure) + { + calculationGroup.Children.Add(item); + } + + calculationGroup.NotifyObservers(); + } + } } protected override void InitializeDataGridView() Index: Riskeer/MacroStabilityInwards/test/Riskeer.MacroStabilityInwards.Forms.Test/Views/MacroStabilityInwardsCalculationsViewTest.cs =================================================================== diff -u -r1d87f0ce3727b1ef85f5d9e739bc642bddf960a4 -r72b33880a86de98a6d4c49394fc5a71e94afd00b --- Riskeer/MacroStabilityInwards/test/Riskeer.MacroStabilityInwards.Forms.Test/Views/MacroStabilityInwardsCalculationsViewTest.cs (.../MacroStabilityInwardsCalculationsViewTest.cs) (revision 1d87f0ce3727b1ef85f5d9e739bc642bddf960a4) +++ Riskeer/MacroStabilityInwards/test/Riskeer.MacroStabilityInwards.Forms.Test/Views/MacroStabilityInwardsCalculationsViewTest.cs (.../MacroStabilityInwardsCalculationsViewTest.cs) (revision 72b33880a86de98a6d4c49394fc5a71e94afd00b) @@ -290,171 +290,6 @@ } [Test] - public void GivenCalculationsView_WhenGenerateScenariosButtonClicked_ThenShowViewWithSurfaceLines() - { - // Given - var mocks = new MockRepository(); - var assessmentSection = mocks.Stub(); - ConfigureHydraulicBoundaryDatabase(assessmentSection); - mocks.ReplayAll(); - - const string arbitraryFilePath = "path"; - var failureMechanism = new MacroStabilityInwardsFailureMechanism(); - failureMechanism.SurfaceLines.AddRange(new[] - { - new MacroStabilityInwardsSurfaceLine("Line A"), - new MacroStabilityInwardsSurfaceLine("Line B") - }, arbitraryFilePath); - failureMechanism.StochasticSoilModels.AddRange(new[] - { - MacroStabilityInwardsStochasticSoilModelTestFactory.CreateValidStochasticSoilModel() - }, arbitraryFilePath); - - ShowMacroStabilityInwardsCalculationsView(failureMechanism.CalculationsGroup, failureMechanism, assessmentSection); - - var button = new ButtonTester("generateButton", testForm); - - MacroStabilityInwardsSurfaceLineSelectionDialog selectionDialog = null; - DataGridViewControl grid = null; - DialogBoxHandler = (name, wnd) => - { - selectionDialog = (MacroStabilityInwardsSurfaceLineSelectionDialog)new FormTester(name).TheObject; - grid = (DataGridViewControl)new ControlTester("DataGridViewControl", selectionDialog).TheObject; - - new ButtonTester("CustomCancelButton", selectionDialog).Click(); - }; - - // When - button.Click(); - - // Then - Assert.NotNull(selectionDialog); - Assert.NotNull(grid); - Assert.AreEqual(2, grid.Rows.Count); - mocks.VerifyAll(); - } - - [Test] - [TestCase("DoForSelectedButton")] - [TestCase("CustomCancelButton")] - public void GivenCalculationsViewGenerateScenariosButtonClicked_WhenDialogClosed_ThenNotifyCalculationGroup(string buttonName) - { - // Given - var mocks = new MockRepository(); - var assessmentSection = mocks.Stub(); - ConfigureHydraulicBoundaryDatabase(assessmentSection); - var observer = mocks.StrictMock(); - observer.Expect(o => o.UpdateObserver()); - mocks.ReplayAll(); - - const string arbitraryFilePath = "path"; - var failureMechanism = new MacroStabilityInwardsFailureMechanism(); - failureMechanism.SurfaceLines.AddRange(new[] - { - new MacroStabilityInwardsSurfaceLine("Line A"), - new MacroStabilityInwardsSurfaceLine("Line B") - }, arbitraryFilePath); - failureMechanism.StochasticSoilModels.AddRange(new[] - { - MacroStabilityInwardsStochasticSoilModelTestFactory.CreateValidStochasticSoilModel() - }, arbitraryFilePath); - failureMechanism.CalculationsGroup.Attach(observer); - - ShowMacroStabilityInwardsCalculationsView(failureMechanism.CalculationsGroup, failureMechanism, assessmentSection); - - var button = new ButtonTester("generateButton", testForm); - - DialogBoxHandler = (name, wnd) => - { - var selectionDialog = (MacroStabilityInwardsSurfaceLineSelectionDialog)new FormTester(name).TheObject; - var selectionView = (DataGridViewControl)new ControlTester("DataGridViewControl", selectionDialog).TheObject; - selectionView.Rows[0].Cells[0].Value = true; - - // When - new ButtonTester(buttonName, selectionDialog).Click(); - }; - - button.Click(); - - // Then - mocks.VerifyAll(); - } - - [Test] - public void GivenCalculationsViewGenerateScenariosButtonClicked_WhenSurfaceLineSelectedAndDialogClosed_ThenUpdateSectionResultScenarios() - { - // Given - var mocks = new MockRepository(); - var assessmentSection = mocks.Stub(); - ConfigureHydraulicBoundaryDatabase(assessmentSection); - mocks.ReplayAll(); - - MacroStabilityInwardsFailureMechanism failureMechanism = ConfigureSimpleFailureMechanism(); - - ShowMacroStabilityInwardsCalculationsView(failureMechanism.CalculationsGroup, failureMechanism, assessmentSection); - - var button = new ButtonTester("generateButton", testForm); - - DialogBoxHandler = (name, wnd) => - { - var selectionDialog = (MacroStabilityInwardsSurfaceLineSelectionDialog)new FormTester(name).TheObject; - var selectionView = (DataGridViewControl)new ControlTester("DataGridViewControl", selectionDialog).TheObject; - selectionView.Rows[0].Cells[0].Value = true; - - // When - new ButtonTester("DoForSelectedButton", selectionDialog).Click(); - }; - - button.Click(); - - // Then - MacroStabilityInwardsCalculationScenario[] calculationScenarios = failureMechanism.Calculations.OfType().ToArray(); - MacroStabilityInwardsFailureMechanismSectionResult failureMechanismSectionResult1 = failureMechanism.SectionResults.First(); - MacroStabilityInwardsFailureMechanismSectionResult failureMechanismSectionResult2 = failureMechanism.SectionResults.ElementAt(1); - - Assert.AreEqual(2, failureMechanismSectionResult1.GetCalculationScenarios(calculationScenarios).Count()); - - foreach (MacroStabilityInwardsCalculationScenario calculationScenario in failureMechanismSectionResult1.GetCalculationScenarios(calculationScenarios)) - { - Assert.IsInstanceOf(calculationScenario); - } - - CollectionAssert.IsEmpty(failureMechanismSectionResult2.GetCalculationScenarios(calculationScenarios)); - mocks.VerifyAll(); - } - - [Test] - public void GivenCalculationsViewGenerateScenariosCancelButtonClicked_WhenDialogClosed_CalculationsNotUpdated() - { - // Given - var mocks = new MockRepository(); - var assessmentSection = mocks.Stub(); - ConfigureHydraulicBoundaryDatabase(assessmentSection); - mocks.ReplayAll(); - - MacroStabilityInwardsFailureMechanism failureMechanism = ConfigureSimpleFailureMechanism(); - ShowMacroStabilityInwardsCalculationsView(failureMechanism.CalculationsGroup, failureMechanism, assessmentSection); - - var button = new ButtonTester("generateButton", testForm); - - DialogBoxHandler = (name, wnd) => - { - var selectionDialog = (MacroStabilityInwardsSurfaceLineSelectionDialog)new FormTester(name).TheObject; - var selectionView = (DataGridViewControl)new ControlTester("DataGridViewControl", selectionDialog).TheObject; - selectionView.Rows[0].Cells[0].Value = true; - - // When - new ButtonTester("CustomCancelButton", selectionDialog).Click(); - }; - - button.Click(); - - // Then - CollectionAssert.IsEmpty(failureMechanism.Calculations); - mocks.VerifyAll(); - } - - [Test] public void GivenFailureMechanismWithoutSurfaceLinesAndSoilModels_WhenAddSoilModelAndNotify_ThenButtonDisabled() { // Given @@ -777,6 +612,175 @@ mocks.VerifyAll(); } + + [Test] + public void GivenCalculationsView_WhenGenerateScenariosButtonClicked_ThenShowViewWithSurfaceLines() + { + // Given + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + ConfigureHydraulicBoundaryDatabase(assessmentSection); + mocks.ReplayAll(); + + const string arbitraryFilePath = "path"; + var failureMechanism = new MacroStabilityInwardsFailureMechanism(); + failureMechanism.SurfaceLines.AddRange(new[] + { + new MacroStabilityInwardsSurfaceLine("Line A"), + new MacroStabilityInwardsSurfaceLine("Line B") + }, arbitraryFilePath); + failureMechanism.StochasticSoilModels.AddRange(new[] + { + MacroStabilityInwardsStochasticSoilModelTestFactory.CreateValidStochasticSoilModel() + }, arbitraryFilePath); + + ShowMacroStabilityInwardsCalculationsView(failureMechanism.CalculationsGroup, failureMechanism, assessmentSection); + + var button = new ButtonTester("generateButton", testForm); + + MacroStabilityInwardsSurfaceLineSelectionDialog selectionDialog = null; + DataGridViewControl grid = null; + var rows = 0; + DialogBoxHandler = (name, wnd) => + { + selectionDialog = (MacroStabilityInwardsSurfaceLineSelectionDialog)new FormTester(name).TheObject; + grid = (DataGridViewControl)new ControlTester("DataGridViewControl", selectionDialog).TheObject; + rows = grid.Rows.Count; + + new ButtonTester("CustomCancelButton", selectionDialog).Click(); + }; + + // When + button.Click(); + + // Then + Assert.NotNull(selectionDialog); + Assert.NotNull(grid); + Assert.AreEqual(failureMechanism.SurfaceLines.Count, rows); + mocks.VerifyAll(); + } + + [Test] + public void GivenCalculationsViewGenerateScenariosButtonClicked_WhenDialogClosed_ThenNotifyCalculationGroup() + { + // Given + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + ConfigureHydraulicBoundaryDatabase(assessmentSection); + var observer = mocks.StrictMock(); + observer.Expect(o => o.UpdateObserver()); + mocks.ReplayAll(); + + const string arbitraryFilePath = "path"; + var failureMechanism = new MacroStabilityInwardsFailureMechanism(); + failureMechanism.SurfaceLines.AddRange(new[] + { + new MacroStabilityInwardsSurfaceLine("Line A"), + new MacroStabilityInwardsSurfaceLine("Line B") + }, arbitraryFilePath); + failureMechanism.StochasticSoilModels.AddRange(new[] + { + MacroStabilityInwardsStochasticSoilModelTestFactory.CreateValidStochasticSoilModel() + }, arbitraryFilePath); + failureMechanism.CalculationsGroup.Attach(observer); + + ShowMacroStabilityInwardsCalculationsView(failureMechanism.CalculationsGroup, failureMechanism, assessmentSection); + + var button = new ButtonTester("generateButton", testForm); + + DialogBoxHandler = (name, wnd) => + { + var selectionDialog = (MacroStabilityInwardsSurfaceLineSelectionDialog)new FormTester(name).TheObject; + var selectionView = (DataGridViewControl)new ControlTester("DataGridViewControl", selectionDialog).TheObject; + selectionView.Rows[0].Cells[0].Value = true; + + // When + new ButtonTester("DoForSelectedButton", selectionDialog).Click(); + }; + + button.Click(); + + // Then + mocks.VerifyAll(); + } + + [Test] + public void GivenCalculationsViewGenerateScenariosButtonClicked_WhenSurfaceLineSelectedAndDialogClosed_ThenUpdateSectionResultScenarios() + { + // Given + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + ConfigureHydraulicBoundaryDatabase(assessmentSection); + mocks.ReplayAll(); + + MacroStabilityInwardsFailureMechanism failureMechanism = ConfigureSimpleFailureMechanism(); + + ShowMacroStabilityInwardsCalculationsView(failureMechanism.CalculationsGroup, failureMechanism, assessmentSection); + + var button = new ButtonTester("generateButton", testForm); + + DialogBoxHandler = (name, wnd) => + { + var selectionDialog = (MacroStabilityInwardsSurfaceLineSelectionDialog)new FormTester(name).TheObject; + var selectionView = (DataGridViewControl)new ControlTester("DataGridViewControl", selectionDialog).TheObject; + selectionView.Rows[0].Cells[0].Value = true; + + // When + new ButtonTester("DoForSelectedButton", selectionDialog).Click(); + }; + + button.Click(); + + // Then + MacroStabilityInwardsCalculationScenario[] calculationScenarios = failureMechanism.Calculations.OfType().ToArray(); + MacroStabilityInwardsFailureMechanismSectionResult failureMechanismSectionResult1 = failureMechanism.SectionResults.First(); + MacroStabilityInwardsFailureMechanismSectionResult failureMechanismSectionResult2 = failureMechanism.SectionResults.ElementAt(1); + + Assert.AreEqual(2, failureMechanismSectionResult1.GetCalculationScenarios(calculationScenarios).Count()); + + foreach (MacroStabilityInwardsCalculationScenario calculationScenario in failureMechanismSectionResult1.GetCalculationScenarios(calculationScenarios)) + { + Assert.IsInstanceOf(calculationScenario); + } + + CollectionAssert.IsEmpty(failureMechanismSectionResult2.GetCalculationScenarios(calculationScenarios)); + mocks.VerifyAll(); + } + + [Test] + public void GivenCalculationsViewGenerateScenariosCancelButtonClicked_WhenDialogClosed_CalculationsNotUpdatedAndCalculationGroupNotNotified() + { + // Given + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + ConfigureHydraulicBoundaryDatabase(assessmentSection); + var observer = mocks.StrictMock(); + mocks.ReplayAll(); + + MacroStabilityInwardsFailureMechanism failureMechanism = ConfigureSimpleFailureMechanism(); + ShowMacroStabilityInwardsCalculationsView(failureMechanism.CalculationsGroup, failureMechanism, assessmentSection); + + failureMechanism.CalculationsGroup.Attach(observer); + + var button = new ButtonTester("generateButton", testForm); + + DialogBoxHandler = (name, wnd) => + { + var selectionDialog = (MacroStabilityInwardsSurfaceLineSelectionDialog)new FormTester(name).TheObject; + var selectionView = (DataGridViewControl)new ControlTester("DataGridViewControl", selectionDialog).TheObject; + selectionView.Rows[0].Cells[0].Value = true; + + // When + new ButtonTester("CustomCancelButton", selectionDialog).Click(); + }; + + button.Click(); + + // Then + CollectionAssert.IsEmpty(failureMechanism.Calculations); + mocks.VerifyAll(); // No observer notified + } + public override void Setup() { base.Setup(); Index: Riskeer/Piping/src/Riskeer.Piping.Forms/Views/PipingCalculationsView.cs =================================================================== diff -u -r4aa24b0114123b208d69cbf6645152b02261687f -r72b33880a86de98a6d4c49394fc5a71e94afd00b --- Riskeer/Piping/src/Riskeer.Piping.Forms/Views/PipingCalculationsView.cs (.../PipingCalculationsView.cs) (revision 4aa24b0114123b208d69cbf6645152b02261687f) +++ Riskeer/Piping/src/Riskeer.Piping.Forms/Views/PipingCalculationsView.cs (.../PipingCalculationsView.cs) (revision 72b33880a86de98a6d4c49394fc5a71e94afd00b) @@ -140,19 +140,25 @@ { var calculationGroup = (CalculationGroup) Data; - var dialog = new PipingSurfaceLineSelectionDialog(Parent, FailureMechanism.SurfaceLines); - dialog.ShowDialog(); - IEnumerable calculationsStructure = PipingCalculationConfigurationHelper.GenerateCalculationItemsStructure( - dialog.SelectedItems, - FailureMechanism.StochasticSoilModels, - FailureMechanism.GeneralInput); - - foreach (ICalculationBase item in calculationsStructure) + using (var dialog = new PipingSurfaceLineSelectionDialog(Parent, FailureMechanism.SurfaceLines)) { - calculationGroup.Children.Add(item); - } + dialog.ShowDialog(); - calculationGroup.NotifyObservers(); + if (dialog.SelectedItems.Any()) + { + IEnumerable calculationsStructure = PipingCalculationConfigurationHelper.GenerateCalculationItemsStructure( + dialog.SelectedItems, + FailureMechanism.StochasticSoilModels, + FailureMechanism.GeneralInput); + + foreach (ICalculationBase item in calculationsStructure) + { + calculationGroup.Children.Add(item); + } + + calculationGroup.NotifyObservers(); + } + } } protected override void InitializeDataGridView() Index: Riskeer/Piping/test/Riskeer.Piping.Forms.Test/Views/PipingCalculationsViewTest.cs =================================================================== diff -u -r1d87f0ce3727b1ef85f5d9e739bc642bddf960a4 -r72b33880a86de98a6d4c49394fc5a71e94afd00b --- Riskeer/Piping/test/Riskeer.Piping.Forms.Test/Views/PipingCalculationsViewTest.cs (.../PipingCalculationsViewTest.cs) (revision 1d87f0ce3727b1ef85f5d9e739bc642bddf960a4) +++ Riskeer/Piping/test/Riskeer.Piping.Forms.Test/Views/PipingCalculationsViewTest.cs (.../PipingCalculationsViewTest.cs) (revision 72b33880a86de98a6d4c49394fc5a71e94afd00b) @@ -381,171 +381,6 @@ } [Test] - public void GivenCalculationsView_WhenGenerateScenariosButtonClicked_ThenShowViewWithSurfaceLines() - { - // Given - var mocks = new MockRepository(); - var assessmentSection = mocks.Stub(); - ConfigureHydraulicBoundaryDatabase(assessmentSection); - mocks.ReplayAll(); - - const string arbitraryFilePath = "path"; - var failureMechanism = new PipingFailureMechanism(); - failureMechanism.SurfaceLines.AddRange(new[] - { - new PipingSurfaceLine("Line A"), - new PipingSurfaceLine("Line B") - }, arbitraryFilePath); - failureMechanism.StochasticSoilModels.AddRange(new[] - { - PipingStochasticSoilModelTestFactory.CreatePipingStochasticSoilModel() - }, arbitraryFilePath); - - ShowPipingCalculationsView(failureMechanism.CalculationsGroup, failureMechanism, assessmentSection); - - var button = new ButtonTester("generateButton", testForm); - - PipingSurfaceLineSelectionDialog selectionDialog = null; - DataGridViewControl grid = null; - DialogBoxHandler = (name, wnd) => - { - selectionDialog = (PipingSurfaceLineSelectionDialog) new FormTester(name).TheObject; - grid = (DataGridViewControl) new ControlTester("DataGridViewControl", selectionDialog).TheObject; - - new ButtonTester("CustomCancelButton", selectionDialog).Click(); - }; - - // When - button.Click(); - - // Then - Assert.NotNull(selectionDialog); - Assert.NotNull(grid); - Assert.AreEqual(2, grid.Rows.Count); - mocks.VerifyAll(); - } - - [Test] - [TestCase("DoForSelectedButton")] - [TestCase("CustomCancelButton")] - public void GivenCalculationsViewGenerateScenariosButtonClicked_WhenDialogClosed_ThenNotifyCalculationGroup(string buttonName) - { - // Given - var mocks = new MockRepository(); - var assessmentSection = mocks.Stub(); - ConfigureHydraulicBoundaryDatabase(assessmentSection); - var observer = mocks.StrictMock(); - observer.Expect(o => o.UpdateObserver()); - mocks.ReplayAll(); - - const string arbitraryFilePath = "path"; - var failureMechanism = new PipingFailureMechanism(); - failureMechanism.SurfaceLines.AddRange(new[] - { - new PipingSurfaceLine("Line A"), - new PipingSurfaceLine("Line B") - }, arbitraryFilePath); - failureMechanism.StochasticSoilModels.AddRange(new[] - { - PipingStochasticSoilModelTestFactory.CreatePipingStochasticSoilModel() - }, arbitraryFilePath); - failureMechanism.CalculationsGroup.Attach(observer); - - ShowPipingCalculationsView(failureMechanism.CalculationsGroup, failureMechanism, assessmentSection); - - var button = new ButtonTester("generateButton", testForm); - - DialogBoxHandler = (name, wnd) => - { - var selectionDialog = (PipingSurfaceLineSelectionDialog) new FormTester(name).TheObject; - var selectionView = (DataGridViewControl) new ControlTester("DataGridViewControl", selectionDialog).TheObject; - selectionView.Rows[0].Cells[0].Value = true; - - // When - new ButtonTester(buttonName, selectionDialog).Click(); - }; - - button.Click(); - - // Then - mocks.VerifyAll(); - } - - [Test] - public void GivenCalculationsViewGenerateScenariosButtonClicked_WhenSurfaceLineSelectedAndDialogClosed_ThenUpdateSectionResultScenarios() - { - // Given - var mocks = new MockRepository(); - var assessmentSection = mocks.Stub(); - ConfigureHydraulicBoundaryDatabase(assessmentSection); - mocks.ReplayAll(); - - PipingFailureMechanism failureMechanism = ConfigureSimpleFailureMechanism(); - - ShowPipingCalculationsView(failureMechanism.CalculationsGroup, failureMechanism, assessmentSection); - - var button = new ButtonTester("generateButton", testForm); - - DialogBoxHandler = (name, wnd) => - { - var selectionDialog = (PipingSurfaceLineSelectionDialog) new FormTester(name).TheObject; - var selectionView = (DataGridViewControl) new ControlTester("DataGridViewControl", selectionDialog).TheObject; - selectionView.Rows[0].Cells[0].Value = true; - - // When - new ButtonTester("DoForSelectedButton", selectionDialog).Click(); - }; - - button.Click(); - - // Then - PipingCalculationScenario[] pipingCalculationScenarios = failureMechanism.Calculations.OfType().ToArray(); - PipingFailureMechanismSectionResult failureMechanismSectionResult1 = failureMechanism.SectionResults.First(); - PipingFailureMechanismSectionResult failureMechanismSectionResult2 = failureMechanism.SectionResults.ElementAt(1); - - Assert.AreEqual(2, failureMechanismSectionResult1.GetCalculationScenarios(pipingCalculationScenarios).Count()); - - foreach (PipingCalculationScenario calculationScenario in failureMechanismSectionResult1.GetCalculationScenarios(pipingCalculationScenarios)) - { - Assert.IsInstanceOf(calculationScenario); - } - - CollectionAssert.IsEmpty(failureMechanismSectionResult2.GetCalculationScenarios(pipingCalculationScenarios)); - mocks.VerifyAll(); - } - - [Test] - public void GivenCalculationsViewGenerateScenariosCancelButtonClicked_WhenDialogClosed_CalculationsNotUpdated() - { - // Given - var mocks = new MockRepository(); - var assessmentSection = mocks.Stub(); - ConfigureHydraulicBoundaryDatabase(assessmentSection); - mocks.ReplayAll(); - - PipingFailureMechanism failureMechanism = ConfigureSimpleFailureMechanism(); - ShowPipingCalculationsView(failureMechanism.CalculationsGroup, failureMechanism, assessmentSection); - - var button = new ButtonTester("generateButton", testForm); - - DialogBoxHandler = (name, wnd) => - { - var selectionDialog = (PipingSurfaceLineSelectionDialog) new FormTester(name).TheObject; - var selectionView = (DataGridViewControl) new ControlTester("DataGridViewControl", selectionDialog).TheObject; - selectionView.Rows[0].Cells[0].Value = true; - - // When - new ButtonTester("CustomCancelButton", selectionDialog).Click(); - }; - - button.Click(); - - // Then - CollectionAssert.IsEmpty(failureMechanism.Calculations); - mocks.VerifyAll(); - } - - [Test] public void GivenFailureMechanismWithoutSurfaceLinesAndSoilModels_WhenAddSoilModelAndNotify_ThenButtonDisabled() { // Given @@ -932,6 +767,174 @@ mocks.VerifyAll(); } + [Test] + public void GivenCalculationsView_WhenGenerateScenariosButtonClicked_ThenShowViewWithSurfaceLines() + { + // Given + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + ConfigureHydraulicBoundaryDatabase(assessmentSection); + mocks.ReplayAll(); + + const string arbitraryFilePath = "path"; + var failureMechanism = new PipingFailureMechanism(); + failureMechanism.SurfaceLines.AddRange(new[] + { + new PipingSurfaceLine("Line A"), + new PipingSurfaceLine("Line B") + }, arbitraryFilePath); + failureMechanism.StochasticSoilModels.AddRange(new[] + { + PipingStochasticSoilModelTestFactory.CreatePipingStochasticSoilModel() + }, arbitraryFilePath); + + ShowPipingCalculationsView(failureMechanism.CalculationsGroup, failureMechanism, assessmentSection); + + var button = new ButtonTester("generateButton", testForm); + + PipingSurfaceLineSelectionDialog selectionDialog = null; + DataGridViewControl grid = null; + var rows = 0; + DialogBoxHandler = (name, wnd) => + { + selectionDialog = (PipingSurfaceLineSelectionDialog) new FormTester(name).TheObject; + grid = (DataGridViewControl) new ControlTester("DataGridViewControl", selectionDialog).TheObject; + rows = grid.Rows.Count; + + new ButtonTester("CustomCancelButton", selectionDialog).Click(); + }; + + // When + button.Click(); + + // Then + Assert.NotNull(selectionDialog); + Assert.NotNull(grid); + Assert.AreEqual(failureMechanism.SurfaceLines.Count, rows); + mocks.VerifyAll(); + } + + [Test] + public void GivenCalculationsViewGenerateScenariosButtonClicked_WhenDialogClosed_ThenNotifyCalculationGroup() + { + // Given + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + ConfigureHydraulicBoundaryDatabase(assessmentSection); + var observer = mocks.StrictMock(); + observer.Expect(o => o.UpdateObserver()); + mocks.ReplayAll(); + + const string arbitraryFilePath = "path"; + var failureMechanism = new PipingFailureMechanism(); + failureMechanism.SurfaceLines.AddRange(new[] + { + new PipingSurfaceLine("Line A"), + new PipingSurfaceLine("Line B") + }, arbitraryFilePath); + failureMechanism.StochasticSoilModels.AddRange(new[] + { + PipingStochasticSoilModelTestFactory.CreatePipingStochasticSoilModel() + }, arbitraryFilePath); + failureMechanism.CalculationsGroup.Attach(observer); + + ShowPipingCalculationsView(failureMechanism.CalculationsGroup, failureMechanism, assessmentSection); + + var button = new ButtonTester("generateButton", testForm); + + DialogBoxHandler = (name, wnd) => + { + var selectionDialog = (PipingSurfaceLineSelectionDialog) new FormTester(name).TheObject; + var selectionView = (DataGridViewControl) new ControlTester("DataGridViewControl", selectionDialog).TheObject; + selectionView.Rows[0].Cells[0].Value = true; + + // When + new ButtonTester("DoForSelectedButton", selectionDialog).Click(); + }; + + button.Click(); + + // Then + mocks.VerifyAll(); + } + + [Test] + public void GivenCalculationsViewGenerateScenariosButtonClicked_WhenSurfaceLineSelectedAndDialogClosed_ThenUpdateSectionResultScenarios() + { + // Given + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + ConfigureHydraulicBoundaryDatabase(assessmentSection); + mocks.ReplayAll(); + + PipingFailureMechanism failureMechanism = ConfigureSimpleFailureMechanism(); + + ShowPipingCalculationsView(failureMechanism.CalculationsGroup, failureMechanism, assessmentSection); + + var button = new ButtonTester("generateButton", testForm); + + DialogBoxHandler = (name, wnd) => + { + var selectionDialog = (PipingSurfaceLineSelectionDialog) new FormTester(name).TheObject; + var selectionView = (DataGridViewControl) new ControlTester("DataGridViewControl", selectionDialog).TheObject; + selectionView.Rows[0].Cells[0].Value = true; + + // When + new ButtonTester("DoForSelectedButton", selectionDialog).Click(); + }; + + button.Click(); + + // Then + PipingCalculationScenario[] pipingCalculationScenarios = failureMechanism.Calculations.OfType().ToArray(); + PipingFailureMechanismSectionResult failureMechanismSectionResult1 = failureMechanism.SectionResults.First(); + PipingFailureMechanismSectionResult failureMechanismSectionResult2 = failureMechanism.SectionResults.ElementAt(1); + + Assert.AreEqual(2, failureMechanismSectionResult1.GetCalculationScenarios(pipingCalculationScenarios).Count()); + + foreach (PipingCalculationScenario calculationScenario in failureMechanismSectionResult1.GetCalculationScenarios(pipingCalculationScenarios)) + { + Assert.IsInstanceOf(calculationScenario); + } + + CollectionAssert.IsEmpty(failureMechanismSectionResult2.GetCalculationScenarios(pipingCalculationScenarios)); + mocks.VerifyAll(); + } + + [Test] + public void GivenCalculationsViewGenerateScenariosCancelButtonClicked_WhenDialogClosed_CalculationsNotUpdatedAndCalculationGroupNotNotified() + { + // Given + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + ConfigureHydraulicBoundaryDatabase(assessmentSection); + var observer = mocks.StrictMock(); + mocks.ReplayAll(); + + PipingFailureMechanism failureMechanism = ConfigureSimpleFailureMechanism(); + ShowPipingCalculationsView(failureMechanism.CalculationsGroup, failureMechanism, assessmentSection); + + failureMechanism.CalculationsGroup.Attach(observer); + + var button = new ButtonTester("generateButton", testForm); + + DialogBoxHandler = (name, wnd) => + { + var selectionDialog = (PipingSurfaceLineSelectionDialog) new FormTester(name).TheObject; + var selectionView = (DataGridViewControl) new ControlTester("DataGridViewControl", selectionDialog).TheObject; + selectionView.Rows[0].Cells[0].Value = true; + + // When + new ButtonTester("CustomCancelButton", selectionDialog).Click(); + }; + + button.Click(); + + // Then + CollectionAssert.IsEmpty(failureMechanism.Calculations); + mocks.VerifyAll(); // No observer notified + } + [TestCase(true)] [TestCase(false)] public void CalculationsViewWithHydraulicLocation_SpecificUseAssessmentLevelManualInputState_SelectableHydraulicLocationReadonlyAccordingly(bool useAssessmentLevelManualInput)