Index: Riskeer/Integration/src/Riskeer.Integration.IO/Factories/ExportableAssessmentSectionFactory.cs =================================================================== diff -u -rb300d03dc113da59301ff092b7d47536f02d6238 -r5043fc31464a612ec3d6f7e0551691b013e70b9d --- Riskeer/Integration/src/Riskeer.Integration.IO/Factories/ExportableAssessmentSectionFactory.cs (.../ExportableAssessmentSectionFactory.cs) (revision b300d03dc113da59301ff092b7d47536f02d6238) +++ Riskeer/Integration/src/Riskeer.Integration.IO/Factories/ExportableAssessmentSectionFactory.cs (.../ExportableAssessmentSectionFactory.cs) (revision 5043fc31464a612ec3d6f7e0551691b013e70b9d) @@ -24,6 +24,7 @@ using Riskeer.AssemblyTool.Data; using Riskeer.Common.Data.AssessmentSection; using Riskeer.Common.Data.Exceptions; +using Riskeer.Common.Data.FailurePath; using Riskeer.Integration.Data; using Riskeer.Integration.Data.Assembly; using Riskeer.Integration.IO.Assembly; @@ -78,33 +79,45 @@ /// /// Creates a collection of - /// for failure mechanisms with an assembly result without a probability based on . + /// for failure mechanisms that are in assembly based on . /// /// The assessment section to create a collection of /// with probability for. /// A collection of based on failure - /// mechanisms with assembly results without a probability. + /// mechanisms that are in assembly. /// Thrown when assembly results cannot be created for . private static IEnumerable CreateExportableFailureMechanisms(AssessmentSection assessmentSection) { - return new[] + var failureMechanisms = new List(); + + AddFailureMechanismWhenInAssembly(failureMechanisms, assessmentSection.Piping, fm => ExportablePipingFailureMechanismFactory.CreateExportableFailureMechanism(fm, assessmentSection)); + AddFailureMechanismWhenInAssembly(failureMechanisms, assessmentSection.MacroStabilityInwards, fm => ExportableMacroStabilityInwardsFailureMechanismFactory.CreateExportableFailureMechanism(fm, assessmentSection)); + AddFailureMechanismWhenInAssembly(failureMechanisms, assessmentSection.GrassCoverErosionInwards, fm => ExportableGrassCoverErosionInwardsFailureMechanismFactory.CreateExportableFailureMechanism(fm, assessmentSection)); + AddFailureMechanismWhenInAssembly(failureMechanisms, assessmentSection.HeightStructures, fm => ExportableHeightStructuresFailureMechanismFactory.CreateExportableFailureMechanism(fm, assessmentSection)); + AddFailureMechanismWhenInAssembly(failureMechanisms, assessmentSection.ClosingStructures, fm => ExportableClosingStructuresFailureMechanismFactory.CreateExportableFailureMechanism(fm, assessmentSection)); + AddFailureMechanismWhenInAssembly(failureMechanisms, assessmentSection.StabilityPointStructures, fm => ExportableStabilityPointStructuresFailureMechanismFactory.CreateExportableFailureMechanism(fm, assessmentSection)); + AddFailureMechanismWhenInAssembly(failureMechanisms, assessmentSection.StabilityStoneCover, fm => ExportableStabilityStoneCoverFailureMechanismFactory.CreateExportableFailureMechanism(fm, assessmentSection)); + AddFailureMechanismWhenInAssembly(failureMechanisms, assessmentSection.WaveImpactAsphaltCover, fm => ExportableWaveImpactAsphaltCoverFailureMechanismFactory.CreateExportableFailureMechanism(fm, assessmentSection)); + AddFailureMechanismWhenInAssembly(failureMechanisms, assessmentSection.GrassCoverErosionOutwards, fm => ExportableGrassCoverErosionOutwardsFailureMechanismFactory.CreateExportableFailureMechanism(fm, assessmentSection)); + AddFailureMechanismWhenInAssembly(failureMechanisms, assessmentSection.DuneErosion, fm => ExportableDuneErosionFailureMechanismFactory.CreateExportableFailureMechanism(fm, assessmentSection)); + AddFailureMechanismWhenInAssembly(failureMechanisms, assessmentSection.Microstability, fm => ExportableMicrostabilityFailureMechanismFactory.CreateExportableFailureMechanism(fm, assessmentSection)); + AddFailureMechanismWhenInAssembly(failureMechanisms, assessmentSection.GrassCoverSlipOffOutwards, fm => ExportableGrassCoverSlipOffOutwardsFailureMechanismFactory.CreateExportableFailureMechanism(fm, assessmentSection)); + AddFailureMechanismWhenInAssembly(failureMechanisms, assessmentSection.GrassCoverSlipOffInwards, fm => ExportableGrassCoverSlipOffInwardsFailureMechanismFactory.CreateExportableFailureMechanism(fm, assessmentSection)); + AddFailureMechanismWhenInAssembly(failureMechanisms, assessmentSection.PipingStructure, fm => ExportablePipingStructureFailureMechanismFactory.CreateExportableFailureMechanism(fm, assessmentSection)); + AddFailureMechanismWhenInAssembly(failureMechanisms, assessmentSection.WaterPressureAsphaltCover, fm => ExportableWaterPressureAsphaltCoverFailureMechanismFactory.CreateExportableFailureMechanism(fm, assessmentSection)); + + return failureMechanisms; + } + + private static void AddFailureMechanismWhenInAssembly(List exportableFailureMechanisms, + TFailureMechanism failureMechanism, + Func createExportableFailureMechanismFunc) + where TFailureMechanism : IFailurePath + { + if (failureMechanism.InAssembly) { - ExportablePipingFailureMechanismFactory.CreateExportableFailureMechanism(assessmentSection.Piping, assessmentSection), - ExportableMacroStabilityInwardsFailureMechanismFactory.CreateExportableFailureMechanism(assessmentSection.MacroStabilityInwards, assessmentSection), - ExportableGrassCoverErosionInwardsFailureMechanismFactory.CreateExportableFailureMechanism(assessmentSection.GrassCoverErosionInwards, assessmentSection), - ExportableHeightStructuresFailureMechanismFactory.CreateExportableFailureMechanism(assessmentSection.HeightStructures, assessmentSection), - ExportableClosingStructuresFailureMechanismFactory.CreateExportableFailureMechanism(assessmentSection.ClosingStructures, assessmentSection), - ExportableStabilityPointStructuresFailureMechanismFactory.CreateExportableFailureMechanism(assessmentSection.StabilityPointStructures, assessmentSection), - ExportableStabilityStoneCoverFailureMechanismFactory.CreateExportableFailureMechanism(assessmentSection.StabilityStoneCover, assessmentSection), - ExportableWaveImpactAsphaltCoverFailureMechanismFactory.CreateExportableFailureMechanism(assessmentSection.WaveImpactAsphaltCover, assessmentSection), - ExportableGrassCoverErosionOutwardsFailureMechanismFactory.CreateExportableFailureMechanism(assessmentSection.GrassCoverErosionOutwards, assessmentSection), - ExportableDuneErosionFailureMechanismFactory.CreateExportableFailureMechanism(assessmentSection.DuneErosion, assessmentSection), - ExportableMicrostabilityFailureMechanismFactory.CreateExportableFailureMechanism(assessmentSection.Microstability, assessmentSection), - ExportableGrassCoverSlipOffOutwardsFailureMechanismFactory.CreateExportableFailureMechanism(assessmentSection.GrassCoverSlipOffOutwards, assessmentSection), - ExportableGrassCoverSlipOffInwardsFailureMechanismFactory.CreateExportableFailureMechanism(assessmentSection.GrassCoverSlipOffInwards, assessmentSection), - ExportablePipingStructureFailureMechanismFactory.CreateExportableFailureMechanism(assessmentSection.PipingStructure, assessmentSection), - ExportableWaterPressureAsphaltCoverFailureMechanismFactory.CreateExportableFailureMechanism(assessmentSection.WaterPressureAsphaltCover, assessmentSection) - }; + exportableFailureMechanisms.Add(createExportableFailureMechanismFunc(failureMechanism)); + } } /// Index: Riskeer/Integration/test/Riskeer.Integration.IO.Test/Exporters/AssemblyExporterTest.cs =================================================================== diff -u -rdc9211089959e02aeea2ab96d684fb3fa731dd15 -r5043fc31464a612ec3d6f7e0551691b013e70b9d --- Riskeer/Integration/test/Riskeer.Integration.IO.Test/Exporters/AssemblyExporterTest.cs (.../AssemblyExporterTest.cs) (revision dc9211089959e02aeea2ab96d684fb3fa731dd15) +++ Riskeer/Integration/test/Riskeer.Integration.IO.Test/Exporters/AssemblyExporterTest.cs (.../AssemblyExporterTest.cs) (revision 5043fc31464a612ec3d6f7e0551691b013e70b9d) @@ -47,10 +47,10 @@ string filePath = TestHelper.GetScratchPadPath(Path.Combine("export", "test.gml")); // Call - TestDelegate call = () => new AssemblyExporter(null, filePath); + void Call() => new AssemblyExporter(null, filePath); // Assert - var exception = Assert.Throws(call); + var exception = Assert.Throws(Call); Assert.AreEqual("assessmentSection", exception.ParamName); } @@ -62,10 +62,10 @@ var assessmentSection = new AssessmentSection(random.NextEnumValue()); // Call - TestDelegate call = () => new AssemblyExporter(assessmentSection, null); + void Call() => new AssemblyExporter(assessmentSection, null); // Assert - Assert.Throws(call); + Assert.Throws(Call); } [Test] Index: Riskeer/Integration/test/Riskeer.Integration.IO.Test/Factories/ExportableAssessmentSectionFactoryTest.cs =================================================================== diff -u -rb300d03dc113da59301ff092b7d47536f02d6238 -r5043fc31464a612ec3d6f7e0551691b013e70b9d --- Riskeer/Integration/test/Riskeer.Integration.IO.Test/Factories/ExportableAssessmentSectionFactoryTest.cs (.../ExportableAssessmentSectionFactoryTest.cs) (revision b300d03dc113da59301ff092b7d47536f02d6238) +++ Riskeer/Integration/test/Riskeer.Integration.IO.Test/Factories/ExportableAssessmentSectionFactoryTest.cs (.../ExportableAssessmentSectionFactoryTest.cs) (revision 5043fc31464a612ec3d6f7e0551691b013e70b9d) @@ -101,10 +101,68 @@ AssertExportableFailureMechanismsWithoutProbability(exportableAssessmentSection.FailureMechanisms, assessmentSection); - Assert.AreEqual(0, exportableAssessmentSection.CombinedSectionAssemblies.Count()); + CollectionAssert.IsEmpty(exportableAssessmentSection.CombinedSectionAssemblies); } } + [Test] + public void CreateExportableAssessmentSection_AllFailureMechanismNotInAssembly_ReturnsExpectedValues() + { + // Setup + const string name = "assessmentSectionName"; + const string id = "assessmentSectionId"; + + var random = new Random(21); + var assessmentSection = new AssessmentSection(random.NextEnumValue()) + { + Name = name, + Id = id + }; + ReferenceLineTestFactory.SetReferenceLineGeometry(assessmentSection.ReferenceLine); + + FailureMechanismTestHelper.AddSections(assessmentSection.Piping, random.Next(1, 10)); + FailureMechanismTestHelper.AddSections(assessmentSection.MacroStabilityInwards, random.Next(1, 10)); + FailureMechanismTestHelper.AddSections(assessmentSection.GrassCoverErosionInwards, random.Next(1, 10)); + FailureMechanismTestHelper.AddSections(assessmentSection.HeightStructures, random.Next(1, 10)); + FailureMechanismTestHelper.AddSections(assessmentSection.ClosingStructures, random.Next(1, 10)); + FailureMechanismTestHelper.AddSections(assessmentSection.StabilityPointStructures, random.Next(1, 10)); + + FailureMechanismTestHelper.AddSections(assessmentSection.StabilityStoneCover, random.Next(1, 10)); + FailureMechanismTestHelper.AddSections(assessmentSection.WaveImpactAsphaltCover, random.Next(1, 10)); + FailureMechanismTestHelper.AddSections(assessmentSection.GrassCoverErosionOutwards, random.Next(1, 10)); + FailureMechanismTestHelper.AddSections(assessmentSection.DuneErosion, random.Next(1, 10)); + + FailureMechanismTestHelper.AddSections(assessmentSection.Microstability, random.Next(1, 10)); + FailureMechanismTestHelper.AddSections(assessmentSection.GrassCoverSlipOffOutwards, random.Next(1, 10)); + FailureMechanismTestHelper.AddSections(assessmentSection.GrassCoverSlipOffInwards, random.Next(1, 10)); + FailureMechanismTestHelper.AddSections(assessmentSection.PipingStructure, random.Next(1, 10)); + FailureMechanismTestHelper.AddSections(assessmentSection.WaterPressureAsphaltCover, random.Next(1, 10)); + + foreach (IFailureMechanism failureMechanism in assessmentSection.GetFailureMechanisms()) + { + failureMechanism.InAssembly = false; + } + + using (new AssemblyToolCalculatorFactoryConfig()) + { + // Call + ExportableAssessmentSection exportableAssessmentSection = ExportableAssessmentSectionFactory.CreateExportableAssessmentSection(assessmentSection); + + // Assert + Assert.AreEqual(name, exportableAssessmentSection.Name); + Assert.AreEqual(id, exportableAssessmentSection.Id); + CollectionAssert.AreEqual(assessmentSection.ReferenceLine.Points, exportableAssessmentSection.Geometry); + + ExportableAssessmentSectionAssemblyResult exportableAssessmentSectionAssemblyResult = exportableAssessmentSection.AssessmentSectionAssembly; + Assert.AreEqual(ExportableAssemblyMethod.WBI2B1, exportableAssessmentSectionAssemblyResult.AssemblyMethod); + Assert.AreEqual(AssessmentSectionAssemblyGroup.APlus, exportableAssessmentSectionAssemblyResult.AssemblyGroup); + Assert.AreEqual(0.14, exportableAssessmentSectionAssemblyResult.Probability); + + CollectionAssert.IsEmpty(exportableAssessmentSection.FailureMechanisms); + CollectionAssert.IsEmpty(exportableAssessmentSection.CombinedSectionAssemblies); + } + } + private static void AssertExportableFailureMechanismsWithoutProbability( IEnumerable exportableFailureMechanisms, AssessmentSection assessmentSection)