Index: Ringtoets/DuneErosion/src/Ringtoets.DuneErosion.Forms/GuiServices/DuneLocationCalculationGuiService.cs
===================================================================
diff -u -rf0d6c65c6d7251bdc0c2cde6128d5777cff9ed49 -rf0a2ec89952a42ebdedbea6efac5fe7196f3b46a
--- Ringtoets/DuneErosion/src/Ringtoets.DuneErosion.Forms/GuiServices/DuneLocationCalculationGuiService.cs (.../DuneLocationCalculationGuiService.cs) (revision f0d6c65c6d7251bdc0c2cde6128d5777cff9ed49)
+++ Ringtoets/DuneErosion/src/Ringtoets.DuneErosion.Forms/GuiServices/DuneLocationCalculationGuiService.cs (.../DuneLocationCalculationGuiService.cs) (revision f0a2ec89952a42ebdedbea6efac5fe7196f3b46a)
@@ -88,10 +88,10 @@
ActivityProgressDialogRunner.Run(
viewParent,
- calculations.Select(calculation => new DuneErosionBoundaryCalculationActivity(calculation,
- hydraulicBoundaryDatabaseFilePath,
- preprocessorDirectory,
- norm)).ToArray());
+ calculations.Select(calculation => new DuneLocationCalculationActivity(calculation,
+ hydraulicBoundaryDatabaseFilePath,
+ preprocessorDirectory,
+ norm)).ToArray());
}
}
}
\ No newline at end of file
Fisheye: Tag f0a2ec89952a42ebdedbea6efac5fe7196f3b46a refers to a dead (removed) revision in file `Ringtoets/DuneErosion/src/Ringtoets.DuneErosion.Service/DuneErosionBoundaryCalculationActivity.cs'.
Fisheye: No comparison available. Pass `N' to diff?
Index: Ringtoets/DuneErosion/src/Ringtoets.DuneErosion.Service/DuneLocationCalculationActivity.cs
===================================================================
diff -u
--- Ringtoets/DuneErosion/src/Ringtoets.DuneErosion.Service/DuneLocationCalculationActivity.cs (revision 0)
+++ Ringtoets/DuneErosion/src/Ringtoets.DuneErosion.Service/DuneLocationCalculationActivity.cs (revision f0a2ec89952a42ebdedbea6efac5fe7196f3b46a)
@@ -0,0 +1,116 @@
+// 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 Core.Common.Base.Service;
+using Ringtoets.DuneErosion.Data;
+using Ringtoets.DuneErosion.Service.Properties;
+using Ringtoets.HydraRing.Calculation.Activities;
+
+namespace Ringtoets.DuneErosion.Service
+{
+ ///
+ /// for running a dune location calculation.
+ ///
+ public class DuneLocationCalculationActivity : HydraRingActivityBase
+ {
+ private readonly DuneLocation duneLocation;
+ private readonly DuneLocationCalculation duneLocationCalculation;
+ private readonly string hydraulicBoundaryDatabaseFilePath;
+ private readonly string preprocessorDirectory;
+ private readonly double norm;
+ private readonly DuneErosionBoundaryCalculationService calculationService;
+
+ ///
+ /// Creates a new instance of .
+ ///
+ /// The to perform.
+ /// The hydraulic boundary database file that
+ /// should be used for performing the calculation.
+ /// The preprocessor directory.
+ /// The norm to use during the calculation.
+ /// Preprocessing is disabled when
+ /// equals .
+ /// Thrown when is null.
+ public DuneLocationCalculationActivity(DuneLocationCalculation duneLocationCalculation,
+ string hydraulicBoundaryDatabaseFilePath,
+ string preprocessorDirectory,
+ double norm)
+ {
+ if (duneLocationCalculation == null)
+ {
+ throw new ArgumentNullException(nameof(duneLocationCalculation));
+ }
+
+ this.duneLocationCalculation = duneLocationCalculation;
+ this.hydraulicBoundaryDatabaseFilePath = hydraulicBoundaryDatabaseFilePath;
+ this.preprocessorDirectory = preprocessorDirectory;
+ this.norm = norm;
+
+ duneLocation = duneLocationCalculation.DuneLocation;
+ Description = string.Format(Resources.DuneErosionBoundaryCalculationActivity_Calculate_hydraulic_boundary_conditions_for_DuneLocation_with_name_0_,
+ duneLocation.Name);
+
+ calculationService = new DuneErosionBoundaryCalculationService();
+ }
+
+ protected override bool Validate()
+ {
+ if (AlreadyCalculated)
+ {
+ State = ActivityState.Skipped;
+ return true;
+ }
+
+ return DuneErosionBoundaryCalculationService.Validate(hydraulicBoundaryDatabaseFilePath, preprocessorDirectory);
+ }
+
+ protected override void PerformCalculation()
+ {
+ if (State != ActivityState.Skipped)
+ {
+ calculationService.Calculate(duneLocationCalculation,
+ norm,
+ hydraulicBoundaryDatabaseFilePath,
+ preprocessorDirectory);
+ }
+ }
+
+ protected override void OnCancel()
+ {
+ calculationService.Cancel();
+ }
+
+ protected override void OnFinish()
+ {
+ duneLocation.NotifyObservers();
+ duneLocationCalculation.NotifyObservers();
+ }
+
+ private bool AlreadyCalculated
+ {
+ get
+ {
+ return duneLocationCalculation.Output != null;
+ }
+ }
+ }
+}
\ No newline at end of file
Index: Ringtoets/DuneErosion/src/Ringtoets.DuneErosion.Service/Ringtoets.DuneErosion.Service.csproj
===================================================================
diff -u -r9525ca631e5cbc007207e42704ea705812d78456 -rf0a2ec89952a42ebdedbea6efac5fe7196f3b46a
--- Ringtoets/DuneErosion/src/Ringtoets.DuneErosion.Service/Ringtoets.DuneErosion.Service.csproj (.../Ringtoets.DuneErosion.Service.csproj) (revision 9525ca631e5cbc007207e42704ea705812d78456)
+++ Ringtoets/DuneErosion/src/Ringtoets.DuneErosion.Service/Ringtoets.DuneErosion.Service.csproj (.../Ringtoets.DuneErosion.Service.csproj) (revision f0a2ec89952a42ebdedbea6efac5fe7196f3b46a)
@@ -15,7 +15,7 @@
-
+
Index: Ringtoets/DuneErosion/test/Ringtoets.DuneErosion.Integration.Test/DuneErosionBoundaryCalculationActivityIntegrationTest.cs
===================================================================
diff -u -r649b0974fb71df7368d19682bc255618f44d49c1 -rf0a2ec89952a42ebdedbea6efac5fe7196f3b46a
--- Ringtoets/DuneErosion/test/Ringtoets.DuneErosion.Integration.Test/DuneErosionBoundaryCalculationActivityIntegrationTest.cs (.../DuneErosionBoundaryCalculationActivityIntegrationTest.cs) (revision 649b0974fb71df7368d19682bc255618f44d49c1)
+++ Ringtoets/DuneErosion/test/Ringtoets.DuneErosion.Integration.Test/DuneErosionBoundaryCalculationActivityIntegrationTest.cs (.../DuneErosionBoundaryCalculationActivityIntegrationTest.cs) (revision f0a2ec89952a42ebdedbea6efac5fe7196f3b46a)
@@ -54,10 +54,10 @@
var duneLocation = new TestDuneLocation("A dune location name");
var duneLocationCalculation = new DuneLocationCalculation(duneLocation);
- var activity = new DuneErosionBoundaryCalculationActivity(duneLocationCalculation,
- validFilePath,
- validPreprocessorDirectory,
- 1.0 / 30000);
+ var activity = new DuneLocationCalculationActivity(duneLocationCalculation,
+ validFilePath,
+ validPreprocessorDirectory,
+ 1.0 / 30000);
using (new HydraRingCalculatorFactoryConfig(calculatorFactory))
{
@@ -107,10 +107,10 @@
mockRepository.ReplayAll();
var duneLocationCalculation = new DuneLocationCalculation(new TestDuneLocation());
- var activity = new DuneErosionBoundaryCalculationActivity(duneLocationCalculation,
- validFilePath,
- validPreprocessorDirectory,
- 1.0 / 30000);
+ var activity = new DuneLocationCalculationActivity(duneLocationCalculation,
+ validFilePath,
+ validPreprocessorDirectory,
+ 1.0 / 30000);
using (new HydraRingCalculatorFactoryConfig(calculatorFactory))
{
@@ -137,10 +137,10 @@
{
Output = initialOutput
};
- var activity = new DuneErosionBoundaryCalculationActivity(duneLocationCalculation,
- validFilePath,
- validPreprocessorDirectory,
- 1.0 / 30000);
+ var activity = new DuneLocationCalculationActivity(duneLocationCalculation,
+ validFilePath,
+ validPreprocessorDirectory,
+ 1.0 / 30000);
using (new HydraRingCalculatorFactoryConfig(calculatorFactory))
{
Fisheye: Tag f0a2ec89952a42ebdedbea6efac5fe7196f3b46a refers to a dead (removed) revision in file `Ringtoets/DuneErosion/test/Ringtoets.DuneErosion.Service.Test/DuneErosionBoundaryCalculationActivityTest.cs'.
Fisheye: No comparison available. Pass `N' to diff?
Index: Ringtoets/DuneErosion/test/Ringtoets.DuneErosion.Service.Test/DuneLocationCalculationActivityTest.cs
===================================================================
diff -u
--- Ringtoets/DuneErosion/test/Ringtoets.DuneErosion.Service.Test/DuneLocationCalculationActivityTest.cs (revision 0)
+++ Ringtoets/DuneErosion/test/Ringtoets.DuneErosion.Service.Test/DuneLocationCalculationActivityTest.cs (revision f0a2ec89952a42ebdedbea6efac5fe7196f3b46a)
@@ -0,0 +1,441 @@
+// 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.IO;
+using System.Linq;
+using Core.Common.Base;
+using Core.Common.Base.Service;
+using Core.Common.TestUtil;
+using Core.Common.Util;
+using NUnit.Framework;
+using Rhino.Mocks;
+using Ringtoets.Common.Data.Hydraulics;
+using Ringtoets.Common.Data.TestUtil;
+using Ringtoets.Common.Service.TestUtil;
+using Ringtoets.DuneErosion.Data;
+using Ringtoets.DuneErosion.Data.TestUtil;
+using Ringtoets.HydraRing.Calculation.Activities;
+using Ringtoets.HydraRing.Calculation.Calculator.Factory;
+using Ringtoets.HydraRing.Calculation.Data.Input.Hydraulics;
+using Ringtoets.HydraRing.Calculation.TestUtil.Calculator;
+
+namespace Ringtoets.DuneErosion.Service.Test
+{
+ [TestFixture]
+ public class DuneLocationCalculationActivityTest
+ {
+ private MockRepository mockRepository;
+ private static readonly string testDataPath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Integration.Service, "HydraRingCalculation");
+ private static readonly string validFilePath = Path.Combine(testDataPath, "HRD dutch coast south.sqlite");
+ private static readonly string validPreprocessorDirectory = TestHelper.GetScratchPadPath();
+
+ [SetUp]
+ public void SetUp()
+ {
+ mockRepository = new MockRepository();
+ }
+
+ [Test]
+ public void Constructor_ExpectedValues()
+ {
+ // Setup
+ var duneLocation = new TestDuneLocation();
+ var duneLocationCalculation = new DuneLocationCalculation(duneLocation);
+
+ // Call
+ var activity = new DuneLocationCalculationActivity(duneLocationCalculation,
+ validFilePath,
+ validPreprocessorDirectory,
+ 1.0 / 30000);
+
+ // Assert
+ Assert.IsInstanceOf(activity);
+ Assert.AreEqual($"Hydraulische randvoorwaarden berekenen voor locatie '{duneLocation.Name}'", activity.Description);
+ Assert.IsNull(activity.ProgressText);
+ Assert.AreEqual(ActivityState.None, activity.State);
+ }
+
+ [Test]
+ public void Constructor_DuneLocationCalculationNull_ThrowArgumentNullException()
+ {
+ // Call
+ TestDelegate test = () => new DuneLocationCalculationActivity(null,
+ validFilePath,
+ validPreprocessorDirectory,
+ 1.0 / 30000);
+
+ // Assert
+ var exception = Assert.Throws(test);
+ Assert.AreEqual("duneLocationCalculation", exception.ParamName);
+ }
+
+ [Test]
+ public void Run_InvalidHydraulicBoundaryDatabase_PerformValidationAndLogStartAndEndAndError()
+ {
+ // Setup
+ string invalidFilePath = Path.Combine(testDataPath, "notexisting.sqlite");
+
+ var duneLocation = new TestDuneLocation("testLocation");
+ var duneLocationCalculation = new DuneLocationCalculation(duneLocation);
+
+ var activity = new DuneLocationCalculationActivity(duneLocationCalculation,
+ invalidFilePath,
+ validPreprocessorDirectory,
+ 0.5);
+
+ // Call
+ Action call = () => activity.Run();
+
+ // Assert
+ TestHelper.AssertLogMessages(call, messages =>
+ {
+ string[] msgs = messages.ToArray();
+ Assert.AreEqual(4, msgs.Length);
+
+ Assert.AreEqual($"Hydraulische randvoorwaarden berekenen voor locatie '{duneLocation.Name}' is gestart.", msgs[0]);
+ CalculationServiceTestHelper.AssertValidationStartMessage(msgs[1]);
+ StringAssert.StartsWith("Herstellen van de verbinding met de hydraulische randvoorwaardendatabase is mislukt. Fout bij het lezen van bestand", msgs[2]);
+ CalculationServiceTestHelper.AssertValidationEndMessage(msgs[3]);
+ });
+ Assert.AreEqual(ActivityState.Failed, activity.State);
+ }
+
+ [Test]
+ public void Run_InvalidPreprocessorDirectory_PerformValidationAndLogStartAndEndAndError()
+ {
+ // Setup
+ const string invalidPreprocessorDirectory = "NonExistingPreprocessorDirectory";
+ var duneLocation = new TestDuneLocation("testLocation");
+ var duneLocationCalculation = new DuneLocationCalculation(duneLocation);
+
+ var activity = new DuneLocationCalculationActivity(duneLocationCalculation,
+ validFilePath,
+ invalidPreprocessorDirectory,
+ 0.5);
+
+ // Call
+ Action call = () => activity.Run();
+
+ // Assert
+ TestHelper.AssertLogMessages(call, messages =>
+ {
+ string[] msgs = messages.ToArray();
+ Assert.AreEqual(4, msgs.Length);
+
+ Assert.AreEqual($"Hydraulische randvoorwaarden berekenen voor locatie '{duneLocation.Name}' is gestart.", msgs[0]);
+ CalculationServiceTestHelper.AssertValidationStartMessage(msgs[1]);
+ Assert.AreEqual("De bestandsmap waar de preprocessor bestanden opslaat is ongeldig. De bestandsmap bestaat niet.", msgs[2]);
+ CalculationServiceTestHelper.AssertValidationEndMessage(msgs[3]);
+ });
+ Assert.AreEqual(ActivityState.Failed, activity.State);
+ }
+
+ [Test]
+ public void Run_ValidHydraulicBoundaryDatabaseAndDuneLocation_PerformValidationValidParameters()
+ {
+ // Setup
+ const double norm = 1.0 / 30;
+
+ var duneLocation = new TestDuneLocation("some name");
+ var duneLocationCalculation = new DuneLocationCalculation(duneLocation);
+ var calculator = new TestDunesBoundaryConditionsCalculator
+ {
+ Converged = true
+ };
+
+ var calculatorFactory = mockRepository.StrictMock();
+ calculatorFactory.Expect(cf => cf.CreateDunesBoundaryConditionsCalculator(testDataPath, validPreprocessorDirectory)).Return(calculator);
+ mockRepository.ReplayAll();
+
+ var activity = new DuneLocationCalculationActivity(duneLocationCalculation,
+ validFilePath,
+ validPreprocessorDirectory,
+ norm);
+
+ using (new HydraRingCalculatorFactoryConfig(calculatorFactory))
+ {
+ // Call
+ Action call = () => activity.Run();
+
+ // Assert
+ TestHelper.AssertLogMessages(call, m =>
+ {
+ string[] messages = m.ToArray();
+ Assert.AreEqual(6, messages.Length);
+ Assert.AreEqual($"Hydraulische randvoorwaarden berekenen voor locatie '{duneLocation.Name}' is gestart.", messages[0]);
+ CalculationServiceTestHelper.AssertValidationStartMessage(messages[1]);
+ CalculationServiceTestHelper.AssertValidationEndMessage(messages[2]);
+ CalculationServiceTestHelper.AssertCalculationStartMessage(messages[3]);
+ StringAssert.StartsWith("Hydraulische randvoorwaarden berekening is uitgevoerd op de tijdelijke locatie", messages[4]);
+ CalculationServiceTestHelper.AssertCalculationEndMessage(messages[5]);
+ });
+
+ DunesBoundaryConditionsCalculationInput calculationInput = calculator.ReceivedInputs.Single();
+
+ Assert.AreEqual(duneLocation.Id, calculationInput.HydraulicBoundaryLocationId);
+ Assert.AreEqual(StatisticsConverter.ProbabilityToReliability(norm), calculationInput.Beta);
+ }
+
+ Assert.AreEqual(ActivityState.Executed, activity.State);
+ mockRepository.VerifyAll();
+ }
+
+ [Test]
+ public void Run_DuneLocationCalculationOutputSet_ValidationAndCalculationNotPerformedAndStateSkipped()
+ {
+ // Setup
+ var duneLocationCalculation = new DuneLocationCalculation(new TestDuneLocation())
+ {
+ Output = new TestDuneLocationCalculationOutput()
+ };
+
+ var activity = new DuneLocationCalculationActivity(duneLocationCalculation,
+ validFilePath,
+ validPreprocessorDirectory,
+ 0.5);
+
+ // Call
+ activity.Run();
+
+ // Assert
+ Assert.AreEqual(ActivityState.Skipped, activity.State);
+ }
+
+ [Test]
+ public void Run_ValidCalculationAndRun_SetsOutput()
+ {
+ // Setup
+ var random = new Random(123);
+ double norm = random.NextDouble();
+ double expectedWaterLevel = random.NextDouble();
+ double expectedWaveHeight = random.NextDouble();
+ double expectedWavePeriod = random.NextDouble();
+ double expectedReliabilityIndex = random.NextDouble();
+
+ var duneLocationCalculation = new DuneLocationCalculation(new TestDuneLocation());
+ var calculator = new TestDunesBoundaryConditionsCalculator
+ {
+ WaterLevel = expectedWaterLevel,
+ WaveHeight = expectedWaveHeight,
+ WavePeriod = expectedWavePeriod,
+ ReliabilityIndex = expectedReliabilityIndex,
+ Converged = true
+ };
+
+ var calculatorFactory = mockRepository.StrictMock();
+ calculatorFactory.Expect(cf => cf.CreateDunesBoundaryConditionsCalculator(testDataPath, validPreprocessorDirectory)).Return(calculator);
+ mockRepository.ReplayAll();
+
+ var activity = new DuneLocationCalculationActivity(duneLocationCalculation,
+ validFilePath,
+ validPreprocessorDirectory,
+ norm);
+
+ using (new HydraRingCalculatorFactoryConfig(calculatorFactory))
+ {
+ // Call
+ activity.Run();
+ }
+
+ // Assert
+ DuneLocationCalculationOutput actualCalculationOutput = duneLocationCalculation.Output;
+ Assert.IsNotNull(actualCalculationOutput);
+ Assert.AreEqual(expectedWaterLevel, actualCalculationOutput.WaterLevel, actualCalculationOutput.WaterLevel.GetAccuracy());
+ Assert.AreEqual(expectedWaveHeight, actualCalculationOutput.WaveHeight, actualCalculationOutput.WaveHeight.GetAccuracy());
+ Assert.AreEqual(expectedWavePeriod, actualCalculationOutput.WavePeriod, actualCalculationOutput.WavePeriod.GetAccuracy());
+ Assert.AreEqual(expectedReliabilityIndex, actualCalculationOutput.CalculatedReliability, actualCalculationOutput.CalculatedReliability.GetAccuracy());
+ Assert.AreEqual(CalculationConvergence.CalculatedConverged, actualCalculationOutput.CalculationConvergence);
+ mockRepository.VerifyAll();
+ }
+
+ [Test]
+ [TestCaseSource(typeof(HydraRingCalculatorTestCaseProvider), nameof(HydraRingCalculatorTestCaseProvider.GetCalculatorFailingConditionsWithReportDetails), new object[]
+ {
+ nameof(Run_InvalidCalculation_LogsError)
+ })]
+ public void Run_InvalidCalculation_LogsError(bool endInFailure, string lastErrorFileContent, string detailedReport)
+ {
+ // Setup
+ var calculator = new TestDunesBoundaryConditionsCalculator
+ {
+ EndInFailure = endInFailure,
+ LastErrorFileContent = lastErrorFileContent
+ };
+
+ var calculatorFactory = mockRepository.StrictMock();
+ calculatorFactory.Expect(cf => cf.CreateDunesBoundaryConditionsCalculator(testDataPath, validPreprocessorDirectory)).Return(calculator);
+ mockRepository.ReplayAll();
+
+ var duneLocation = new TestDuneLocation("dune location");
+ var duneLocationCalculation = new DuneLocationCalculation(duneLocation);
+
+ var activity = new DuneLocationCalculationActivity(duneLocationCalculation,
+ validFilePath,
+ validPreprocessorDirectory,
+ 0.5);
+
+ using (new HydraRingCalculatorFactoryConfig(calculatorFactory))
+ {
+ // Call
+ Action call = () => activity.Run();
+
+ // Assert
+ string calculationfailedMessage = $"Hydraulische randvoorwaarden berekening voor locatie '{duneLocation.Name}' is mislukt. {detailedReport}";
+ TestHelper.AssertLogMessageIsGenerated(call, calculationfailedMessage, 7);
+ }
+
+ mockRepository.VerifyAll();
+ }
+
+ [Test]
+ public void Run_CalculationResultingInNoConvergence_LogWarningNoConvergence()
+ {
+ // Setup
+ var calculator = new TestDunesBoundaryConditionsCalculator
+ {
+ Converged = false
+ };
+
+ var calculatorFactory = mockRepository.StrictMock();
+ calculatorFactory.Expect(cf => cf.CreateDunesBoundaryConditionsCalculator(testDataPath, validPreprocessorDirectory)).Return(calculator);
+ mockRepository.ReplayAll();
+
+ var duneLocation = new TestDuneLocation("some name");
+ var duneLocationCalculation = new DuneLocationCalculation(duneLocation);
+
+ var activity = new DuneLocationCalculationActivity(duneLocationCalculation,
+ validFilePath,
+ validPreprocessorDirectory,
+ 0.5);
+
+ using (new HydraRingCalculatorFactoryConfig(calculatorFactory))
+ {
+ Action call = () => activity.Run();
+
+ // Assert
+ TestHelper.AssertLogMessages(call, messages =>
+ {
+ string[] msgs = messages.ToArray();
+ Assert.AreEqual(7, msgs.Length);
+
+ Assert.AreEqual($"Hydraulische randvoorwaarden berekenen voor locatie '{duneLocation.Name}' is gestart.", msgs[0]);
+ CalculationServiceTestHelper.AssertValidationStartMessage(msgs[1]);
+ CalculationServiceTestHelper.AssertValidationEndMessage(msgs[2]);
+ CalculationServiceTestHelper.AssertCalculationStartMessage(msgs[3]);
+ Assert.AreEqual($"Hydraulische randvoorwaarden berekening voor locatie '{duneLocation.Name}' is niet geconvergeerd.", msgs[4]);
+ StringAssert.StartsWith("Hydraulische randvoorwaarden berekening is uitgevoerd op de tijdelijke locatie", msgs[5]);
+ CalculationServiceTestHelper.AssertCalculationEndMessage(msgs[6]);
+ });
+
+ Assert.AreEqual(CalculationConvergence.CalculatedNotConverged, duneLocationCalculation.Output.CalculationConvergence);
+ }
+
+ mockRepository.VerifyAll();
+ }
+
+ [Test]
+ [TestCaseSource(typeof(HydraRingCalculatorTestCaseProvider), nameof(HydraRingCalculatorTestCaseProvider.GetCalculatorFailingConditions), new object[]
+ {
+ nameof(Run_ErrorInCalculation_PerformValidationAndCalculationAndError)
+ })]
+ public void Run_ErrorInCalculation_PerformValidationAndCalculationAndError(bool endInFailure, string lastErrorFileContent)
+ {
+ // Setup
+ var duneLocationCalculation = new DuneLocationCalculation(new TestDuneLocation());
+
+ var calculator = new TestDunesBoundaryConditionsCalculator
+ {
+ EndInFailure = endInFailure,
+ LastErrorFileContent = lastErrorFileContent
+ };
+
+ var calculatorFactory = mockRepository.StrictMock();
+ calculatorFactory.Expect(cf => cf.CreateDunesBoundaryConditionsCalculator(testDataPath, validPreprocessorDirectory)).Return(calculator);
+ mockRepository.ReplayAll();
+
+ var activity = new DuneLocationCalculationActivity(duneLocationCalculation,
+ validFilePath,
+ validPreprocessorDirectory,
+ 0.5);
+
+ using (new HydraRingCalculatorFactoryConfig(calculatorFactory))
+ {
+ // Call
+ activity.Run();
+
+ // Assert
+ Assert.AreEqual(ActivityState.Failed, activity.State);
+ }
+
+ mockRepository.VerifyAll();
+ }
+
+ [Test]
+ [TestCase(ActivityState.Executed)]
+ [TestCase(ActivityState.Failed)]
+ [TestCase(ActivityState.Canceled)]
+ [TestCase(ActivityState.Skipped)]
+ public void Finish_ActivityWithSpecificState_NotifyDuneLocationCalculation(ActivityState state)
+ {
+ // Setup
+ var duneLocation = new TestDuneLocation();
+ var duneLocationCalculation = new DuneLocationCalculation(duneLocation);
+
+ var locationObserver = mockRepository.StrictMock();
+ locationObserver.Expect(o => o.UpdateObserver());
+ duneLocation.Attach(locationObserver);
+
+ var calculationObserver = mockRepository.StrictMock();
+ calculationObserver.Expect(o => o.UpdateObserver());
+ duneLocationCalculation.Attach(calculationObserver);
+ mockRepository.ReplayAll();
+
+ var activity = new DuneLocationCalculationActivityWithState(duneLocationCalculation,
+ validFilePath,
+ validPreprocessorDirectory,
+ 1.0,
+ state);
+
+ // Call
+ activity.Finish();
+
+ // Assert
+ mockRepository.VerifyAll();
+ }
+
+ private class DuneLocationCalculationActivityWithState : DuneLocationCalculationActivity
+ {
+ public DuneLocationCalculationActivityWithState(DuneLocationCalculation duneLocationCalculation,
+ string hydraulicBoundaryDatabaseFilePath,
+ string preprocessorDirectory,
+ double norm,
+ ActivityState state)
+ : base(duneLocationCalculation,
+ hydraulicBoundaryDatabaseFilePath,
+ preprocessorDirectory,
+ norm)
+ {
+ State = state;
+ }
+ }
+ }
+}
\ No newline at end of file
Index: Ringtoets/DuneErosion/test/Ringtoets.DuneErosion.Service.Test/Ringtoets.DuneErosion.Service.Test.csproj
===================================================================
diff -u -r8b8e62bfddfca997d2ed5df4a0c9c72648f1b5b4 -rf0a2ec89952a42ebdedbea6efac5fe7196f3b46a
--- Ringtoets/DuneErosion/test/Ringtoets.DuneErosion.Service.Test/Ringtoets.DuneErosion.Service.Test.csproj (.../Ringtoets.DuneErosion.Service.Test.csproj) (revision 8b8e62bfddfca997d2ed5df4a0c9c72648f1b5b4)
+++ Ringtoets/DuneErosion/test/Ringtoets.DuneErosion.Service.Test/Ringtoets.DuneErosion.Service.Test.csproj (.../Ringtoets.DuneErosion.Service.Test.csproj) (revision f0a2ec89952a42ebdedbea6efac5fe7196f3b46a)
@@ -19,7 +19,7 @@
-
+