Index: Riskeer/Integration/src/Riskeer.Integration.IO/Exporters/AssemblyExporter.cs =================================================================== diff -u -rbe9061aa42cbccd8264a6db05444714629667ff5 -r1639b0d3f1a222deb4ae72215de4b2db0e12fc0f --- Riskeer/Integration/src/Riskeer.Integration.IO/Exporters/AssemblyExporter.cs (.../AssemblyExporter.cs) (revision be9061aa42cbccd8264a6db05444714629667ff5) +++ Riskeer/Integration/src/Riskeer.Integration.IO/Exporters/AssemblyExporter.cs (.../AssemblyExporter.cs) (revision 1639b0d3f1a222deb4ae72215de4b2db0e12fc0f) @@ -102,6 +102,7 @@ private bool AreSpecificFailureMechanismsUniquelyNamed() { return assessmentSection.SpecificFailureMechanisms + .Where(sf => sf.InAssembly) .Select(fp => fp.Name) .GroupBy(name => name) .All(group => group.Count() == 1); Index: Riskeer/Integration/test/Riskeer.Integration.IO.Test/Exporters/AssemblyExporterTest.cs =================================================================== diff -u -rf3e168c8d53e82da7e790ed7766aa38a18e417ae -r1639b0d3f1a222deb4ae72215de4b2db0e12fc0f --- Riskeer/Integration/test/Riskeer.Integration.IO.Test/Exporters/AssemblyExporterTest.cs (.../AssemblyExporterTest.cs) (revision f3e168c8d53e82da7e790ed7766aa38a18e417ae) +++ Riskeer/Integration/test/Riskeer.Integration.IO.Test/Exporters/AssemblyExporterTest.cs (.../AssemblyExporterTest.cs) (revision 1639b0d3f1a222deb4ae72215de4b2db0e12fc0f) @@ -88,25 +88,47 @@ } [Test] - public void Export_SpecificFailureMechanismsWithSameNames_LogsErrorAndReturnsFalse() + [TestCase(true, true, false)] + [TestCase(true, false, true)] + [TestCase(false, true, true)] + [TestCase(false, false, true)] + public void Export_SpecificFailureMechanismsWithSameName_ExpectedResultBasedOnInAssemblyState( + bool firstSpecificFailureMechanismInAssembly, + bool secondSpecificFailureMechanismInAssembly, + bool isExportExpectedToBeSuccessful) { // Setup - string filePath = TestHelper.GetScratchPadPath(nameof(Export_SpecificFailureMechanismsWithSameNames_LogsErrorAndReturnsFalse)); + string filePath = TestHelper.GetScratchPadPath(nameof(Export_SpecificFailureMechanismsWithSameName_ExpectedResultBasedOnInAssemblyState)); AssessmentSection assessmentSection = CreateConfiguredAssessmentSection(); - assessmentSection.SpecificFailureMechanisms.Last().Name = assessmentSection.SpecificFailureMechanisms.First().Name; + SpecificFailureMechanism specificFailureMechanism1 = assessmentSection.SpecificFailureMechanisms.ElementAt(0); + SpecificFailureMechanism specificFailureMechanism2 = assessmentSection.SpecificFailureMechanisms.ElementAt(1); + + specificFailureMechanism1.InAssembly = firstSpecificFailureMechanismInAssembly; + specificFailureMechanism2.InAssembly = secondSpecificFailureMechanismInAssembly; + assessmentSection.SpecificFailureMechanisms.Last().Name = specificFailureMechanism1.Name; + var exporter = new AssemblyExporter(assessmentSection, filePath); using (new AssemblyToolCalculatorFactoryConfig()) { - // Call - var isExported = true; - void Call() => isExported = exporter.Export(); + SetCombinedFailureMechanismSectionAssemblyOutput(assessmentSection); - // Assert - const string expectedMessage = "Om assemblageresultaten te kunnen exporteren moeten de specifieke faalmechanismen unieke namen hebben."; - TestHelper.AssertLogMessageWithLevelIsGenerated(Call, new Tuple(expectedMessage, LogLevelConstant.Error)); - Assert.IsFalse(isExported); + // Call & Assert + if (isExportExpectedToBeSuccessful) + { + Assert.IsTrue(exporter.Export()); + } + else + { + var isExported = true; + + const string expectedMessage = "Om assemblageresultaten te kunnen exporteren moeten de specifieke faalmechanismen unieke namen hebben."; + TestHelper.AssertLogMessageWithLevelIsGenerated(() => isExported = exporter.Export(), + new Tuple(expectedMessage, LogLevelConstant.Error)); + + Assert.IsFalse(isExported); + } } } @@ -177,19 +199,8 @@ using (new FileDisposeHelper(filePath)) using (new AssemblyToolCalculatorFactoryConfig()) { - IEnumerable failureMechanisms = assessmentSection.GetFailureMechanisms() - .Concat(assessmentSection.SpecificFailureMechanisms); + SetCombinedFailureMechanismSectionAssemblyOutput(assessmentSection); - var calculatorFactory = (TestAssemblyToolCalculatorFactory) AssemblyToolCalculatorFactory.Instance; - AssessmentSectionAssemblyCalculatorStub assessmentSectionAssemblyCalculator = calculatorFactory.LastCreatedAssessmentSectionAssemblyCalculator; - assessmentSectionAssemblyCalculator.CombinedFailureMechanismSectionAssemblyOutput = new[] - { - new CombinedFailureMechanismSectionAssembly(new CombinedAssemblyFailureMechanismSection(0, 2.5, FailureMechanismSectionAssemblyGroup.II), - failureMechanisms.Select(fm => FailureMechanismSectionAssemblyGroup.II)), - new CombinedFailureMechanismSectionAssembly(new CombinedAssemblyFailureMechanismSection(2.5, 5, FailureMechanismSectionAssemblyGroup.III), - failureMechanisms.Select(fm => FailureMechanismSectionAssemblyGroup.III)) - }; - try { // Call @@ -290,5 +301,21 @@ return assessmentSection; } + + private static void SetCombinedFailureMechanismSectionAssemblyOutput(IAssessmentSection assessmentSection) + { + IEnumerable failureMechanisms = assessmentSection.GetFailureMechanisms() + .Concat(assessmentSection.SpecificFailureMechanisms); + + var calculatorFactory = (TestAssemblyToolCalculatorFactory) AssemblyToolCalculatorFactory.Instance; + AssessmentSectionAssemblyCalculatorStub assessmentSectionAssemblyCalculator = calculatorFactory.LastCreatedAssessmentSectionAssemblyCalculator; + assessmentSectionAssemblyCalculator.CombinedFailureMechanismSectionAssemblyOutput = new[] + { + new CombinedFailureMechanismSectionAssembly(new CombinedAssemblyFailureMechanismSection(0, 2.5, FailureMechanismSectionAssemblyGroup.II), + failureMechanisms.Select(fm => FailureMechanismSectionAssemblyGroup.II)), + new CombinedFailureMechanismSectionAssembly(new CombinedAssemblyFailureMechanismSection(2.5, 5, FailureMechanismSectionAssemblyGroup.III), + failureMechanisms.Select(fm => FailureMechanismSectionAssemblyGroup.III)) + }; + } } } \ No newline at end of file