Index: Riskeer/Integration/src/Riskeer.Integration.Forms/PropertyClasses/AssessmentSectionProperties.cs =================================================================== diff -u -r1da9c3c61984c4a2da48c410c79aeaf238d932c9 -r426bffa17b9f5056b2f1399c76326f8eb84405b1 --- Riskeer/Integration/src/Riskeer.Integration.Forms/PropertyClasses/AssessmentSectionProperties.cs (.../AssessmentSectionProperties.cs) (revision 1da9c3c61984c4a2da48c410c79aeaf238d932c9) +++ Riskeer/Integration/src/Riskeer.Integration.Forms/PropertyClasses/AssessmentSectionProperties.cs (.../AssessmentSectionProperties.cs) (revision 426bffa17b9f5056b2f1399c76326f8eb84405b1) @@ -65,7 +65,7 @@ Data = assessmentSection; } - + [PropertyOrder(1)] [ResourcesCategory(typeof(RiskeerCommonFormsResources), nameof(RiskeerCommonFormsResources.Categories_General))] [ResourcesDisplayName(typeof(Resources), nameof(Resources.AssessmentSection_Id_DisplayName))] @@ -85,7 +85,7 @@ data.NotifyObservers(); } } - + [PropertyOrder(3)] [TypeConverter(typeof(EnumTypeConverter))] [ResourcesCategory(typeof(RiskeerCommonFormsResources), nameof(RiskeerCommonFormsResources.Categories_General))] @@ -96,16 +96,13 @@ get => data.Composition; set { - if (compositionChangeHandler.ConfirmCompositionChange()) + IEnumerable changedObjects = compositionChangeHandler.ChangeComposition(data, value); + foreach (IObservable changedObject in changedObjects) { - IEnumerable changedObjects = compositionChangeHandler.ChangeComposition(data, value); - foreach (IObservable changedObject in changedObjects) - { - changedObject.NotifyObservers(); - } - - data.FailureMechanismContribution.NotifyObservers(); + changedObject.NotifyObservers(); } + + data.FailureMechanismContribution.NotifyObservers(); } } } Index: Riskeer/Integration/src/Riskeer.Integration.Forms/PropertyClasses/IAssessmentSectionCompositionChangeHandler.cs =================================================================== diff -u -rc36b47c2e1e8cf948767cca33f80ad735f370ad0 -r426bffa17b9f5056b2f1399c76326f8eb84405b1 --- Riskeer/Integration/src/Riskeer.Integration.Forms/PropertyClasses/IAssessmentSectionCompositionChangeHandler.cs (.../IAssessmentSectionCompositionChangeHandler.cs) (revision c36b47c2e1e8cf948767cca33f80ad735f370ad0) +++ Riskeer/Integration/src/Riskeer.Integration.Forms/PropertyClasses/IAssessmentSectionCompositionChangeHandler.cs (.../IAssessmentSectionCompositionChangeHandler.cs) (revision 426bffa17b9f5056b2f1399c76326f8eb84405b1) @@ -33,12 +33,6 @@ public interface IAssessmentSectionCompositionChangeHandler { /// - /// Checks to see if the replacement of the assessment section composition should occur or not. - /// - /// true if the change should occur, false otherwise. - bool ConfirmCompositionChange(); - - /// /// Replaces the of the /// and propagates the changes to underlying data structure. /// Index: Riskeer/Integration/src/Riskeer.Integration.Plugin/Handlers/AssessmentSectionCompositionChangeHandler.cs =================================================================== diff -u -raf48cc3ce4a1a2d0efe5462532f66eab4b860db8 -r426bffa17b9f5056b2f1399c76326f8eb84405b1 --- Riskeer/Integration/src/Riskeer.Integration.Plugin/Handlers/AssessmentSectionCompositionChangeHandler.cs (.../AssessmentSectionCompositionChangeHandler.cs) (revision af48cc3ce4a1a2d0efe5462532f66eab4b860db8) +++ Riskeer/Integration/src/Riskeer.Integration.Plugin/Handlers/AssessmentSectionCompositionChangeHandler.cs (.../AssessmentSectionCompositionChangeHandler.cs) (revision 426bffa17b9f5056b2f1399c76326f8eb84405b1) @@ -21,115 +21,35 @@ using System; using System.Collections.Generic; -using System.Linq; -using System.Windows.Forms; using Core.Common.Base; -using Core.Common.Util; -using log4net; using Riskeer.Common.Data.AssessmentSection; -using Riskeer.Common.Data.Calculation; -using Riskeer.Common.Data.FailureMechanism; -using Riskeer.DuneErosion.Data; using Riskeer.Integration.Forms.PropertyClasses; -using Riskeer.Integration.Plugin.Properties; -using Riskeer.Integration.Service; -using Riskeer.StabilityStoneCover.Data; -using Riskeer.WaveImpactAsphaltCover.Data; using CoreCommonBaseResources = Core.Common.Base.Properties.Resources; namespace Riskeer.Integration.Plugin.Handlers { /// - /// Class responsible for changing the - /// value clearing all data dependent on the original composition value. + /// Class responsible for changing the value. /// public class AssessmentSectionCompositionChangeHandler : IAssessmentSectionCompositionChangeHandler { - private readonly ILog log = LogManager.GetLogger(typeof(AssessmentSectionCompositionChangeHandler)); - - public bool ConfirmCompositionChange() - { - DialogResult result = MessageBox.Show(Resources.AssessmentSectionCompositionChangeHandler_Confirm_change_composition_and_clear_dependent_data, - CoreCommonBaseResources.Confirm, - MessageBoxButtons.OKCancel); - return result == DialogResult.OK; - } - public IEnumerable ChangeComposition(IAssessmentSection assessmentSection, AssessmentSectionComposition newComposition) { if (assessmentSection == null) { throw new ArgumentNullException(nameof(assessmentSection)); } - Dictionary oldFailureMechanismContributions = assessmentSection.GetFailureMechanisms().ToDictionary(f => f, f => f.Contribution, new ReferenceEqualityComparer()); - var affectedObjects = new List(); if (assessmentSection.Composition != newComposition) { assessmentSection.ChangeComposition(newComposition); affectedObjects.Add(assessmentSection); affectedObjects.AddRange(assessmentSection.GetFailureMechanisms()); - - IFailureMechanism[] failureMechanismsToClearOutputFor = GetFailureMechanismsToClearOutputFor(assessmentSection, oldFailureMechanismContributions).ToArray(); - - IObservable[] affectedCalculations = - RiskeerDataSynchronizationService.ClearFailureMechanismCalculationOutputs(failureMechanismsToClearOutputFor).ToArray(); - - if (affectedCalculations.Length > 0) - { - affectedObjects.AddRange(affectedCalculations); - log.InfoFormat(Resources.ChangeHandler_Results_of_NumberOfCalculations_0_calculations_cleared, - affectedObjects.OfType().Count()); - } - - affectedObjects.AddRange(ClearHydraulicBoundaryLocationCalculationOutput(failureMechanismsToClearOutputFor)); } return affectedObjects; } - - private static IEnumerable GetFailureMechanismsToClearOutputFor(IAssessmentSection assessmentSection, - IDictionary oldFailureMechanismContributions) - { - var failureMechanismsToClearOutputFor = new List(); - foreach (IFailureMechanism failureMechanism in assessmentSection.GetFailureMechanisms()) - { - if (failureMechanism is StabilityStoneCoverFailureMechanism || failureMechanism is WaveImpactAsphaltCoverFailureMechanism) - { - continue; - } - - if (failureMechanism is DuneErosionFailureMechanism) - { - failureMechanismsToClearOutputFor.Add(failureMechanism); - } - - if (oldFailureMechanismContributions.ContainsKey(failureMechanism)) - { - double oldContribution = oldFailureMechanismContributions[failureMechanism]; - if (Math.Abs(oldContribution) > 1e-6 && Math.Abs(oldContribution - failureMechanism.Contribution) > 1e-6) - { - failureMechanismsToClearOutputFor.Add(failureMechanism); - } - } - } - - return failureMechanismsToClearOutputFor; - } - - private IEnumerable ClearHydraulicBoundaryLocationCalculationOutput(IEnumerable failureMechanismsToClearOutputFor) - { - IEnumerable affectedObjects = - RiskeerDataSynchronizationService.ClearHydraulicBoundaryLocationCalculationOutputOfFailureMechanisms(failureMechanismsToClearOutputFor); - if (affectedObjects.Any()) - { - log.Info(Resources.AssessmentSectionCompositionChangeHandler_Waveheight_and_design_water_level_results_cleared); - return affectedObjects; - } - - return Enumerable.Empty(); - } } } \ No newline at end of file Index: Riskeer/Integration/src/Riskeer.Integration.Plugin/Properties/Resources.Designer.cs =================================================================== diff -u -r57ef55e67931df024753fe19a636c02eaae148c1 -r426bffa17b9f5056b2f1399c76326f8eb84405b1 --- Riskeer/Integration/src/Riskeer.Integration.Plugin/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision 57ef55e67931df024753fe19a636c02eaae148c1) +++ Riskeer/Integration/src/Riskeer.Integration.Plugin/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision 426bffa17b9f5056b2f1399c76326f8eb84405b1) @@ -148,28 +148,6 @@ } /// - /// Looks up a localized string similar to Als u het trajecttype aanpast, dan worden alle rekenresultaten van alle relevante toetssporen verwijderd. - /// - ///Weet u zeker dat u wilt doorgaan?. - /// - public static string AssessmentSectionCompositionChangeHandler_Confirm_change_composition_and_clear_dependent_data { - get { - return ResourceManager.GetString("AssessmentSectionCompositionChangeHandler_Confirm_change_composition_and_clear_de" + - "pendent_data", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Alle berekende hydraulische belastingen van de relevante toetssporen zijn verwijderd.. - /// - public static string AssessmentSectionCompositionChangeHandler_Waveheight_and_design_water_level_results_cleared { - get { - return ResourceManager.GetString("AssessmentSectionCompositionChangeHandler_Waveheight_and_design_water_level_resul" + - "ts_cleared", resourceCulture); - } - } - - /// /// Looks up a localized string similar to Het importeren van de referentielijn is mislukt.. /// public static string AssessmentSectionFromFileCommandHandler_CreateAssessmentSection_Importing_ReferenceLineFailed { Index: Riskeer/Integration/src/Riskeer.Integration.Plugin/Properties/Resources.resx =================================================================== diff -u -r57ef55e67931df024753fe19a636c02eaae148c1 -r426bffa17b9f5056b2f1399c76326f8eb84405b1 --- Riskeer/Integration/src/Riskeer.Integration.Plugin/Properties/Resources.resx (.../Resources.resx) (revision 57ef55e67931df024753fe19a636c02eaae148c1) +++ Riskeer/Integration/src/Riskeer.Integration.Plugin/Properties/Resources.resx (.../Resources.resx) (revision 426bffa17b9f5056b2f1399c76326f8eb84405b1) @@ -1,265 +1,286 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Opmerkingen - + Voorlandprofiellocaties - - - ..\Resources\Foreshore.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - + + + ..\Resources\Foreshore.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b03f5f7f11d50a3a + + + Na het importeren van een aangepaste ligging van de referentielijn zullen alle geïmporteerde en berekende gegevens van alle toetssporen worden gewist. Wilt u doorgaan? - + De resultaten van {0} berekeningen zijn verwijderd. - + Alle berekende hydraulische belastingen zijn verwijderd. - + Als u de norm aanpast, dan worden alle rekenresultaten van alle hydraulische belastingenlocaties en toetssporen verwijderd. Weet u zeker dat u wilt doorgaan? - + Achtergrondkaart - - Alle berekende hydraulische belastingen van de relevante toetssporen zijn verwijderd. - - - Als u het trajecttype aanpast, dan worden alle rekenresultaten van alle relevante toetssporen verwijderd. - -Weet u zeker dat u wilt doorgaan? - - + &Selecteren... - + Selecteer een achtergrondkaart. - + Als u voorlandprofielen importeert, dan worden de resultaten van alle berekeningen in dit toetsspoor die voorlandprofielen gebruiken verwijderd. Weet u zeker dat u wilt doorgaan? - + Als voorlandprofielen wijzigen door het bijwerken, dan worden de resultaten van berekeningen die deze voorlandprofielen gebruiken verwijderd. Weet u zeker dat u wilt doorgaan? - - ..\Resources\AssemblyResultPerSection.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\AssemblyResultTotal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - + + ..\Resources\AssemblyResultPerSection.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, + Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + + ..\Resources\AssemblyResultTotal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, + Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Er zijn geen trajecten gevonden die samengevoegd kunnen worden. - + Samenvoegen van trajectinformatie is gelukt. - + Samenvoegen van trajectinformatie is gestart. - + Er is een onverwachte fout opgetreden tijdens het samenvoegen van de trajecten. - + Samenvoegen van trajectinformatie is mislukt. - + Voer alle berekeningen binnen dit traject uit. - + Hydraulische belastingen zijn samengevoegd. - + Gegevens van toetsspoor '{0}' zijn vervangen. - + Hydraulische belastingen zijn niet samengevoegd omdat het huidige traject meer gegevens bevat. - + gml - + Assemblage - + Assemblagekaart - - ..\Resources\AssemblyResultPerSectionMap.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - + + ..\Resources\AssemblyResultPerSectionMap.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, + Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + U heeft een ander hydraulische belastingendatabase bestand geselecteerd. Als gevolg hiervan moet de uitvoer van alle ervan afhankelijke berekeningen verwijderd worden. Wilt u doorgaan? - + sqlite - + Hydraulische belastingendatabase - + Als u het gekoppelde HLCD bestand wijzigt, zal de uitvoer van alle berekeningen verwijderd worden. Wilt u doorgaan? - + Importeren van het HLCD bestand - + De tabel 'ScenarioInformation' in het HLCD bestand is niet aanwezig. Er worden standaardwaarden conform WBI2017 gebruikt voor de HLCD bestandsinformatie. - + Traject - + Faalpaden - + Berekeningen - + Hydraulische belastingen - + Er zijn geen instellingen gevonden voor het geselecteerde traject. Standaardinstellingen zullen gebruikt worden. - + Er kunnen geen trajecten gelezen worden uit het shapebestand. - + Het importeren van de referentielijn is mislukt. - + Het traject kan niet aangemaakt worden met een ondergrens van {0} en een signaleringswaarde van {1}. De waarde van de ondergrens en signaleringswaarde moet in het bereik {2} liggen en de ondergrens moet gelijk zijn aan of groter zijn dan de signaleringswaarde. \ No newline at end of file Index: Riskeer/Integration/test/Riskeer.Integration.Forms.Test/PropertyClasses/AssessmentSectionPropertiesTest.cs =================================================================== diff -u -refb7df8335922db189f561506bd274ca365c237b -r426bffa17b9f5056b2f1399c76326f8eb84405b1 --- Riskeer/Integration/test/Riskeer.Integration.Forms.Test/PropertyClasses/AssessmentSectionPropertiesTest.cs (.../AssessmentSectionPropertiesTest.cs) (revision efb7df8335922db189f561506bd274ca365c237b) +++ Riskeer/Integration/test/Riskeer.Integration.Forms.Test/PropertyClasses/AssessmentSectionPropertiesTest.cs (.../AssessmentSectionPropertiesTest.cs) (revision 426bffa17b9f5056b2f1399c76326f8eb84405b1) @@ -151,13 +151,13 @@ // When properties.Name = newName; - // Thenc + // Then Assert.AreEqual(newName, assessmentSection.Name); mocks.VerifyAll(); } [Test] - public void GivenAssessmentSectionProperties_WhenConfirmingCompositionValueChange_ThenCompositionSetAndNotifiesObserver() + public void GivenAssessmentSectionProperties_WhenChangingCompositionValue_ThenCompositionSetAndNotifiesObserver() { // Given const AssessmentSectionComposition newComposition = AssessmentSectionComposition.DikeAndDune; @@ -170,7 +170,6 @@ var observable = mocks.StrictMock(); observable.Expect(o => o.NotifyObservers()); var assessmentSectionCompositionChangeHandler = mocks.StrictMock(); - assessmentSectionCompositionChangeHandler.Expect(handler => handler.ConfirmCompositionChange()).Return(true); assessmentSectionCompositionChangeHandler.Expect(handler => handler.ChangeComposition(assessmentSection, newComposition)) .Return(new[] { @@ -186,31 +185,5 @@ // Then mocks.VerifyAll(); } - - [Test] - public void GivenAssessmentSectionProperties_WhenCancelingCompositionValueChange_ThenDataSameAndObserversNotNotified() - { - // Given - const AssessmentSectionComposition originalComposition = AssessmentSectionComposition.Dike; - const AssessmentSectionComposition newComposition = AssessmentSectionComposition.DikeAndDune; - - var mocks = new MockRepository(); - var assessmentSection = mocks.Stub(); - assessmentSection.Stub(section => section.Composition).Return(originalComposition); - - var assessmentSectionCompositionChangeHandler = mocks.StrictMock(); - assessmentSectionCompositionChangeHandler.Expect(handler => handler.ConfirmCompositionChange()).Return(false); - mocks.ReplayAll(); - - var properties = new AssessmentSectionProperties(assessmentSection, assessmentSectionCompositionChangeHandler); - - // When - properties.Composition = newComposition; - - // Then - Assert.AreEqual(originalComposition, properties.Composition); - Assert.AreEqual(originalComposition, assessmentSection.Composition); - mocks.VerifyAll(); - } } } \ No newline at end of file Index: Riskeer/Integration/test/Riskeer.Integration.Plugin.Test/Handlers/AssessmentSectionCompositionChangeHandlerTest.cs =================================================================== diff -u -r4cf3be94771c4d444c92c3d154407f0581c60674 -r426bffa17b9f5056b2f1399c76326f8eb84405b1 --- Riskeer/Integration/test/Riskeer.Integration.Plugin.Test/Handlers/AssessmentSectionCompositionChangeHandlerTest.cs (.../AssessmentSectionCompositionChangeHandlerTest.cs) (revision 4cf3be94771c4d444c92c3d154407f0581c60674) +++ Riskeer/Integration/test/Riskeer.Integration.Plugin.Test/Handlers/AssessmentSectionCompositionChangeHandlerTest.cs (.../AssessmentSectionCompositionChangeHandlerTest.cs) (revision 426bffa17b9f5056b2f1399c76326f8eb84405b1) @@ -21,28 +21,14 @@ using System; using System.Collections.Generic; -using System.Linq; using Core.Common.Base; -using Core.Common.TestUtil; using NUnit.Extensions.Forms; using NUnit.Framework; -using Riskeer.ClosingStructures.Data; using Riskeer.Common.Data.AssessmentSection; -using Riskeer.Common.Data.Calculation; -using Riskeer.Common.Data.FailureMechanism; -using Riskeer.DuneErosion.Data; -using Riskeer.DuneErosion.Data.TestUtil; -using Riskeer.GrassCoverErosionInwards.Data; -using Riskeer.GrassCoverErosionOutwards.Data; -using Riskeer.HeightStructures.Data; using Riskeer.Integration.Data; using Riskeer.Integration.Forms.PropertyClasses; using Riskeer.Integration.Plugin.Handlers; using Riskeer.Integration.TestUtil; -using Riskeer.Piping.Data; -using Riskeer.StabilityPointStructures.Data; -using Riskeer.StabilityStoneCover.Data; -using Riskeer.WaveImpactAsphaltCover.Data; namespace Riskeer.Integration.Plugin.Test.Handlers { @@ -60,73 +46,6 @@ } [Test] - public void ConfirmCompositionChange_Always_ShowMessageBox() - { - // Setup - var title = ""; - var message = ""; - DialogBoxHandler = (name, wnd) => - { - var tester = new MessageBoxTester(wnd); - title = tester.Title; - message = tester.Text; - - tester.ClickOk(); - }; - - var handler = new AssessmentSectionCompositionChangeHandler(); - - // Call - handler.ConfirmCompositionChange(); - - // Assert - Assert.AreEqual("Bevestigen", title); - string expectedMessage = "Als u het trajecttype aanpast, dan worden alle rekenresultaten van alle relevante toetssporen verwijderd." - + Environment.NewLine - + Environment.NewLine + - "Weet u zeker dat u wilt doorgaan?"; - Assert.AreEqual(expectedMessage, message); - } - - [Test] - public void ConfirmCompositionChange_MessageBoxOk_ReturnTrue() - { - // Setup - DialogBoxHandler = (name, wnd) => - { - var tester = new MessageBoxTester(wnd); - tester.ClickOk(); - }; - - var handler = new AssessmentSectionCompositionChangeHandler(); - - // Call - bool result = handler.ConfirmCompositionChange(); - - // Assert - Assert.IsTrue(result); - } - - [Test] - public void ConfirmCompositionChange_MessageBoxCancel_ReturnFalse() - { - // Setup - DialogBoxHandler = (name, wnd) => - { - var tester = new MessageBoxTester(wnd); - tester.ClickCancel(); - }; - - var handler = new AssessmentSectionCompositionChangeHandler(); - - // Call - bool result = handler.ConfirmCompositionChange(); - - // Assert - Assert.IsFalse(result); - } - - [Test] public void ChangeComposition_AssessmentSectionNull_ThrowArgumentNullException() { // Setup @@ -141,264 +60,22 @@ } [Test] - public void ChangeComposition_ChangeToSameValue_DoNothing() + public void ChangeComposition_ChangeToSameValue_ReturnNoAffectedObjects() { // Setup AssessmentSection assessmentSection = TestDataGenerator.GetAssessmentSectionWithAllCalculationConfigurations(); AssessmentSectionComposition originalComposition = assessmentSection.Composition; - ICalculation[] calculationsWithOutput = assessmentSection.GetFailureMechanisms() - .SelectMany(fm => fm.Calculations) - .Where(c => c.HasOutput) - .ToArray(); - DuneLocationCalculation[] duneLocationCalculationsWithOutput = assessmentSection.DuneErosion.CalculationsForMechanismSpecificFactorizedSignalingNorm.Where(HasDuneLocationCalculationOutput) - .Concat(assessmentSection.DuneErosion.CalculationsForMechanismSpecificSignalingNorm.Where(HasDuneLocationCalculationOutput)) - .Concat(assessmentSection.DuneErosion.CalculationsForMechanismSpecificLowerLimitNorm.Where(HasDuneLocationCalculationOutput)) - .Concat(assessmentSection.DuneErosion.CalculationsForLowerLimitNorm.Where(HasDuneLocationCalculationOutput)) - .Concat(assessmentSection.DuneErosion.CalculationsForFactorizedLowerLimitNorm.Where(HasDuneLocationCalculationOutput)) - .ToArray(); - var handler = new AssessmentSectionCompositionChangeHandler(); // Call IEnumerable affectedObjects = handler.ChangeComposition(assessmentSection, originalComposition); // Assert - Assert.True(calculationsWithOutput.All(c => c.HasOutput), - "All calculations that had output still have them."); - - Assert.True(duneLocationCalculationsWithOutput.All(HasDuneLocationCalculationOutput)); - CollectionAssert.IsEmpty(affectedObjects); } [Test] - [TestCase(AssessmentSectionComposition.Dike, AssessmentSectionComposition.Dune)] - [TestCase(AssessmentSectionComposition.DikeAndDune, AssessmentSectionComposition.Dune)] - public void ChangeComposition_ChangeToDuneComposition_ChangeCompositionAndClearAllCalculationOutputAndReturnsAllAffectedObjects(AssessmentSectionComposition oldComposition, - AssessmentSectionComposition newComposition) - { - // Setup - AssessmentSection assessmentSection = TestDataGenerator.GetAssessmentSectionWithAllCalculationConfigurations(oldComposition); - - IEnumerable unaffectedObjects = GetDuneIrrelevantFailureMechanisms(assessmentSection) - .SelectMany(fm => fm.Calculations) - .Where(calc => calc.HasOutput) - .ToArray(); - - DuneErosionFailureMechanism duneErosionFailureMechanism = assessmentSection.DuneErosion; - IEnumerable expectedAffectedObjects = GetAllAffectedDuneLocationCalculations(duneErosionFailureMechanism) - .Concat(new IObservable[] - { - assessmentSection - }) - .Concat(GetDuneRelevantFailureMechanisms(assessmentSection) - .SelectMany(fm => fm.Calculations) - .Where(calc => calc.HasOutput)) - .ToArray(); - - var handler = new AssessmentSectionCompositionChangeHandler(); - - // Call - IEnumerable affectedObjects = null; - void Call() => affectedObjects = handler.ChangeComposition(assessmentSection, newComposition); - - // Assert - string[] expectedMessage = - { - "De resultaten van 28 berekeningen zijn verwijderd.", - "Alle berekende hydraulische belastingen van de relevante toetssporen zijn verwijderd." - }; - TestHelper.AssertLogMessagesAreGenerated(Call, expectedMessage, 2); - - Assert.AreEqual(newComposition, assessmentSection.Composition); - AssertCorrectOutputClearedWhenCompositionDune(unaffectedObjects, assessmentSection); - CollectionAssert.IsSubsetOf(expectedAffectedObjects, affectedObjects); - - DuneLocationsTestHelper.AssertDuneLocationCalculationsHaveNoOutputs(duneErosionFailureMechanism); - } - - [Test] - [TestCase(AssessmentSectionComposition.Dike, AssessmentSectionComposition.DikeAndDune, TestName = "ChangeComposition_ChangeToNonDuneComposition_ChangeCompositionClearRelevantOutputReturnsAllAffectedObjects(Dike,DikeDune)")] - [TestCase(AssessmentSectionComposition.DikeAndDune, AssessmentSectionComposition.Dike, TestName = "ChangeComposition_ChangeToNonDuneComposition_ChangeCompositionClearRelevantOutputReturnsAllAffectedObjects(DikeDune,Dike)")] - [TestCase(AssessmentSectionComposition.Dune, AssessmentSectionComposition.Dike, TestName = "ChangeComposition_ChangeToNonDuneComposition_ChangeCompositionClearRelevantOutputReturnsAllAffectedObjects(Dune,Dike)")] - [TestCase(AssessmentSectionComposition.Dune, AssessmentSectionComposition.DikeAndDune, TestName = "ChangeComposition_ChangeToNonDuneComposition_ChangeCompositionClearRelevantOutputReturnsAllAffectedObjects(Dune,DikeDune)")] - public void ChangeComposition_ChangeToNonDuneComposition_ChangeCompositionAndClearAllLocationOutputAndReturnsAllAffectedObjects(AssessmentSectionComposition oldComposition, - AssessmentSectionComposition newComposition) - { - // Setup - AssessmentSection assessmentSection = TestDataGenerator.GetAssessmentSectionWithAllCalculationConfigurations(oldComposition); - - IEnumerable expectedUnaffectedObjects = assessmentSection.GetFailureMechanisms() - .SelectMany(fm => fm.Calculations) - .Where(calc => calc.HasOutput) - .ToArray(); - - DuneErosionFailureMechanism duneErosionFailureMechanism = assessmentSection.DuneErosion; - IEnumerable expectedAffectedObjects = GetAllAffectedDuneLocationCalculations(duneErosionFailureMechanism) - .Concat(new IObservable[] - { - assessmentSection - }) - .ToArray(); - - var handler = new AssessmentSectionCompositionChangeHandler(); - - // Call - IEnumerable affectedObjects = null; - void Call() => affectedObjects = handler.ChangeComposition(assessmentSection, newComposition); - - // Assert - const string expectedMessage = "Alle berekende hydraulische belastingen van de relevante toetssporen zijn verwijderd."; - TestHelper.AssertLogMessageIsGenerated(Call, expectedMessage, 1); - - Assert.AreEqual(newComposition, assessmentSection.Composition); - - CollectionAssert.IsSubsetOf(expectedAffectedObjects, affectedObjects); - AssertOutputNotCleared(expectedUnaffectedObjects, assessmentSection.GetFailureMechanisms()); - - DuneLocationsTestHelper.AssertDuneLocationCalculationsHaveNoOutputs(duneErosionFailureMechanism); - } - - [Test] - [TestCase(AssessmentSectionComposition.Dike, AssessmentSectionComposition.Dune)] - [TestCase(AssessmentSectionComposition.DikeAndDune, AssessmentSectionComposition.Dune)] - public void ChangeComposition_ChangeToDuneAndNoCalculationsWithOutput_ChangeCompositionAndReturnsAllAffectedObjects(AssessmentSectionComposition oldComposition, - AssessmentSectionComposition newComposition) - { - // Setup - AssessmentSection assessmentSection = TestDataGenerator.GetAssessmentSectionWithAllCalculationConfigurationsWithoutCalculationOutput(oldComposition); - - DuneErosionFailureMechanism duneErosionFailureMechanism = assessmentSection.DuneErosion; - IEnumerable expectedAffectedObjects = - GetAllAffectedDuneLocationCalculations(duneErosionFailureMechanism) - .Concat(new IObservable[] - { - assessmentSection - }) - .Concat(GetDuneRelevantFailureMechanisms(assessmentSection) - .SelectMany(fm => fm.Calculations) - .Where(calc => calc.HasOutput)) - .ToArray(); - - var handler = new AssessmentSectionCompositionChangeHandler(); - - // Call - IEnumerable affectedObjects = null; - void Call() => affectedObjects = handler.ChangeComposition(assessmentSection, newComposition); - - // Assert - TestHelper.AssertLogMessageIsGenerated(Call, "Alle berekende hydraulische belastingen van de relevante toetssporen zijn verwijderd.", 1); - - Assert.AreEqual(newComposition, assessmentSection.Composition); - Assert.True(assessmentSection.GetFailureMechanisms().SelectMany(fm => fm.Calculations).All(c => !c.HasOutput)); - CollectionAssert.IsSubsetOf(expectedAffectedObjects, affectedObjects); - DuneLocationsTestHelper.AssertDuneLocationCalculationsHaveNoOutputs(duneErosionFailureMechanism); - } - - [Test] - [TestCase(AssessmentSectionComposition.Dune, AssessmentSectionComposition.Dike, TestName = "ChangeComposition_ChangeToNonDuneNoLocationsWithOutput_ChangeCompositionReturnsAllAffectedObjects(Dune,Dike)")] - [TestCase(AssessmentSectionComposition.Dune, AssessmentSectionComposition.DikeAndDune, TestName = "ChangeComposition_ChangeToNonDuneNoLocationsWithOutput_ChangeCompositionReturnsAllAffectedObjects(Dune,DikeDune)")] - public void ChangeComposition_ChangeToNonDuneAndNoCalculationsWithOutput_ChangeCompositionAndReturnsAllAffectedObjects(AssessmentSectionComposition oldComposition, - AssessmentSectionComposition newComposition) - { - // Setup - AssessmentSection assessmentSection = TestDataGenerator.GetAssessmentSectionWithAllCalculationConfigurationsWithoutCalculationOutput(oldComposition); - - DuneErosionFailureMechanism duneErosionFailureMechanism = assessmentSection.DuneErosion; - IEnumerable expectedAffectedObjects = - GetAllAffectedDuneLocationCalculations(duneErosionFailureMechanism).Concat(new IObservable[] - { - assessmentSection - }) - .ToArray(); - - var handler = new AssessmentSectionCompositionChangeHandler(); - - // Call - IEnumerable affectedObjects = null; - void Call() => affectedObjects = handler.ChangeComposition(assessmentSection, newComposition); - - // Assert - TestHelper.AssertLogMessageIsGenerated(Call, "Alle berekende hydraulische belastingen van de relevante toetssporen zijn verwijderd.", 1); - - Assert.AreEqual(newComposition, assessmentSection.Composition); - Assert.True(assessmentSection.GetFailureMechanisms().SelectMany(fm => fm.Calculations).All(c => !c.HasOutput)); - CollectionAssert.IsSubsetOf(expectedAffectedObjects, affectedObjects); - - DuneLocationsTestHelper.AssertDuneLocationCalculationsHaveNoOutputs(duneErosionFailureMechanism); - } - - [Test] - [TestCase(AssessmentSectionComposition.Dike, AssessmentSectionComposition.Dune, TestName = "ChangeComposition_ChangeToDuneNoLocationsWithOutput_ChangeCompositionReturnsAllAffectedObjects(Dike,Dune)")] - [TestCase(AssessmentSectionComposition.DikeAndDune, AssessmentSectionComposition.Dune, TestName = "ChangeComposition_ChangeToDuneNoLocationsWithOutput_ChangeCompositionReturnsAllAffectedObjects(DikeDune,Dune)")] - public void ChangeComposition_ChangeToDuneAndNoHydraulicBoundaryLocationsWithOutput_ChangeCompositionAndReturnsAllAffectedObjects(AssessmentSectionComposition oldComposition, - AssessmentSectionComposition newComposition) - { - // Setup - AssessmentSection assessmentSection = TestDataGenerator.GetAssessmentSectionWithAllCalculationConfigurationsWithoutHydraulicBoundaryLocationAndDuneOutput(oldComposition); - - IEnumerable notAffectedObjects = GetDuneIrrelevantFailureMechanisms(assessmentSection) - .SelectMany(fm => fm.Calculations) - .Where(calc => calc.HasOutput) - .ToArray(); - - IObservable[] expectedAffectedObjects = new IObservable[] - { - assessmentSection - }.Concat(GetDuneRelevantFailureMechanisms(assessmentSection) - .SelectMany(fm => fm.Calculations) - .Where(c => c.HasOutput)).ToArray(); - - var handler = new AssessmentSectionCompositionChangeHandler(); - - // Call - IEnumerable affectedObjects = null; - void Call() => affectedObjects = handler.ChangeComposition(assessmentSection, newComposition); - - // Assert - TestHelper.AssertLogMessageIsGenerated(Call, "De resultaten van 28 berekeningen zijn verwijderd.", 1); - Assert.AreEqual(newComposition, assessmentSection.Composition); - - // Assert - AssertCorrectOutputClearedWhenCompositionDune(notAffectedObjects, assessmentSection); - CollectionAssert.IsSubsetOf(expectedAffectedObjects, affectedObjects); - } - - [Test] - [TestCase(AssessmentSectionComposition.Dike, AssessmentSectionComposition.DikeAndDune, TestName = "ChangeComposition_ChangeToNonDuneNoLocationsWithOutput_ChangeCompositionReturnsAffectedObjects(Dike,DikeDune)")] - [TestCase(AssessmentSectionComposition.DikeAndDune, AssessmentSectionComposition.Dike, TestName = "ChangeComposition_ChangeToNonDuneNoLocationsWithOutput_ChangeCompositionReturnsAffectedObjects(DikeDune,Dike)")] - [TestCase(AssessmentSectionComposition.Dune, AssessmentSectionComposition.Dike, TestName = "ChangeComposition_ChangeToNonDuneNoLocationsWithOutput_ChangeCompositionReturnsAffectedObjects(Dune,Dike)")] - [TestCase(AssessmentSectionComposition.Dune, AssessmentSectionComposition.DikeAndDune, TestName = "ChangeComposition_ChangeToNonDuneNoLocationsWithOutput_ChangeCompositionReturnsAffectedObjects(Dune,DikeDune)")] - public void ChangeComposition_ChangeToNonDuneAndNoHydraulicBoundaryLocationsWithOutput_ChangeCompositionAndReturnsAllAffectedObjects(AssessmentSectionComposition oldComposition, - AssessmentSectionComposition newComposition) - { - // Setup - AssessmentSection assessmentSection = TestDataGenerator.GetAssessmentSectionWithAllCalculationConfigurationsWithoutHydraulicBoundaryLocationAndDuneOutput(oldComposition); - - IEnumerable expectedUnaffectedObjects = assessmentSection.GetFailureMechanisms() - .SelectMany(fm => fm.Calculations) - .Where(calc => calc.HasOutput) - .ToArray(); - - IObservable[] expectedAffectedObjects = - { - assessmentSection - }; - - var handler = new AssessmentSectionCompositionChangeHandler(); - - // Call - IEnumerable affectedObjects = handler.ChangeComposition(assessmentSection, newComposition); - - // Assert - Assert.AreEqual(newComposition, assessmentSection.Composition); - AssertOutputNotCleared(expectedUnaffectedObjects, assessmentSection.GetFailureMechanisms()); - - CollectionAssert.IsSubsetOf(expectedAffectedObjects, affectedObjects); - } - - [Test] [TestCase(AssessmentSectionComposition.Dike, AssessmentSectionComposition.DikeAndDune, TestName = "ChangeComposition_SetNewValue_ChangeRelevancyAndReturnAffectedObjects(Dike, DikeDune)")] [TestCase(AssessmentSectionComposition.Dike, AssessmentSectionComposition.Dune, TestName = "ChangeComposition_SetNewValue_ChangeRelevancyAndReturnAffectedObjects(Dike, Dune)")] [TestCase(AssessmentSectionComposition.DikeAndDune, AssessmentSectionComposition.Dike, TestName = "ChangeComposition_SetNewValue_ChangeRelevancyAndReturnAffectedObjects(DikeDune, Dike)")] @@ -423,134 +100,5 @@ CollectionAssert.AreEquivalent(expectedAffectedObjects, affectedObjects); } - - /// - /// Asserts whether the expected unaffected objects retain their outputs when cleared. - /// - /// The list of objects that should not have been affected. - /// The failure mechanisms to assert. - private static void AssertOutputNotCleared(IEnumerable expectedUnaffectedObjects, IEnumerable failureMechanisms) - { - CollectionAssert.AreEquivalent(expectedUnaffectedObjects, - failureMechanisms.SelectMany(fm => fm.Calculations) - .Where(calc => calc.HasOutput), - "The calculation output within the failure mechanisms should not have been deleted in this scenario"); - } - - /// - /// Asserts whether the correct failure mechanism outputs are cleared when the - /// changes to . - /// - /// The objects that should not have been affected. - /// The assessment section to assert. - private static void AssertCorrectOutputClearedWhenCompositionDune(IEnumerable unaffectedObjects, IAssessmentSection assessmentSection) - { - Assert.IsTrue(GetDuneRelevantFailureMechanisms(assessmentSection).SelectMany(fm => fm.Calculations) - .All(calc => !calc.HasOutput)); - - AssertOutputNotCleared(unaffectedObjects, GetDuneIrrelevantFailureMechanisms(assessmentSection)); - } - - #region Dune Erosion failure mechanism helpers - - private static IEnumerable GetAllAffectedDuneLocationCalculations(DuneErosionFailureMechanism failureMechanism) - { - return DuneLocationsTestHelper.GetAllDuneLocationCalculationsWithOutput(failureMechanism); - } - - private static bool HasDuneLocationCalculationOutput(DuneLocationCalculation calculation) - { - return calculation.Output != null; - } - - #endregion - - #region LinQ queries for expectancies - - /// - /// Retrieves the failure mechanisms that should be cleared when the - /// changes to Dunes. - /// - /// The assessment section to retrieve the failure mechanisms from. - /// A collection of affected failure mechanisms when changing to - /// . - private static IEnumerable GetDuneRelevantFailureMechanisms(IAssessmentSection assessmentSection) - { - var relevantFailureMechanisms = new List(); - - foreach (IFailureMechanism failureMechanism in assessmentSection.GetFailureMechanisms()) - { - var pipingFailureMechanism = failureMechanism as PipingFailureMechanism; - var grassCoverErosionInwardsFailureMechanism = failureMechanism as GrassCoverErosionInwardsFailureMechanism; - var grassCoverErosionOutwardsFailureMechanism = failureMechanism as GrassCoverErosionOutwardsFailureMechanism; - var heightStructuresFailureMechanism = failureMechanism as HeightStructuresFailureMechanism; - var closingStructuresFailureMechanism = failureMechanism as ClosingStructuresFailureMechanism; - var stabilityPointStructuresFailureMechanism = failureMechanism as StabilityPointStructuresFailureMechanism; - - if (pipingFailureMechanism != null) - { - relevantFailureMechanisms.Add(pipingFailureMechanism); - } - - if (grassCoverErosionInwardsFailureMechanism != null) - { - relevantFailureMechanisms.Add(grassCoverErosionInwardsFailureMechanism); - } - - if (grassCoverErosionOutwardsFailureMechanism != null) - { - relevantFailureMechanisms.Add(grassCoverErosionOutwardsFailureMechanism); - } - - if (heightStructuresFailureMechanism != null) - { - relevantFailureMechanisms.Add(heightStructuresFailureMechanism); - } - - if (closingStructuresFailureMechanism != null) - { - relevantFailureMechanisms.Add(closingStructuresFailureMechanism); - } - - if (stabilityPointStructuresFailureMechanism != null) - { - relevantFailureMechanisms.Add(stabilityPointStructuresFailureMechanism); - } - } - - return relevantFailureMechanisms; - } - - /// - /// Retrieves all failure mechanisms that should be untouched when the - /// changes to Dunes. - /// - /// The assessment section to retrieve the failure mechanisms from. - /// A collection of irrelevant (unaffected) failure mechanisms when changing the - /// to . - private static IEnumerable GetDuneIrrelevantFailureMechanisms(IAssessmentSection assessmentSection) - { - var failureMechanisms = new List(); - - foreach (IFailureMechanism failureMechanism in assessmentSection.GetFailureMechanisms()) - { - var waveImpactAsphaltCoverFailureMechanism = failureMechanism as WaveImpactAsphaltCoverFailureMechanism; - var stabilityStoneCoverFailureMechanism = failureMechanism as StabilityStoneCoverFailureMechanism; - - if (waveImpactAsphaltCoverFailureMechanism != null) - { - failureMechanisms.Add(waveImpactAsphaltCoverFailureMechanism); - } - - if (stabilityStoneCoverFailureMechanism != null) - { - failureMechanisms.Add(stabilityStoneCoverFailureMechanism); - } - } - - return failureMechanisms; - } - - #endregion } } \ No newline at end of file