Index: Ringtoets/HydraRing/src/Ringtoets.HydraRing.IO/HydraulicLocationConfigurationDatabase/HydraulicLocationConfigurationDatabaseReader.cs =================================================================== diff -u -r2a81f01756e227d5ce93717b21b87e8a5cd5fcbb -rcb5b61b9f7eb07bd968599a73829edf9dd30f0ec --- Ringtoets/HydraRing/src/Ringtoets.HydraRing.IO/HydraulicLocationConfigurationDatabase/HydraulicLocationConfigurationDatabaseReader.cs (.../HydraulicLocationConfigurationDatabaseReader.cs) (revision 2a81f01756e227d5ce93717b21b87e8a5cd5fcbb) +++ Ringtoets/HydraRing/src/Ringtoets.HydraRing.IO/HydraulicLocationConfigurationDatabase/HydraulicLocationConfigurationDatabaseReader.cs (.../HydraulicLocationConfigurationDatabaseReader.cs) (revision cb5b61b9f7eb07bd968599a73829edf9dd30f0ec) @@ -53,6 +53,16 @@ public HydraulicLocationConfigurationDatabaseReader(string databaseFilePath) : base(databaseFilePath) {} /// + /// Reads the hydraulic location configuration database. + /// + /// The track id to read the location configurations for. + /// A read hydraulic location configuration database. + public ReadHydraulicLocationConfigurationDatabase Read(long trackId) + { + return new ReadHydraulicLocationConfigurationDatabase(GetLocationIdsByTrackId(trackId)); + } + + /// /// Gets the location ids from the database, based upon . /// /// The hydraulic boundary track id. Index: Ringtoets/HydraRing/test/Ringtoets.HydraRing.IO.Test/HydraulicLocationConfigurationDatabase/HydraulicLocationConfigurationDatabaseReaderTest.cs =================================================================== diff -u -r2a81f01756e227d5ce93717b21b87e8a5cd5fcbb -rcb5b61b9f7eb07bd968599a73829edf9dd30f0ec --- Ringtoets/HydraRing/test/Ringtoets.HydraRing.IO.Test/HydraulicLocationConfigurationDatabase/HydraulicLocationConfigurationDatabaseReaderTest.cs (.../HydraulicLocationConfigurationDatabaseReaderTest.cs) (revision 2a81f01756e227d5ce93717b21b87e8a5cd5fcbb) +++ Ringtoets/HydraRing/test/Ringtoets.HydraRing.IO.Test/HydraulicLocationConfigurationDatabase/HydraulicLocationConfigurationDatabaseReaderTest.cs (.../HydraulicLocationConfigurationDatabaseReaderTest.cs) (revision cb5b61b9f7eb07bd968599a73829edf9dd30f0ec) @@ -91,7 +91,7 @@ } [Test] - public void GetLocationIdsByTrackId_AmbigousLocations_ReturnsFirstAndLogsWarning() + public void GetLocationIdsByTrackId_AmbiguousLocations_ReturnsFirstAndLogsWarning() { // Setup string dbFile = Path.Combine(testDataPath, "ambigousLocation.sqlite"); @@ -153,5 +153,89 @@ Assert.IsInstanceOf(exception.InnerException); } } + + [Test] + [TestCase(18169, 1000, 1801000)] + [TestCase(6, 1000, 0)] + public void Read_ValidFile_ExpectedValues(int trackId, int hrdLocationId, int expectedLocationId) + { + // Setup + string dbFile = Path.Combine(testDataPath, "complete.sqlite"); + + using (var hydraulicBoundaryDatabaseReader = new HydraulicLocationConfigurationDatabaseReader(dbFile)) + { + // Call + ReadHydraulicLocationConfigurationDatabase readHydraulicLocationConfigurationDatabase = hydraulicBoundaryDatabaseReader.Read(trackId); + + // Assert + long locationId; + readHydraulicLocationConfigurationDatabase.LocationIds.TryGetValue(hrdLocationId, out locationId); + Assert.AreEqual(expectedLocationId, locationId); + } + } + + [Test] + public void Read_AmbiguousLocations_ReturnsFirstAndLogsWarning() + { + // Setup + string dbFile = Path.Combine(testDataPath, "ambigousLocation.sqlite"); + const int trackId = 18; + const int hrdLocationId = 1; + ReadHydraulicLocationConfigurationDatabase readHydraulicLocationConfigurationDatabase = null; + + using (var hydraulicBoundaryDatabaseReader = new HydraulicLocationConfigurationDatabaseReader(dbFile)) + { + // Call + Action call = () => readHydraulicLocationConfigurationDatabase = hydraulicBoundaryDatabaseReader.Read(trackId); + + // Assert + const int expectedLocationId = 1800001; + const string expectedMessage = "Er zijn meerdere resultaten gevonden, wat niet voor zou mogen komen. Neem contact op met de leverancier. Het eerste resultaat zal worden gebruikt."; + TestHelper.AssertLogMessageIsGenerated(call, expectedMessage, 1); + long locationId; + readHydraulicLocationConfigurationDatabase.LocationIds.TryGetValue(hrdLocationId, out locationId); + Assert.AreEqual(expectedLocationId, locationId); + } + } + + [Test] + public void Read_InvalidColumns_ThrowsLineParseException() + { + // Setup + string dbFile = Path.Combine(testDataPath, "corruptschema.sqlite"); + const int trackId = 1; + + using (var hydraulicBoundaryDatabaseReader = new HydraulicLocationConfigurationDatabaseReader(dbFile)) + { + // Call + TestDelegate test = () => hydraulicBoundaryDatabaseReader.Read(trackId); + + // Assert + string expectedMessage = new FileReaderErrorMessageBuilder(dbFile).Build("Kritieke fout opgetreden bij het uitlezen van waardes uit kolommen in de database."); + var exception = Assert.Throws(test); + Assert.AreEqual(expectedMessage, exception.Message); + Assert.IsInstanceOf(exception.InnerException); + } + } + + [Test] + public void Read_EmptyFile_ThrowsCriticalFileReadException() + { + // Setup + string dbFile = Path.Combine(testDataPath, "empty.sqlite"); + const int trackId = 1; + + using (var hydraulicBoundaryDatabaseReader = new HydraulicLocationConfigurationDatabaseReader(dbFile)) + { + // Call + TestDelegate test = () => hydraulicBoundaryDatabaseReader.Read(trackId); + + // Assert + string expectedMessage = new FileReaderErrorMessageBuilder(dbFile).Build("Het bevragen van de database is mislukt."); + var exception = Assert.Throws(test); + Assert.AreEqual(expectedMessage, exception.Message); + Assert.IsInstanceOf(exception.InnerException); + } + } } } \ No newline at end of file