Index: Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Parsers/WaveConditionsCalculationParserTest.cs =================================================================== diff -u -r0e9042f3bb1c6b0615400c2dbf45a2a06cc024e1 -rb22ebfa1f38daadd1bd4f79ac846057e7ee27976 --- Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Parsers/WaveConditionsCalculationParserTest.cs (.../WaveConditionsCalculationParserTest.cs) (revision 0e9042f3bb1c6b0615400c2dbf45a2a06cc024e1) +++ Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Parsers/WaveConditionsCalculationParserTest.cs (.../WaveConditionsCalculationParserTest.cs) (revision b22ebfa1f38daadd1bd4f79ac846057e7ee27976) @@ -19,20 +19,25 @@ // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. +using System; +using System.Data.SQLite; using System.IO; +using System.Security.AccessControl; using Core.Common.TestUtil; using NUnit.Framework; +using Ringtoets.HydraRing.Calculation.Exceptions; using Ringtoets.HydraRing.Calculation.Parsers; namespace Ringtoets.HydraRing.Calculation.Test.Parsers { [TestFixture] public class WaveConditionsCalculationParserTest { - private const int sectionId = 1; - private readonly string testDataPath = Path.Combine(TestHelper.GetTestDataPath(TestDataPath.Ringtoets.HydraRing.Calculation, "Parsers"), "WaveConditionsCalculationParser"); - private readonly string outputFileName = sectionId + "-output.txt"; + private const string validFile = "ValidFile"; + private readonly string testDirectory = Path.Combine(TestHelper.GetTestDataPath(TestDataPath.Ringtoets.HydraRing.Calculation, "Parsers"), + nameof(WaveConditionsCalculationParser)); + [Test] public void Constructor_ExpectedValues() { @@ -45,109 +50,121 @@ } [Test] - public void Parse_NotExistingOutputFile_OutputNull() + public void Parse_WorkingDirectoryNull_ThrowsArgumentNullException() { // Setup var parser = new WaveConditionsCalculationParser(); // Call - parser.Parse(testDataPath, sectionId); + TestDelegate test = () => parser.Parse(null, 1); // Assert - Assert.IsNull(parser.Output); + var exception = Assert.Throws(test); + Assert.AreEqual("workingDirectory", exception.ParamName); } [Test] - public void Parse_EmptyOutputFile_OutputNull() + public void Parse_WithWorkingDirectoryWithoutExpectedFile_ThrowsHydraRingFileParserException() { // Setup + string path = Path.Combine(testDirectory, "EmptyWorkingDirectory"); var parser = new WaveConditionsCalculationParser(); - var workingDirectory = Path.Combine(testDataPath, "empty"); // Call - parser.Parse(workingDirectory, sectionId); + TestDelegate test = () => parser.Parse(path, 1); // Assert - Assert.IsNull(parser.Output); - Assert.IsTrue(TestHelper.CanOpenFileForWrite(Path.Combine(workingDirectory, outputFileName))); + var exception = Assert.Throws(test); + Assert.IsInstanceOf(exception.InnerException); } [Test] - public void Parse_ValidHydraRingOutputFile_OutputSetWithExpectedCalculationResult() + public void Parse_WithWorkingDirectoryWithInvalidOutputFile_ThrowsHydraRingFileParserException() { // Setup + string path = Path.Combine(testDirectory, "InvalidFile"); var parser = new WaveConditionsCalculationParser(); - var workingDirectory = Path.Combine(testDataPath, "valid"); // Call - parser.Parse(workingDirectory, sectionId); + TestDelegate test = () => parser.Parse(path, 1); // Assert - Assert.AreEqual(22.01300, parser.Output.WaveAngle); - Assert.AreEqual(1.87957, parser.Output.WaveHeight); - Assert.AreEqual(11.15140, parser.Output.WavePeakPeriod); - Assert.AreEqual(337.98700, parser.Output.WaveDirection); - Assert.IsTrue(TestHelper.CanOpenFileForWrite(Path.Combine(workingDirectory, outputFileName))); + var exception = Assert.Throws(test); + Assert.IsInstanceOf(exception.InnerException); + Assert.AreEqual("Er kon geen resultaat gelezen worden uit de Hydra-Ring uitvoerdatabase.", exception.Message); } [Test] - public void Parse_InvalidHydraRingOutputFileWaveAngleMissing_OutputNull() + public void Parse_WithWorkingDirectoryWithEmptyFile_ThrowsHydraRingFileParserException() { // Setup + string path = Path.Combine(testDirectory, "EmptyDatabase"); var parser = new WaveConditionsCalculationParser(); - var workingDirectory = Path.Combine(testDataPath, "output-no-waveAngle"); // Call - parser.Parse(workingDirectory, sectionId); + TestDelegate test = () => parser.Parse(path, 1); // Assert - Assert.IsNull(parser.Output); - Assert.IsTrue(TestHelper.CanOpenFileForWrite(Path.Combine(workingDirectory, outputFileName))); + var exception = Assert.Throws(test); + Assert.AreEqual("Er zijn geen berekende golfcondities gevonden in de Hydra-Ring uitvoerdatabase.", exception.Message); + Assert.IsInstanceOf(exception.InnerException); } [Test] - public void Parse_InvalidHydraRingOutputFileWaveDirectionMissing_OutputNull() + public void Parse_ErrorWhileReadingFile_ThrowsHydraRingFileParserException() { // Setup var parser = new WaveConditionsCalculationParser(); - var workingDirectory = Path.Combine(testDataPath, "output-no-waveDirection"); + string workingDirectory = Path.Combine(testDirectory, validFile); - // Call - parser.Parse(workingDirectory, sectionId); + using (new DirectoryPermissionsRevoker(testDirectory, FileSystemRights.ReadData)) + { + // Call + TestDelegate call = () => parser.Parse(workingDirectory, 1); - // Assert - Assert.IsNull(parser.Output); - Assert.IsTrue(TestHelper.CanOpenFileForWrite(Path.Combine(workingDirectory, outputFileName))); + // Assert + var exception = Assert.Throws(call); + var expectedMessage = "Er kon geen resultaat gelezen worden uit de Hydra-Ring uitvoerdatabase."; + Assert.AreEqual(expectedMessage, exception.Message); + Assert.IsInstanceOf(exception.InnerException); + } } [Test] - public void Parse_InvalidHydraRingOutputFileWaveHeightMissing_OutputNull() + [TestCase("ValidFileNoWaveHeight")] + [TestCase("ValidFileNoWavePeriod")] + [TestCase("ValidFileNoWaveDirection")] + [TestCase("ValidFileNoWaveAngle")] + public void Parse_NotAllColumnsHasResults_ThrowsHydraRingFileParserException(string subFolder) { // Setup + string path = Path.Combine(testDirectory, subFolder); var parser = new WaveConditionsCalculationParser(); - var workingDirectory = Path.Combine(testDataPath, "output-no-waveHeight"); // Call - parser.Parse(workingDirectory, sectionId); + TestDelegate test = () => parser.Parse(path, 1); // Assert - Assert.IsNull(parser.Output); - Assert.IsTrue(TestHelper.CanOpenFileForWrite(Path.Combine(workingDirectory, outputFileName))); + var exception = Assert.Throws(test); + Assert.AreEqual("Er zijn geen berekende golfcondities gevonden in de Hydra-Ring uitvoerdatabase.", exception.Message); + Assert.IsInstanceOf(exception.InnerException); } [Test] - public void Parse_InvalidHydraRingOutputFileWavePeakPeriodMissing_OutputNull() + public void Parse_ValidData_OutputSet() { // Setup + string path = Path.Combine(testDirectory, validFile); var parser = new WaveConditionsCalculationParser(); - var workingDirectory = Path.Combine(testDataPath, "output-no-wavePeakPeriod"); // Call - parser.Parse(workingDirectory, sectionId); + parser.Parse(path, 1); // Assert - Assert.IsNull(parser.Output); - Assert.IsTrue(TestHelper.CanOpenFileForWrite(Path.Combine(workingDirectory, outputFileName))); + Assert.AreEqual(2.76672, parser.Output.WaveHeight); + Assert.AreEqual(-7.97903, parser.Output.WaveAngle); + Assert.AreEqual(292.021, parser.Output.WaveDirection); + Assert.AreEqual(5.02556, parser.Output.WavePeakPeriod); } } } \ No newline at end of file