Index: Ringtoets/WaveImpactAsphaltCover/test/Ringtoets.WaveImpactAsphaltCover.Integration.Test/WaveImpactAsphaltCoverWaveConditionsCalculationActivityIntegrationTest.cs =================================================================== diff -u -ra781a13dd85064216928827c3aefb35d9829e073 -r9a62e7ebcbf96a0455143740fc883704b2cc6eea --- Ringtoets/WaveImpactAsphaltCover/test/Ringtoets.WaveImpactAsphaltCover.Integration.Test/WaveImpactAsphaltCoverWaveConditionsCalculationActivityIntegrationTest.cs (.../WaveImpactAsphaltCoverWaveConditionsCalculationActivityIntegrationTest.cs) (revision a781a13dd85064216928827c3aefb35d9829e073) +++ Ringtoets/WaveImpactAsphaltCover/test/Ringtoets.WaveImpactAsphaltCover.Integration.Test/WaveImpactAsphaltCoverWaveConditionsCalculationActivityIntegrationTest.cs (.../WaveImpactAsphaltCoverWaveConditionsCalculationActivityIntegrationTest.cs) (revision 9a62e7ebcbf96a0455143740fc883704b2cc6eea) @@ -57,18 +57,24 @@ public void Run_CalculationWithInvalidHydraulicBoundaryDatabaseFilePath_DoesNotPerformCalculationAndLogsError() { // Setup - IAssessmentSection assessmentSection = CreateAssessmentSectionWithHydraulicBoundaryOutput(); - WaveImpactAsphaltCoverWaveConditionsCalculation calculation = CreateValidCalculation(assessmentSection.HydraulicBoundaryDatabase.Locations.First()); - string invalidFilePath = Path.Combine(testDataPath, "NonExisting.sqlite"); - var waveImpactAsphaltCoverFailureMechanism = new WaveImpactAsphaltCoverFailureMechanism(); + var assessmentSection = new AssessmentSectionStub(); + assessmentSection.HydraulicBoundaryDatabase.FilePath = invalidFilePath; - var activity = new WaveImpactAsphaltCoverWaveConditionsCalculationActivity(calculation, - invalidFilePath, - waveImpactAsphaltCoverFailureMechanism, - assessmentSection); + var hydraulicBoundaryLocation = new TestHydraulicBoundaryLocation(); + assessmentSection.SetHydraulicBoundaryLocationCalculations(new[] + { + hydraulicBoundaryLocation + }); + WaveImpactAsphaltCoverWaveConditionsCalculation calculation = CreateValidCalculation(hydraulicBoundaryLocation); + + CalculatableActivity activity = WaveImpactAsphaltCoverWaveConditionsCalculationActivityFactory.CreateCalculationActivity( + calculation, + new WaveImpactAsphaltCoverFailureMechanism(), + assessmentSection); + var mockRepository = new MockRepository(); var calculatorFactory = mockRepository.StrictMock(); mockRepository.ReplayAll(); @@ -105,13 +111,11 @@ assessmentSection.HydraulicBoundaryDatabase.UsePreprocessor = true; assessmentSection.HydraulicBoundaryDatabase.PreprocessorDirectory = "InvalidPreprocessorDirectory"; - var waveImpactAsphaltCoverFailureMechanism = new WaveImpactAsphaltCoverFailureMechanism(); + CalculatableActivity activity = WaveImpactAsphaltCoverWaveConditionsCalculationActivityFactory.CreateCalculationActivity( + calculation, + new WaveImpactAsphaltCoverFailureMechanism(), + assessmentSection); - var activity = new WaveImpactAsphaltCoverWaveConditionsCalculationActivity(calculation, - validFilePath, - waveImpactAsphaltCoverFailureMechanism, - assessmentSection); - var mockRepository = new MockRepository(); var calculatorFactory = mockRepository.StrictMock(); mockRepository.ReplayAll(); @@ -146,13 +150,11 @@ assessmentSection.FailureMechanismContribution.LowerLimitNorm = 0.1; - var waveImpactAsphaltCoverFailureMechanism = new WaveImpactAsphaltCoverFailureMechanism(); + CalculatableActivity activity = WaveImpactAsphaltCoverWaveConditionsCalculationActivityFactory.CreateCalculationActivity( + calculation, + new WaveImpactAsphaltCoverFailureMechanism(), + assessmentSection); - var activity = new WaveImpactAsphaltCoverWaveConditionsCalculationActivity(calculation, - validFilePath, - waveImpactAsphaltCoverFailureMechanism, - assessmentSection); - var mockRepository = new MockRepository(); var calculatorFactory = mockRepository.StrictMock(); mockRepository.ReplayAll(); @@ -185,13 +187,11 @@ IAssessmentSection assessmentSection = CreateAssessmentSectionWithHydraulicBoundaryOutput(); WaveImpactAsphaltCoverWaveConditionsCalculation calculation = CreateValidCalculation(assessmentSection.HydraulicBoundaryDatabase.Locations.First()); - var waveImpactAsphaltCoverFailureMechanism = new WaveImpactAsphaltCoverFailureMechanism(); + CalculatableActivity activity = WaveImpactAsphaltCoverWaveConditionsCalculationActivityFactory.CreateCalculationActivity( + calculation, + new WaveImpactAsphaltCoverFailureMechanism(), + assessmentSection); - var activity = new WaveImpactAsphaltCoverWaveConditionsCalculationActivity(calculation, - validFilePath, - waveImpactAsphaltCoverFailureMechanism, - assessmentSection); - RoundedDouble[] waterLevels = GetWaterLevels(calculation, assessmentSection).ToArray(); int nrOfCalculators = waterLevels.Length; @@ -231,15 +231,13 @@ // Setup IAssessmentSection assessmentSection = CreateAssessmentSectionWithHydraulicBoundaryOutput(); WaveImpactAsphaltCoverWaveConditionsCalculation calculation = CreateValidCalculation(assessmentSection.HydraulicBoundaryDatabase.Locations.First()); - calculation.InputParameters.BreakWater.Type = breakWaterType; var waveImpactAsphaltCoverFailureMechanism = new WaveImpactAsphaltCoverFailureMechanism(); - var activity = new WaveImpactAsphaltCoverWaveConditionsCalculationActivity(calculation, - validFilePath, - waveImpactAsphaltCoverFailureMechanism, - assessmentSection); + CalculatableActivity activity = WaveImpactAsphaltCoverWaveConditionsCalculationActivityFactory.CreateCalculationActivity(calculation, + waveImpactAsphaltCoverFailureMechanism, + assessmentSection); var calculator = new TestWaveConditionsCosineCalculator(); RoundedDouble[] waterLevels = GetWaterLevels(calculation, assessmentSection).ToArray(); @@ -293,13 +291,11 @@ IAssessmentSection assessmentSection = CreateAssessmentSectionWithHydraulicBoundaryOutput(); WaveImpactAsphaltCoverWaveConditionsCalculation calculation = CreateValidCalculation(assessmentSection.HydraulicBoundaryDatabase.Locations.First()); - var waveImpactAsphaltCoverFailureMechanism = new WaveImpactAsphaltCoverFailureMechanism(); + CalculatableActivity activity = WaveImpactAsphaltCoverWaveConditionsCalculationActivityFactory.CreateCalculationActivity( + calculation, + new WaveImpactAsphaltCoverFailureMechanism(), + assessmentSection); - var activity = new WaveImpactAsphaltCoverWaveConditionsCalculationActivity(calculation, - validFilePath, - waveImpactAsphaltCoverFailureMechanism, - assessmentSection); - var mockRepository = new MockRepository(); var calculatorFactory = mockRepository.StrictMock(); calculatorFactory.Expect(cf => cf.CreateWaveConditionsCosineCalculator(testDataPath, string.Empty)).Return(new TestWaveConditionsCosineCalculator()); @@ -340,36 +336,63 @@ } [Test] - [TestCaseSource(typeof(HydraRingCalculatorTestCaseProvider), nameof(HydraRingCalculatorTestCaseProvider.GetCalculatorFailingConditions), new object[] + public void Run_WhenCanceled_OutputNull() { - nameof(Run_CalculationFailed_OutputNull) - })] - public void Run_CalculationFailed_OutputNull(bool endInFailure, string lastErrorFileContent) - { // Setup IAssessmentSection assessmentSection = CreateAssessmentSectionWithHydraulicBoundaryOutput(); WaveImpactAsphaltCoverWaveConditionsCalculation calculation = CreateValidCalculation(assessmentSection.HydraulicBoundaryDatabase.Locations.First()); - var waveImpactAsphaltCoverFailureMechanism = new WaveImpactAsphaltCoverFailureMechanism(); + CalculatableActivity activity = WaveImpactAsphaltCoverWaveConditionsCalculationActivityFactory.CreateCalculationActivity( + calculation, + new WaveImpactAsphaltCoverFailureMechanism(), + assessmentSection); - var activity = new WaveImpactAsphaltCoverWaveConditionsCalculationActivity(calculation, - validFilePath, - waveImpactAsphaltCoverFailureMechanism, - assessmentSection); + var mockRepository = new MockRepository(); + var calculatorFactory = mockRepository.StrictMock(); + calculatorFactory.Expect(cf => cf.CreateWaveConditionsCosineCalculator(testDataPath, string.Empty)).Return(new TestWaveConditionsCosineCalculator()); + mockRepository.ReplayAll(); - var calculator = new TestWaveConditionsCosineCalculator + using (new HydraRingCalculatorFactoryConfig(calculatorFactory)) { - EndInFailure = endInFailure, - LastErrorFileContent = lastErrorFileContent - }; - int nrOfCalculators = GetWaterLevels(calculation, assessmentSection).Count(); + activity.ProgressChanged += (sender, args) => + { + if (activity.State != ActivityState.Canceled) + { + activity.Cancel(); + } + }; + activity.Run(); + + // Call + activity.Finish(); + + // Assert + Assert.AreEqual(ActivityState.Canceled, activity.State); + Assert.IsNull(calculation.Output); + } + + mockRepository.VerifyAll(); + } + + [Test] + public void Run_CalculationPerformed_SetsOutput() + { + // Setup + IAssessmentSection assessmentSection = CreateAssessmentSectionWithHydraulicBoundaryOutput(); + WaveImpactAsphaltCoverWaveConditionsCalculation calculation = CreateValidCalculation(assessmentSection.HydraulicBoundaryDatabase.Locations.First()); + + CalculatableActivity activity = WaveImpactAsphaltCoverWaveConditionsCalculationActivityFactory.CreateCalculationActivity( + calculation, + new WaveImpactAsphaltCoverFailureMechanism(), + assessmentSection); + var mockRepository = new MockRepository(); var calculatorFactory = mockRepository.StrictMock(); calculatorFactory.Expect(cf => cf.CreateWaveConditionsCosineCalculator(testDataPath, string.Empty)) - .Return(calculator) + .Return(new TestWaveConditionsCosineCalculator()) .Repeat - .Times(nrOfCalculators); + .Times(GetWaterLevels(calculation, assessmentSection).Count()); mockRepository.ReplayAll(); using (new HydraRingCalculatorFactoryConfig(calculatorFactory)) @@ -378,7 +401,8 @@ activity.Run(); // Assert - Assert.IsNull(calculation.Output); + Assert.IsNotNull(calculation.Output); + Assert.AreEqual(3, calculation.Output.Items.Count()); } mockRepository.VerifyAll(); @@ -395,12 +419,11 @@ IAssessmentSection assessmentSection = CreateAssessmentSectionWithHydraulicBoundaryOutput(); WaveImpactAsphaltCoverWaveConditionsCalculation calculation = CreateValidCalculation(assessmentSection.HydraulicBoundaryDatabase.Locations.First()); - var failureMechanism = new WaveImpactAsphaltCoverFailureMechanism(); + CalculatableActivity activity = WaveImpactAsphaltCoverWaveConditionsCalculationActivityFactory.CreateCalculationActivity( + calculation, + new WaveImpactAsphaltCoverFailureMechanism(), + assessmentSection); - var activity = new WaveImpactAsphaltCoverWaveConditionsCalculationActivity(calculation, validFilePath, failureMechanism, assessmentSection); - - int nrOfCalculators = GetWaterLevels(calculation, assessmentSection).Count(); - var mockRepository = new MockRepository(); var calculatorFactory = mockRepository.StrictMock(); var calculator = new TestWaveConditionsCosineCalculator @@ -411,7 +434,7 @@ calculatorFactory.Expect(cf => cf.CreateWaveConditionsCosineCalculator(testDataPath, string.Empty)) .Return(calculator) .Repeat - .Times(nrOfCalculators); + .Times(GetWaterLevels(calculation, assessmentSection).Count()); mockRepository.ReplayAll(); using (new HydraRingCalculatorFactoryConfig(calculatorFactory)) @@ -427,19 +450,54 @@ } [Test] - public void Run_HydraulicBoundaryDatabaseWithCanUsePreprocessorFalse_CreateWaveConditionsCosineCalculatorAsExpected() + [TestCaseSource(typeof(HydraRingCalculatorTestCaseProvider), nameof(HydraRingCalculatorTestCaseProvider.GetCalculatorFailingConditions), new object[] { + nameof(Run_CalculationFailed_OutputNull) + })] + public void Run_CalculationFailed_OutputNull(bool endInFailure, string lastErrorFileContent) + { // Setup IAssessmentSection assessmentSection = CreateAssessmentSectionWithHydraulicBoundaryOutput(); WaveImpactAsphaltCoverWaveConditionsCalculation calculation = CreateValidCalculation(assessmentSection.HydraulicBoundaryDatabase.Locations.First()); - var waveImpactAsphaltCoverFailureMechanism = new WaveImpactAsphaltCoverFailureMechanism(); + CalculatableActivity activity = WaveImpactAsphaltCoverWaveConditionsCalculationActivityFactory.CreateCalculationActivity( + calculation, + new WaveImpactAsphaltCoverFailureMechanism(), + assessmentSection); - var activity = new WaveImpactAsphaltCoverWaveConditionsCalculationActivity(calculation, - validFilePath, - waveImpactAsphaltCoverFailureMechanism, - assessmentSection); + var mockRepository = new MockRepository(); + var calculatorFactory = mockRepository.StrictMock(); + calculatorFactory.Expect(cf => cf.CreateWaveConditionsCosineCalculator(testDataPath, string.Empty)).Return(new TestWaveConditionsCosineCalculator + { + EndInFailure = endInFailure, + LastErrorFileContent = lastErrorFileContent + }).Repeat.Times(GetWaterLevels(calculation, assessmentSection).Count()); + mockRepository.ReplayAll(); + using (new HydraRingCalculatorFactoryConfig(calculatorFactory)) + { + // Call + activity.Run(); + + // Assert + Assert.IsNull(calculation.Output); + } + + mockRepository.VerifyAll(); + } + + [Test] + public void Run_HydraulicBoundaryDatabaseWithCanUsePreprocessorFalse_CreateWaveConditionsCosineCalculatorAsExpected() + { + // Setup + IAssessmentSection assessmentSection = CreateAssessmentSectionWithHydraulicBoundaryOutput(); + WaveImpactAsphaltCoverWaveConditionsCalculation calculation = CreateValidCalculation(assessmentSection.HydraulicBoundaryDatabase.Locations.First()); + + CalculatableActivity activity = WaveImpactAsphaltCoverWaveConditionsCalculationActivityFactory.CreateCalculationActivity( + calculation, + new WaveImpactAsphaltCoverFailureMechanism(), + assessmentSection); + int nrOfCalculators = GetWaterLevels(calculation, assessmentSection).Count(); var mockRepository = new MockRepository(); @@ -471,20 +529,17 @@ assessmentSection.HydraulicBoundaryDatabase.UsePreprocessor = true; assessmentSection.HydraulicBoundaryDatabase.PreprocessorDirectory = validPreprocessorDirectory; - var waveImpactAsphaltCoverFailureMechanism = new WaveImpactAsphaltCoverFailureMechanism(); + CalculatableActivity activity = WaveImpactAsphaltCoverWaveConditionsCalculationActivityFactory.CreateCalculationActivity( + calculation, + new WaveImpactAsphaltCoverFailureMechanism(), + assessmentSection); - var activity = new WaveImpactAsphaltCoverWaveConditionsCalculationActivity(calculation, - validFilePath, - waveImpactAsphaltCoverFailureMechanism, - assessmentSection); - int nrOfCalculators = GetWaterLevels(calculation, assessmentSection).Count(); - var mockRepository = new MockRepository(); var calculatorFactory = mockRepository.StrictMock(); calculatorFactory.Expect(cf => cf.CreateWaveConditionsCosineCalculator(testDataPath, validPreprocessorDirectory)) .Return(new TestWaveConditionsCosineCalculator()) .Repeat - .Times(nrOfCalculators); + .Times(GetWaterLevels(calculation, assessmentSection).Count()); mockRepository.ReplayAll(); using (new HydraRingCalculatorFactoryConfig(calculatorFactory)) @@ -506,22 +561,18 @@ assessmentSection.HydraulicBoundaryDatabase.CanUsePreprocessor = true; assessmentSection.HydraulicBoundaryDatabase.UsePreprocessor = false; - assessmentSection.HydraulicBoundaryDatabase.PreprocessorDirectory = "NonExistingPreprocessorDirectory"; + assessmentSection.HydraulicBoundaryDatabase.PreprocessorDirectory = "InvalidPreprocessorDirectory"; - var waveImpactAsphaltCoverFailureMechanism = new WaveImpactAsphaltCoverFailureMechanism(); + CalculatableActivity activity = WaveImpactAsphaltCoverWaveConditionsCalculationActivityFactory.CreateCalculationActivity(calculation, + new WaveImpactAsphaltCoverFailureMechanism(), + assessmentSection); - var activity = new WaveImpactAsphaltCoverWaveConditionsCalculationActivity(calculation, - validFilePath, - waveImpactAsphaltCoverFailureMechanism, - assessmentSection); - int nrOfCalculators = GetWaterLevels(calculation, assessmentSection).Count(); - var mockRepository = new MockRepository(); var calculatorFactory = mockRepository.StrictMock(); calculatorFactory.Expect(cf => cf.CreateWaveConditionsCosineCalculator(testDataPath, string.Empty)) .Return(new TestWaveConditionsCosineCalculator()) .Repeat - .Times(nrOfCalculators); + .Times(GetWaterLevels(calculation, assessmentSection).Count()); mockRepository.ReplayAll(); using (new HydraRingCalculatorFactoryConfig(calculatorFactory))