// Copyright (C) Stichting Deltares 2017. All rights reserved.
//
// This file is part of Ringtoets.
//
// Ringtoets is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
//
// All names, logos, and references to "Deltares" are registered trademarks of
// Stichting Deltares and remain full property of Stichting Deltares at all times.
// All rights reserved.
using System;
using System.Collections.Generic;
using System.Linq;
using NUnit.Framework;
using Rhino.Mocks;
using Ringtoets.AssemblyTool.Data;
using Ringtoets.AssemblyTool.KernelWrapper.Calculators;
using Ringtoets.AssemblyTool.KernelWrapper.TestUtil.Calculators;
using Ringtoets.AssemblyTool.KernelWrapper.TestUtil.Calculators.Assembly;
using Ringtoets.Common.Data.AssessmentSection;
using Ringtoets.Common.Data.TestUtil;
using Ringtoets.HeightStructures.Data;
using Ringtoets.Integration.IO.Assembly;
using Ringtoets.Integration.IO.Factories;
using Ringtoets.Integration.IO.TestUtil;
namespace Ringtoets.Integration.IO.Test.Factories
{
[TestFixture]
public class ExportableHeightStructuresFailureMechanismFactoryTest
{
[Test]
public void CreateExportableFailureMechanism_FailureMechanismNull_ThrowsArgumentNullException()
{
// Setup
var mocks = new MockRepository();
var assessmentSection = mocks.Stub();
mocks.ReplayAll();
// Call
TestDelegate call = () =>
ExportableHeightStructuresFailureMechanismFactory.CreateExportableFailureMechanism(null,
assessmentSection);
// Assert
var exception = Assert.Throws(call);
Assert.AreEqual("failureMechanism", exception.ParamName);
mocks.VerifyAll();
}
[Test]
public void CreateExportableFailureMechanism_AssessmentSectionNull_ThrowsArgumentNullException()
{
// Call
TestDelegate call = () =>
ExportableHeightStructuresFailureMechanismFactory.CreateExportableFailureMechanism(new HeightStructuresFailureMechanism(),
null);
// Assert
var exception = Assert.Throws(call);
Assert.AreEqual("assessmentSection", exception.ParamName);
}
[Test]
public void CreateExportableFailureMechanism_WithFailureMechanismNotRelevant_ReturnsDefaultExportableFailureMechanism()
{
// Setup
var random = new Random(21);
var failureMechanism = new HeightStructuresFailureMechanism
{
IsRelevant = false
};
FailureMechanismTestHelper.AddSections(failureMechanism, random.Next(2, 10));
var assessmentSection = new AssessmentSectionStub();
// Call
ExportableFailureMechanism exportableFailureMechanism =
ExportableHeightStructuresFailureMechanismFactory.CreateExportableFailureMechanism(failureMechanism, assessmentSection);
// Assert
Assert.AreEqual(ExportableFailureMechanismType.HTKW, exportableFailureMechanism.Code);
Assert.AreEqual(ExportableFailureMechanismGroup.Group1, exportableFailureMechanism.Group);
ExportableFailureMechanismAssemblyResultWithProbability failureMechanismAssemblyResult = exportableFailureMechanism.FailureMechanismAssembly;
Assert.AreEqual(ExportableAssemblyMethod.WBI1B1, failureMechanismAssemblyResult.AssemblyMethod);
Assert.AreEqual(FailureMechanismAssemblyCategoryGroup.NotApplicable, failureMechanismAssemblyResult.AssemblyCategory);
Assert.AreEqual(0, failureMechanismAssemblyResult.Probability);
CollectionAssert.IsEmpty(exportableFailureMechanism.Sections);
CollectionAssert.IsEmpty(exportableFailureMechanism.SectionAssemblyResults);
}
[Test]
public void CreateExportableFailureMechanism_WithFailureMechanismRelevant_ReturnsExportableFailureMechanism()
{
// Setup
var random = new Random(21);
var failureMechanism = new HeightStructuresFailureMechanism();
FailureMechanismTestHelper.AddSections(failureMechanism, random.Next(2, 10));
var assessmentSection = new AssessmentSectionStub();
using (new AssemblyToolCalculatorFactoryConfig())
{
var calculatorFactory = (TestAssemblyToolCalculatorFactory) AssemblyToolCalculatorFactory.Instance;
FailureMechanismAssemblyCalculatorStub failureMechanismAssemblyCalculator = calculatorFactory.LastCreatedFailureMechanismAssemblyCalculator;
FailureMechanismSectionAssemblyCalculatorStub failureMechanismSectionAssemblyCalculator = calculatorFactory.LastCreatedFailureMechanismSectionAssemblyCalculator;
// Call
ExportableFailureMechanism exportableFailureMechanism =
ExportableHeightStructuresFailureMechanismFactory.CreateExportableFailureMechanism(failureMechanism, assessmentSection);
// Assert
Assert.AreEqual(ExportableFailureMechanismType.HTKW, exportableFailureMechanism.Code);
Assert.AreEqual(ExportableFailureMechanismGroup.Group1, exportableFailureMechanism.Group);
FailureMechanismAssembly calculatorOutput = failureMechanismAssemblyCalculator.FailureMechanismAssemblyOutput;
ExportableFailureMechanismAssemblyResultWithProbability exportableFailureMechanismAssembly = exportableFailureMechanism.FailureMechanismAssembly;
Assert.AreEqual(calculatorOutput.Group, exportableFailureMechanismAssembly.AssemblyCategory);
Assert.AreEqual(calculatorOutput.Probability, exportableFailureMechanismAssembly.Probability);
Assert.AreEqual(ExportableAssemblyMethod.WBI1B1, exportableFailureMechanismAssembly.AssemblyMethod);
ExportableFailureMechanismSectionTestHelper.AssertExportableFailureMechanismSections(failureMechanism.Sections, exportableFailureMechanism.Sections);
AssertExportableFailureMechanismSectionResults(failureMechanismSectionAssemblyCalculator.SimpleAssessmentAssemblyOutput,
failureMechanismSectionAssemblyCalculator.DetailedAssessmentAssemblyOutput,
failureMechanismSectionAssemblyCalculator.TailorMadeAssessmentAssemblyOutput,
failureMechanismSectionAssemblyCalculator.CombinedAssemblyOutput,
exportableFailureMechanism.Sections,
exportableFailureMechanism.SectionAssemblyResults.Cast());
}
}
private static void AssertExportableFailureMechanismSectionResults(FailureMechanismSectionAssembly expectedSimpleAssembly,
FailureMechanismSectionAssembly expectedDetailedAssembly,
FailureMechanismSectionAssembly expectedTailorMadeAssembly,
FailureMechanismSectionAssembly expectedCombinedAssembly,
IEnumerable sections,
IEnumerable results)
{
int expectedNrOfResults = sections.Count();
Assert.AreEqual(expectedNrOfResults, results.Count());
for (var i = 0; i < expectedNrOfResults; i++)
{
ExportableFailureMechanismSection section = sections.ElementAt(i);
ExportableAggregatedFailureMechanismSectionAssemblyResultWithProbability result = results.ElementAt(i);
AssertExportableFailureMechanismSectionResult(expectedSimpleAssembly,
expectedDetailedAssembly,
expectedTailorMadeAssembly,
expectedCombinedAssembly,
section,
result);
}
}
private static void AssertExportableFailureMechanismSectionResult(FailureMechanismSectionAssembly expectedSimpleAssembly,
FailureMechanismSectionAssembly expectedDetailedAssembly,
FailureMechanismSectionAssembly expectedTailorMadeAssembly,
FailureMechanismSectionAssembly expectedCombinedAssembly,
ExportableFailureMechanismSection expectedSection,
ExportableAggregatedFailureMechanismSectionAssemblyResultWithProbability actualResult)
{
Assert.AreSame(expectedSection, actualResult.FailureMechanismSection);
ExportableSectionAssemblyResultTestHelper.AssertExportableSectionAssemblyResult(expectedSimpleAssembly,
ExportableAssemblyMethod.WBI0E1,
actualResult.SimpleAssembly);
ExportableSectionAssemblyResultTestHelper.AssertExportableSectionAssemblyResult(expectedDetailedAssembly,
ExportableAssemblyMethod.WBI0G3,
actualResult.DetailedAssembly);
ExportableSectionAssemblyResultTestHelper.AssertExportableSectionAssemblyResult(expectedTailorMadeAssembly,
ExportableAssemblyMethod.WBI0T3,
actualResult.TailorMadeAssembly);
ExportableSectionAssemblyResultTestHelper.AssertExportableSectionAssemblyResult(expectedCombinedAssembly,
ExportableAssemblyMethod.WBI0A1,
actualResult.CombinedAssembly);
}
}
}