Index: Ringtoets/HydraRing/src/Ringtoets.HydraRing.IO/HydraulicBoundaryDatabase/HydraulicBoundaryDatabaseReader.cs =================================================================== diff -u -r7a8e8a9491aab62076490e6635a8926552bc0404 -rdc381b4bef2de717bfa3ad01b38f5fed7ae98891 --- Ringtoets/HydraRing/src/Ringtoets.HydraRing.IO/HydraulicBoundaryDatabase/HydraulicBoundaryDatabaseReader.cs (.../HydraulicBoundaryDatabaseReader.cs) (revision 7a8e8a9491aab62076490e6635a8926552bc0404) +++ Ringtoets/HydraRing/src/Ringtoets.HydraRing.IO/HydraulicBoundaryDatabase/HydraulicBoundaryDatabaseReader.cs (.../HydraulicBoundaryDatabaseReader.cs) (revision dc381b4bef2de717bfa3ad01b38f5fed7ae98891) @@ -105,23 +105,32 @@ /// /// The version found in the database, or if the version cannot be found. /// Thrown when a query could not be executed on the database schema. - private string ReadVersion() + public string ReadVersion() { - using (IDataReader reader = CreateDataReader(HydraulicBoundaryDatabaseQueryBuilder.GetVersionQuery(), null)) + try { - if (reader.Read()) + using (IDataReader reader = CreateDataReader(HydraulicBoundaryDatabaseQueryBuilder.GetVersionQuery(), null)) { - string version = Convert.ToString(reader[GeneralTableDefinitions.GeneratedVersion]); - if (!string.IsNullOrEmpty(version)) + if (reader.Read()) { - return version; + string version = Convert.ToString(reader[GeneralTableDefinitions.GeneratedVersion]); + + if (!string.IsNullOrEmpty(version)) + { + return version; + } } - } - string message = new FileReaderErrorMessageBuilder(Path).Build(Resources.HydraulicBoundaryDatabaseReader_Critical_Unexpected_value_on_column); - throw new CriticalFileReadException(message); + string message = new FileReaderErrorMessageBuilder(Path).Build(Resources.HydraulicBoundaryDatabaseReader_Critical_Unexpected_value_on_column); + throw new CriticalFileReadException(message); + } } + catch (SQLiteException e) + { + string message = new FileReaderErrorMessageBuilder(Path).Build(Resources.Error_HydraulicBoundaryLocation_read_from_database); + throw new CriticalFileReadException(message, e); + } } /// Index: Ringtoets/HydraRing/test/Ringtoets.HydraRing.IO.Test/HydraulicBoundaryDatabase/HydraulicBoundaryDatabaseReaderTest.cs =================================================================== diff -u -r9486f67a2641718e4d63a6637753b6457a6a53b5 -rdc381b4bef2de717bfa3ad01b38f5fed7ae98891 --- Ringtoets/HydraRing/test/Ringtoets.HydraRing.IO.Test/HydraulicBoundaryDatabase/HydraulicBoundaryDatabaseReaderTest.cs (.../HydraulicBoundaryDatabaseReaderTest.cs) (revision 9486f67a2641718e4d63a6637753b6457a6a53b5) +++ Ringtoets/HydraRing/test/Ringtoets.HydraRing.IO.Test/HydraulicBoundaryDatabase/HydraulicBoundaryDatabaseReaderTest.cs (.../HydraulicBoundaryDatabaseReaderTest.cs) (revision dc381b4bef2de717bfa3ad01b38f5fed7ae98891) @@ -184,5 +184,58 @@ Assert.AreEqual(427567.0, location.CoordinateY); } } + + [Test] + public void ReadVersion_EmptyDatabase_ThrowsCriticalFileReadException() + { + // Setup + string hydraulicBoundaryDatabaseFile = Path.Combine(testDataPath, "emptySchemaGeneral.sqlite"); + + using (var reader = new HydraulicBoundaryDatabaseReader(hydraulicBoundaryDatabaseFile)) + { + // Call + TestDelegate test = () => reader.ReadVersion(); + + // Assert + string expectedMessage = $"Fout bij het lezen van bestand '{hydraulicBoundaryDatabaseFile}': kritieke fout opgetreden bij het uitlezen van waardes uit kolommen in de database."; + var exception = Assert.Throws(test); + Assert.AreEqual(expectedMessage, exception.Message); + } + } + + [Test] + public void ReadVersion_InvalidTrackIdColumn_ThrowsCriticalFileReadException() + { + // Setup + string hydraulicBoundaryDatabaseFile = Path.Combine(testDataPath, "empty.sqlite"); + + using (var reader = new HydraulicBoundaryDatabaseReader(hydraulicBoundaryDatabaseFile)) + { + // Call + TestDelegate test = () => reader.ReadVersion(); + + // Assert + var exception = Assert.Throws(test); + string expectedMessage = $"Fout bij het lezen van bestand '{hydraulicBoundaryDatabaseFile}': kon geen locaties verkrijgen van de database."; + Assert.AreEqual(expectedMessage, exception.Message); + Assert.IsInstanceOf(exception.InnerException); + } + } + + [Test] + public void ReadVersion_ValidFile_ReturnsReadVersion() + { + // Setup + string hydraulicBoundaryDatabaseFile = Path.Combine(testDataPath, "complete.sqlite"); + + using (var reader = new HydraulicBoundaryDatabaseReader(hydraulicBoundaryDatabaseFile)) + { + // Call + string version= reader.ReadVersion(); + + // Assert + Assert.AreEqual("Dutch coast South19-11-2015 12:0013", version); + } + } } } \ No newline at end of file