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