// 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.Linq; using NUnit.Framework; using Ringtoets.AssemblyTool.Data; using Ringtoets.AssemblyTool.KernelWrapper.Calculators; using Ringtoets.AssemblyTool.KernelWrapper.Calculators.Categories; using Ringtoets.AssemblyTool.KernelWrapper.TestUtil.Calculators; using Ringtoets.AssemblyTool.KernelWrapper.TestUtil.Calculators.Categories; using Ringtoets.Common.Data.AssemblyTool; using Ringtoets.Common.Data.Exceptions; namespace Ringtoets.Common.Data.Test.AssemblyTool { [TestFixture] public class AssemblyToolCategoriesFactoryTest { [Test] public void CreateAssessmentSectionAssemblyCategories_WithInput_SetsInputOnCalculator() { // Setup var random = new Random(11); double signalingNorm = random.NextDouble(); double lowerLimitNorm = random.NextDouble(); using (new AssemblyToolCalculatorFactoryConfig()) { var calculatorFactory = (TestAssemblyToolCalculatorFactory) AssemblyToolCalculatorFactory.Instance; AssemblyCategoriesCalculatorStub calculator = calculatorFactory.LastCreatedAssemblyCategoriesCalculator; // Call AssemblyToolCategoriesFactory.CreateAssessmentSectionAssemblyCategories(signalingNorm, lowerLimitNorm); // Assert Assert.AreEqual(signalingNorm, calculator.SignalingNorm); Assert.AreEqual(lowerLimitNorm, calculator.LowerLimitNorm); } } [Test] public void CreateAssessmentSectionAssemblyCategories_CalculatorRan_ReturnsOutput() { // Setup var random = new Random(11); double signalingNorm = random.NextDouble(); double lowerLimitNorm = random.NextDouble(); using (new AssemblyToolCalculatorFactoryConfig()) { var calculatorFactory = (TestAssemblyToolCalculatorFactory) AssemblyToolCalculatorFactory.Instance; AssemblyCategoriesCalculatorStub calculator = calculatorFactory.LastCreatedAssemblyCategoriesCalculator; // Call AssessmentSectionAssemblyCategory[] output = AssemblyToolCategoriesFactory.CreateAssessmentSectionAssemblyCategories(signalingNorm, lowerLimitNorm).ToArray(); // Assert AssessmentSectionAssemblyCategory[] calculatorOutput = calculator.AssessmentSectionCategoriesOutput.ToArray(); Assert.AreEqual(calculatorOutput.Length, output.Length); CollectionAssert.AreEqual(calculatorOutput.Select(co => co.LowerBoundary), output.Select(o => o.LowerBoundary)); CollectionAssert.AreEqual(calculatorOutput.Select(co => co.UpperBoundary), output.Select(o => o.UpperBoundary)); CollectionAssert.AreEqual(calculatorOutput.Select(co => co.Group), output.Select(o => o.Group)); } } [Test] public void CreateAssessmentSectionAssemblyCategories_CalculatorThrowsException_ThrowsAssemblyException() { // Setup using (new AssemblyToolCalculatorFactoryConfig()) { var calculatorFactory = (TestAssemblyToolCalculatorFactory) AssemblyToolCalculatorFactory.Instance; AssemblyCategoriesCalculatorStub calculator = calculatorFactory.LastCreatedAssemblyCategoriesCalculator; calculator.ThrowExceptionOnCalculate = true; // Call TestDelegate test = () => AssemblyToolCategoriesFactory.CreateAssessmentSectionAssemblyCategories(0, 0); // Assert var exception = Assert.Throws(test); Assert.IsInstanceOf(exception.InnerException); Assert.AreEqual(exception.InnerException.Message, exception.Message); } } [Test] public void CreateFailureMechanismAssemblyCategories_WithInput_SetsInputOnCalculator() { // Setup var random = new Random(11); double signalingNorm = random.NextDouble(); double lowerLimitNorm = random.NextDouble(); double failureMechanismContribution = random.NextDouble(); double n = random.NextDouble(); using (new AssemblyToolCalculatorFactoryConfig()) { var calculatorFactory = (TestAssemblyToolCalculatorFactory) AssemblyToolCalculatorFactory.Instance; AssemblyCategoriesCalculatorStub calculator = calculatorFactory.LastCreatedAssemblyCategoriesCalculator; // Call AssemblyToolCategoriesFactory.CreateFailureMechanismAssemblyCategories(signalingNorm, lowerLimitNorm, failureMechanismContribution, n); // Assert AssemblyCategoriesInput assemblyCategoriesInput = calculator.AssemblyCategoriesInput; Assert.AreEqual(signalingNorm, assemblyCategoriesInput.SignalingNorm); Assert.AreEqual(lowerLimitNorm, assemblyCategoriesInput.LowerLimitNorm); Assert.AreEqual(failureMechanismContribution / 100, assemblyCategoriesInput.FailureMechanismContribution); Assert.AreEqual(n, assemblyCategoriesInput.N); } } [Test] public void CreateFailureMechanismAssemblyCategories_CalculatorRan_ReturnsOutput() { // Setup var random = new Random(11); double signalingNorm = random.NextDouble(); double lowerLimitNorm = random.NextDouble(); double failureMechanismContribution = random.NextDouble(); double n = random.NextDouble(); using (new AssemblyToolCalculatorFactoryConfig()) { var calculatorFactory = (TestAssemblyToolCalculatorFactory) AssemblyToolCalculatorFactory.Instance; AssemblyCategoriesCalculatorStub calculator = calculatorFactory.LastCreatedAssemblyCategoriesCalculator; // Call FailureMechanismAssemblyCategory[] output = AssemblyToolCategoriesFactory.CreateFailureMechanismAssemblyCategories( signalingNorm, lowerLimitNorm, failureMechanismContribution, n).ToArray(); // Assert FailureMechanismAssemblyCategory[] calculatorOutput = calculator.FailureMechanismCategoriesOutput.ToArray(); Assert.AreEqual(calculatorOutput.Length, output.Length); CollectionAssert.AreEqual(calculatorOutput.Select(co => co.LowerBoundary), output.Select(o => o.LowerBoundary)); CollectionAssert.AreEqual(calculatorOutput.Select(co => co.UpperBoundary), output.Select(o => o.UpperBoundary)); CollectionAssert.AreEqual(calculatorOutput.Select(co => co.Group), output.Select(o => o.Group)); } } [Test] public void CreateFailureMechanismAssemblyCategories_CalculatorThrowsException_ThrowsAssemblyException() { // Setup using (new AssemblyToolCalculatorFactoryConfig()) { var calculatorFactory = (TestAssemblyToolCalculatorFactory) AssemblyToolCalculatorFactory.Instance; AssemblyCategoriesCalculatorStub calculator = calculatorFactory.LastCreatedAssemblyCategoriesCalculator; calculator.ThrowExceptionOnCalculate = true; // Call TestDelegate test = () => AssemblyToolCategoriesFactory.CreateFailureMechanismAssemblyCategories(0, 0, 0, 0); // Assert var exception = Assert.Throws(test); Assert.IsInstanceOf(exception.InnerException); Assert.AreEqual(exception.InnerException.Message, exception.Message); } } [Test] public void CreateFailureMechanismSectionAssemblyCategories_WithInput_SetsInputOnCalculator() { // Setup var random = new Random(11); double signalingNorm = random.NextDouble(); double lowerLimitNorm = random.NextDouble(); double failureMechanismContribution = random.NextDouble(); double n = random.NextDouble(); using (new AssemblyToolCalculatorFactoryConfig()) { var calculatorFactory = (TestAssemblyToolCalculatorFactory) AssemblyToolCalculatorFactory.Instance; AssemblyCategoriesCalculatorStub calculator = calculatorFactory.LastCreatedAssemblyCategoriesCalculator; // Call AssemblyToolCategoriesFactory.CreateFailureMechanismSectionAssemblyCategories(signalingNorm, lowerLimitNorm, failureMechanismContribution, n); // Assert AssemblyCategoriesInput assemblyCategoriesInput = calculator.AssemblyCategoriesInput; Assert.AreEqual(signalingNorm, assemblyCategoriesInput.SignalingNorm); Assert.AreEqual(lowerLimitNorm, assemblyCategoriesInput.LowerLimitNorm); Assert.AreEqual(failureMechanismContribution / 100, assemblyCategoriesInput.FailureMechanismContribution); Assert.AreEqual(n, assemblyCategoriesInput.N); } } [Test] public void CreateFailureMechanismSectionAssemblyCategories_CalculatorRan_ReturnsOutput() { // Setup var random = new Random(11); double signalingNorm = random.NextDouble(); double lowerLimitNorm = random.NextDouble(); double failureMechanismContribution = random.NextDouble(); double n = random.NextDouble(); using (new AssemblyToolCalculatorFactoryConfig()) { var calculatorFactory = (TestAssemblyToolCalculatorFactory) AssemblyToolCalculatorFactory.Instance; AssemblyCategoriesCalculatorStub calculator = calculatorFactory.LastCreatedAssemblyCategoriesCalculator; // Call FailureMechanismSectionAssemblyCategory[] output = AssemblyToolCategoriesFactory.CreateFailureMechanismSectionAssemblyCategories( signalingNorm, lowerLimitNorm, failureMechanismContribution, n).ToArray(); // Assert FailureMechanismSectionAssemblyCategory[] calculatorOutput = calculator.FailureMechanismSectionCategoriesOutput.ToArray(); Assert.AreEqual(calculatorOutput.Length, output.Length); CollectionAssert.AreEqual(calculatorOutput.Select(co => co.LowerBoundary), output.Select(o => o.LowerBoundary)); CollectionAssert.AreEqual(calculatorOutput.Select(co => co.UpperBoundary), output.Select(o => o.UpperBoundary)); CollectionAssert.AreEqual(calculatorOutput.Select(co => co.Group), output.Select(o => o.Group)); } } [Test] public void CreateFailureMechanismSectionAssemblyCategories_CalculatorThrowsException_ThrowsAssemblyException() { // Setup using (new AssemblyToolCalculatorFactoryConfig()) { var calculatorFactory = (TestAssemblyToolCalculatorFactory) AssemblyToolCalculatorFactory.Instance; AssemblyCategoriesCalculatorStub calculator = calculatorFactory.LastCreatedAssemblyCategoriesCalculator; calculator.ThrowExceptionOnCalculate = true; // Call TestDelegate test = () => AssemblyToolCategoriesFactory.CreateFailureMechanismSectionAssemblyCategories(0, 0, 0, 0); // Assert var exception = Assert.Throws(test); Assert.IsInstanceOf(exception.InnerException); Assert.AreEqual(exception.InnerException.Message, exception.Message); } } [Test] public void CreateGeotechnicalFailureMechanismSectionAssemblyCategories_WithInput_SetsInputOnCalculator() { // Setup var random = new Random(11); double signalingNorm = random.NextDouble(); double lowerLimitNorm = random.NextDouble(); double failureMechanismContribution = random.NextDouble(); double n = random.NextDouble(); using (new AssemblyToolCalculatorFactoryConfig()) { var calculatorFactory = (TestAssemblyToolCalculatorFactory) AssemblyToolCalculatorFactory.Instance; AssemblyCategoriesCalculatorStub calculator = calculatorFactory.LastCreatedAssemblyCategoriesCalculator; // Call AssemblyToolCategoriesFactory.CreateGeotechnicalFailureMechanismSectionAssemblyCategories(signalingNorm, lowerLimitNorm, failureMechanismContribution, n); // Assert AssemblyCategoriesInput assemblyCategoriesInput = calculator.AssemblyCategoriesInput; Assert.AreEqual(signalingNorm, assemblyCategoriesInput.SignalingNorm); Assert.AreEqual(lowerLimitNorm, assemblyCategoriesInput.LowerLimitNorm); Assert.AreEqual(failureMechanismContribution / 100, assemblyCategoriesInput.FailureMechanismContribution); Assert.AreEqual(n, assemblyCategoriesInput.N); } } [Test] public void CreateGeotechnicalFailureMechanismSectionAssemblyCategories_CalculatorRan_ReturnsOutput() { // Setup var random = new Random(11); double signalingNorm = random.NextDouble(); double lowerLimitNorm = random.NextDouble(); double failureMechanismContribution = random.NextDouble(); double n = random.NextDouble(); using (new AssemblyToolCalculatorFactoryConfig()) { var calculatorFactory = (TestAssemblyToolCalculatorFactory) AssemblyToolCalculatorFactory.Instance; AssemblyCategoriesCalculatorStub calculator = calculatorFactory.LastCreatedAssemblyCategoriesCalculator; // Call FailureMechanismSectionAssemblyCategory[] output = AssemblyToolCategoriesFactory.CreateGeotechnicalFailureMechanismSectionAssemblyCategories( signalingNorm, lowerLimitNorm, failureMechanismContribution, n).ToArray(); // Assert FailureMechanismSectionAssemblyCategory[] calculatorOutput = calculator.GeoTechnicalFailureMechanismSectionCategoriesOutput.ToArray(); Assert.AreEqual(calculatorOutput.Length, output.Length); CollectionAssert.AreEqual(calculatorOutput.Select(co => co.LowerBoundary), output.Select(o => o.LowerBoundary)); CollectionAssert.AreEqual(calculatorOutput.Select(co => co.UpperBoundary), output.Select(o => o.UpperBoundary)); CollectionAssert.AreEqual(calculatorOutput.Select(co => co.Group), output.Select(o => o.Group)); } } [Test] public void CreateGeotechnicalFailureMechanismSectionAssemblyCategories_CalculatorThrowsException_ThrowsAssemblyException() { // Setup using (new AssemblyToolCalculatorFactoryConfig()) { var calculatorFactory = (TestAssemblyToolCalculatorFactory) AssemblyToolCalculatorFactory.Instance; AssemblyCategoriesCalculatorStub calculator = calculatorFactory.LastCreatedAssemblyCategoriesCalculator; calculator.ThrowExceptionOnCalculate = true; // Call TestDelegate test = () => AssemblyToolCategoriesFactory.CreateGeotechnicalFailureMechanismSectionAssemblyCategories(0, 0, 0, 0); // Assert var exception = Assert.Throws(test); Assert.IsInstanceOf(exception.InnerException); Assert.AreEqual(exception.InnerException.Message, exception.Message); } } } }