Index: Riskeer/Integration/src/Riskeer.Integration.IO/Factories/ExportableFailureMechanismFactory.cs
===================================================================
diff -u -r838241db2e78d6f4dc62648bca2fc58aec061365 -r7b3aff14823c770cf5801b80f00f19892e40cfbe
--- Riskeer/Integration/src/Riskeer.Integration.IO/Factories/ExportableFailureMechanismFactory.cs (.../ExportableFailureMechanismFactory.cs) (revision 838241db2e78d6f4dc62648bca2fc58aec061365)
+++ Riskeer/Integration/src/Riskeer.Integration.IO/Factories/ExportableFailureMechanismFactory.cs (.../ExportableFailureMechanismFactory.cs) (revision 7b3aff14823c770cf5801b80f00f19892e40cfbe)
@@ -26,6 +26,7 @@
using Riskeer.Common.Data.AssessmentSection;
using Riskeer.Common.Data.Exceptions;
using Riskeer.Common.Data.FailureMechanism;
+using Riskeer.Integration.IO.Exceptions;
using Riskeer.Integration.IO.Helpers;
using Riskeer.Integration.IO.Properties;
@@ -54,6 +55,8 @@
/// An with assembly results.
/// Thrown when any parameter is null.
/// Thrown when assembly results cannot be created.
+ /// Thrown when
+ /// returns an invalid result that cannot be exported.
public static ExportableGenericFailureMechanism CreateExportableGenericFailureMechanism(
IdentifierGenerator idGenerator, ExportableFailureMechanismSectionRegistry registry, TFailureMechanism failureMechanism, IAssessmentSection assessmentSection,
Func assembleFailureMechanismFunc,
@@ -96,8 +99,8 @@
new ExportableFailureMechanismAssemblyResult(
assemblyResultWrapper.AssemblyResult,
ExportableAssemblyMethodFactory.Create(assemblyResultWrapper.AssemblyMethod)),
- CreateExportableFailureMechanismSectionResults(idGenerator, registry,
- failureMechanism, assessmentSection, assembleFailureMechanismSectionFunc),
+ CreateExportableFailureMechanismSectionResults(
+ idGenerator, registry, failureMechanism, assessmentSection, assembleFailureMechanismSectionFunc),
failureMechanism.Code);
}
@@ -116,6 +119,8 @@
/// An with assembly results.
/// Thrown when any parameter is null.
/// Thrown when assembly results cannot be created.
+ /// Thrown when
+ /// returns an invalid result that cannot be exported.
public static ExportableSpecificFailureMechanism CreateExportableSpecificFailureMechanism(
IdentifierGenerator idGenerator, ExportableFailureMechanismSectionRegistry registry, SpecificFailureMechanism failureMechanism, IAssessmentSection assessmentSection,
Func assembleFailureMechanismFunc,
@@ -156,8 +161,8 @@
new ExportableFailureMechanismAssemblyResult(
assemblyResultWrapper.AssemblyResult,
ExportableAssemblyMethodFactory.Create(assemblyResultWrapper.AssemblyMethod)),
- CreateExportableFailureMechanismSectionResults(idGenerator, registry, failureMechanism,
- assessmentSection, assembleFailureMechanismSectionFunc),
+ CreateExportableFailureMechanismSectionResults(
+ idGenerator, registry, failureMechanism, assessmentSection, assembleFailureMechanismSectionFunc),
failureMechanism.Name);
}
@@ -176,8 +181,9 @@
/// The type of the section result.
/// A collection of .
/// Thrown when assembly results cannot be created.
- private static IEnumerable CreateExportableFailureMechanismSectionResults
- (
+ /// Thrown when
+ /// returns an invalid result that cannot be exported.
+ private static IEnumerable CreateExportableFailureMechanismSectionResults(
IdentifierGenerator idGenerator, ExportableFailureMechanismSectionRegistry registry, TFailureMechanism failureMechanism, IAssessmentSection assessmentSection,
Func assembleFailureMechanismSectionFunc)
where TFailureMechanism : IFailureMechanism
@@ -190,9 +196,16 @@
sectionResult, failureMechanism, assessmentSection);
FailureMechanismSectionAssemblyResult assemblyResult = assemblyResultWrapper.AssemblyResult;
+ if (assemblyResult.FailureMechanismSectionAssemblyGroup == FailureMechanismSectionAssemblyGroup.NoResult
+ || assemblyResult.FailureMechanismSectionAssemblyGroup == FailureMechanismSectionAssemblyGroup.Dominant)
+ {
+ throw new AssemblyFactoryException("The assembly result is invalid and cannot be created.");
+ }
+
exportableResults.Add(
new ExportableFailureMechanismSectionAssemblyResult(
- idGenerator.GetNewId(Resources.ExportableFailureMechanismSectionAssemblyResult_IdPrefix), registry.Get(sectionResult.Section),
+ idGenerator.GetNewId(Resources.ExportableFailureMechanismSectionAssemblyResult_IdPrefix),
+ registry.Get(sectionResult.Section),
assemblyResult.SectionProbability, assemblyResult.FailureMechanismSectionAssemblyGroup,
ExportableAssemblyMethodFactory.Create(assemblyResultWrapper.AssemblyGroupMethod),
ExportableAssemblyMethodFactory.Create(assemblyResultWrapper.ProbabilityMethod)));
Index: Riskeer/Integration/test/Riskeer.Integration.IO.Test/Factories/ExportableFailureMechanismFactoryTest.cs
===================================================================
diff -u -r838241db2e78d6f4dc62648bca2fc58aec061365 -r7b3aff14823c770cf5801b80f00f19892e40cfbe
--- Riskeer/Integration/test/Riskeer.Integration.IO.Test/Factories/ExportableFailureMechanismFactoryTest.cs (.../ExportableFailureMechanismFactoryTest.cs) (revision 838241db2e78d6f4dc62648bca2fc58aec061365)
+++ Riskeer/Integration/test/Riskeer.Integration.IO.Test/Factories/ExportableFailureMechanismFactoryTest.cs (.../ExportableFailureMechanismFactoryTest.cs) (revision 7b3aff14823c770cf5801b80f00f19892e40cfbe)
@@ -32,6 +32,7 @@
using Riskeer.Common.Data.AssessmentSection;
using Riskeer.Common.Data.FailureMechanism;
using Riskeer.Common.Data.TestUtil;
+using Riskeer.Integration.IO.Exceptions;
using Riskeer.Integration.IO.Factories;
using Riskeer.Integration.IO.Helpers;
@@ -143,14 +144,45 @@
}
[Test]
- public void CreateExportableGenericFailureMechanismCreateExportableFailureMechanism_WithValidData_ReturnsExportableFailureMechanism()
+ [TestCase(FailureMechanismSectionAssemblyGroup.NoResult)]
+ [TestCase(FailureMechanismSectionAssemblyGroup.Dominant)]
+ public void CreateExportableGenericFailureMechanism_InvalidFailureMechanismSectionAssemblyResult_ThrowsAssemblyFactoryException(
+ FailureMechanismSectionAssemblyGroup assemblyGroup)
{
// Setup
var random = new Random(21);
var failureMechanism = new TestFailureMechanism();
FailureMechanismTestHelper.AddSections(failureMechanism, random.Next(2, 10));
var assessmentSection = new AssessmentSectionStub();
+ var idGenerator = new IdentifierGenerator();
+
+ var registry = new ExportableFailureMechanismSectionRegistry();
+ RegisterFailureMechanismSections(registry, failureMechanism.Sections);
+
+ // Call
+ void Call() => ExportableFailureMechanismFactory.CreateExportableGenericFailureMechanism(
+ idGenerator, registry, failureMechanism, assessmentSection, (fm, section) => new FailureMechanismAssemblyResultWrapper(
+ random.NextDouble(), random.NextEnumValue()),
+ (sr, fm, section) => new FailureMechanismSectionAssemblyResultWrapper(
+ new FailureMechanismSectionAssemblyResult(
+ random.NextDouble(), random.NextDouble(), random.NextDouble(), assemblyGroup),
+ random.NextEnumValue(), random.NextEnumValue()));
+
+ // Assert
+ var exception = Assert.Throws(Call);
+ Assert.AreEqual("The assembly result is invalid and cannot be created.", exception.Message);
+ }
+
+ [Test]
+ public void CreateExportableGenericFailureMechanism_WithValidData_ReturnsExportableFailureMechanism()
+ {
+ // Setup
+ var random = new Random(21);
+ var failureMechanism = new TestFailureMechanism();
+ FailureMechanismTestHelper.AddSections(failureMechanism, random.Next(2, 10));
+ var assessmentSection = new AssessmentSectionStub();
+
double probability = random.NextDouble();
var assemblyMethod = random.NextEnumValue();
FailureMechanismSectionAssemblyResultWrapper expectedSectionOutput = FailureMechanismSectionAssemblyResultWrapperTestFactory.Create();
@@ -285,6 +317,37 @@
}
[Test]
+ [TestCase(FailureMechanismSectionAssemblyGroup.NoResult)]
+ [TestCase(FailureMechanismSectionAssemblyGroup.Dominant)]
+ public void CreateExportableSpecificFailureMechanism_InvalidFailureMechanismSectionAssemblyResult_ThrowsAssemblyFactoryException(
+ FailureMechanismSectionAssemblyGroup assemblyGroup)
+ {
+ // Setup
+ var random = new Random(21);
+ var failureMechanism = new SpecificFailureMechanism();
+ FailureMechanismTestHelper.AddSections(failureMechanism, random.Next(2, 10));
+ var assessmentSection = new AssessmentSectionStub();
+
+ var idGenerator = new IdentifierGenerator();
+
+ var registry = new ExportableFailureMechanismSectionRegistry();
+ RegisterFailureMechanismSections(registry, failureMechanism.Sections);
+
+ // Call
+ void Call() => ExportableFailureMechanismFactory.CreateExportableSpecificFailureMechanism(
+ idGenerator, registry, failureMechanism, assessmentSection, (fm, section) => new FailureMechanismAssemblyResultWrapper(
+ random.NextDouble(), random.NextEnumValue()),
+ (sr, fm, section) => new FailureMechanismSectionAssemblyResultWrapper(
+ new FailureMechanismSectionAssemblyResult(
+ random.NextDouble(), random.NextDouble(), random.NextDouble(), assemblyGroup),
+ random.NextEnumValue(), random.NextEnumValue()));
+
+ // Assert
+ var exception = Assert.Throws(Call);
+ Assert.AreEqual("The assembly result is invalid and cannot be created.", exception.Message);
+ }
+
+ [Test]
public void CreateExportableSpecificFailureMechanism_WithValidData_ReturnsExportableFailureMechanism()
{
// Setup