Index: Ringtoets/Integration/src/Ringtoets.Integration.IO/Importers/HydraulicBoundaryDatabaseImporter.cs =================================================================== diff -u -rcaa6d8dab612fe88267e6bf6d0ffb5626544f683 -r11ee95784513ed761bee00e2422b061aa3060525 --- Ringtoets/Integration/src/Ringtoets.Integration.IO/Importers/HydraulicBoundaryDatabaseImporter.cs (.../HydraulicBoundaryDatabaseImporter.cs) (revision caa6d8dab612fe88267e6bf6d0ffb5626544f683) +++ Ringtoets/Integration/src/Ringtoets.Integration.IO/Importers/HydraulicBoundaryDatabaseImporter.cs (.../HydraulicBoundaryDatabaseImporter.cs) (revision 11ee95784513ed761bee00e2422b061aa3060525) @@ -91,14 +91,21 @@ return false; } + ReadHydraulicLocationConfigurationDatabase readHydraulicLocationConfigurationDatabase = readHydraulicLocationConfigurationDatabaseResult.Items.Single(); + if (!IsValidReadHydraulicLocationConfigurationDatabase(readHydraulicLocationConfigurationDatabase)) + { + Log.Error(BuildErrorMessage(GetHlcdFilePath(), "placeHolder.")); + return false; + } + ReadResult> readExcludedLocationsResult = ReadExcludedLocations(); if (readExcludedLocationsResult.CriticalErrorOccurred || Canceled) { return false; } - AddHydraulicBoundaryDatabaseToDataModel(readHydraulicBoundaryDatabase, readHydraulicLocationConfigurationDatabaseResult.Items.Single(), + AddHydraulicBoundaryDatabaseToDataModel(readHydraulicBoundaryDatabase, readHydraulicLocationConfigurationDatabase, readExcludedLocationsResult.Items.Single()); return true; @@ -132,6 +139,16 @@ } } + private static bool IsValidReadHydraulicLocationConfigurationDatabase(ReadHydraulicLocationConfigurationDatabase readHydraulicLocationConfigurationDatabase) + { + if (readHydraulicLocationConfigurationDatabase.IsScenarioInformationPresent) + { + return readHydraulicLocationConfigurationDatabase.ReadHydraulicLocationConfigurationDatabaseSettings.Count() == 1; + } + + return true; + } + private ReadResult ReadHydraulicBoundaryDatabase() { NotifyProgress(Resources.HydraulicBoundaryDatabaseImporter_ProgressText_Reading_HRD_file, 1, numberOfSteps); @@ -157,10 +174,9 @@ private ReadResult ReadHydraulicLocationConfigurationDatabase(long trackId) { NotifyProgress(Resources.HydraulicBoundaryDatabaseImporter_ProgressText_Reading_HLCD_file, 2, numberOfSteps); - string hlcdFilePath = Path.Combine(Path.GetDirectoryName(FilePath), "hlcd.sqlite"); try { - using (var reader = new HydraulicLocationConfigurationDatabaseReader(hlcdFilePath)) + using (var reader = new HydraulicLocationConfigurationDatabaseReader(GetHlcdFilePath())) { return ReadHydraulicLocationConfigurationDatabase(trackId, reader); } @@ -254,9 +270,19 @@ Log.Error(errorMessage); } + private string GetHlcdFilePath() + { + return Path.Combine(Path.GetDirectoryName(FilePath), "hlcd.sqlite"); + } + private string BuildErrorMessage(string message) { - return new FileReaderErrorMessageBuilder(FilePath).Build( + return BuildErrorMessage(FilePath, message); + } + + private static string BuildErrorMessage(string filePath, string message) + { + return new FileReaderErrorMessageBuilder(filePath).Build( string.Format(Resources.HydraulicBoundaryDatabaseImporter_HandleCriticalFileReadError_Error_0_No_HydraulicBoundaryDatabase_imported, message)); } Index: Ringtoets/Integration/test/Ringtoets.Integration.IO.Test/Importers/HydraulicBoundaryDatabaseImporterTest.cs =================================================================== diff -u -raffab28216d928fc119f636dca96f4b4d742e9c6 -r11ee95784513ed761bee00e2422b061aa3060525 --- Ringtoets/Integration/test/Ringtoets.Integration.IO.Test/Importers/HydraulicBoundaryDatabaseImporterTest.cs (.../HydraulicBoundaryDatabaseImporterTest.cs) (revision affab28216d928fc119f636dca96f4b4d742e9c6) +++ Ringtoets/Integration/test/Ringtoets.Integration.IO.Test/Importers/HydraulicBoundaryDatabaseImporterTest.cs (.../HydraulicBoundaryDatabaseImporterTest.cs) (revision 11ee95784513ed761bee00e2422b061aa3060525) @@ -232,6 +232,34 @@ } [Test] + [TestCase("hlcdWithScenarioInformationNoEntries")] + [TestCase("hlcdWithScenarioInformationMultipleEntries")] + public void Import_ExistingFileAndHlcdWithInvalidNumberOfScenarioInformationEntries_CancelImportWithErrorMessage(string testFolder) + { + // Setup + var mocks = new MockRepository(); + var handler = mocks.StrictMock(); + handler.Stub(h => h.IsConfirmationRequired(null, null)).IgnoreArguments().Return(false); + mocks.ReplayAll(); + + string path = Path.Combine(testDataPath, testFolder, "complete.sqlite"); + string hlcdFilePath = Path.Combine(Path.GetDirectoryName(path), "hlcd.sqlite"); + + var importer = new HydraulicBoundaryDatabaseImporter(new HydraulicBoundaryDatabase(), handler, path); + + // Call + var importSuccessful = true; + Action call = () => importSuccessful = importer.Import(); + + // Assert + string expectedMessage = $"Fout bij het lezen van bestand '{hlcdFilePath}': placeHolder." + + $"{Environment.NewLine}Er is geen hydraulische belastingen database gekoppeld."; + TestHelper.AssertLogMessageIsGenerated(call, expectedMessage, 1); + Assert.IsFalse(importSuccessful); + mocks.VerifyAll(); + } + + [Test] public void Import_ExistingFileWithoutSettings_CancelImportWithErrorMessage() { // Setup @@ -281,7 +309,7 @@ [Test] [TestCase(true)] [TestCase(false)] - public void Import_WhenSuccessful_UpdatesHydraulicBoundaryDatabaseWithImportedData(bool confirmationRequired) + public void Import_WithValidFileAndHlcdWithoutScenarioInformation_UpdatesHydraulicBoundaryDatabaseWithImportedData(bool confirmationRequired) { // Setup var hydraulicBoundaryDatabase = new HydraulicBoundaryDatabase(); @@ -312,6 +340,8 @@ var readHydraulicLocationConfigurationDatabase = (ReadHydraulicLocationConfigurationDatabase) invocation.Arguments[2]; Assert.AreEqual(18, readHydraulicLocationConfigurationDatabase.LocationIdMappings.Count()); + CollectionAssert.IsEmpty(readHydraulicLocationConfigurationDatabase.ReadHydraulicLocationConfigurationDatabaseSettings); + Assert.IsFalse(readHydraulicLocationConfigurationDatabase.IsScenarioInformationPresent); var excludedLocationIds = (IEnumerable) invocation.Arguments[3]; Assert.AreEqual(1, excludedLocationIds.Count()); @@ -330,6 +360,52 @@ } [Test] + public void Import_WithValidFileAndHlcdWithValidScenarioInformation_UpdatesHydraulicBoundaryDatabaseWithImportedData() + { + // Setup + string filePath = Path.Combine(testDataPath, "hlcdWithValidScenarioInformation", "complete.sqlite"); + var hydraulicBoundaryDatabase = new HydraulicBoundaryDatabase(); + + var mocks = new MockRepository(); + var handler = mocks.StrictMock(); + handler.Stub(h => h.IsConfirmationRequired(Arg.Is.Same(hydraulicBoundaryDatabase), + Arg.Is.NotNull)) + .WhenCalled(invocation => + { + AssertReadHydraulicBoundaryDatabase((ReadHydraulicBoundaryDatabase)invocation.Arguments[1]); + }) + .Return(false); + handler.Expect(h => h.Update(Arg.Is.Same(hydraulicBoundaryDatabase), + Arg.Is.NotNull, + Arg.Is.NotNull, + Arg>.Is.NotNull, + Arg.Is.Same(filePath))) + .WhenCalled(invocation => + { + AssertReadHydraulicBoundaryDatabase((ReadHydraulicBoundaryDatabase)invocation.Arguments[1]); + + var readHydraulicLocationConfigurationDatabase = (ReadHydraulicLocationConfigurationDatabase)invocation.Arguments[2]; + Assert.AreEqual(18, readHydraulicLocationConfigurationDatabase.LocationIdMappings.Count()); + Assert.AreEqual(1, readHydraulicLocationConfigurationDatabase.ReadHydraulicLocationConfigurationDatabaseSettings.Count()); + Assert.IsTrue(readHydraulicLocationConfigurationDatabase.IsScenarioInformationPresent); + + var excludedLocationIds = (IEnumerable)invocation.Arguments[3]; + Assert.AreEqual(0, excludedLocationIds.Count()); + }) + .Return(Enumerable.Empty()); + mocks.ReplayAll(); + + var importer = new HydraulicBoundaryDatabaseImporter(hydraulicBoundaryDatabase, handler, filePath); + + // Call + bool importResult = importer.Import(); + + // Assert + Assert.IsTrue(importResult); + mocks.VerifyAll(); + } + + [Test] public void Import_ValidFiles_ExpectedProgressNotifications() { // Setup Index: Ringtoets/Integration/test/Ringtoets.Integration.IO.Test/test-data/HydraulicBoundaryDatabaseImporter/hlcdWithScenarioInformationMultipleEntries/HLCD.sqlite =================================================================== diff -u Binary files differ Index: Ringtoets/Integration/test/Ringtoets.Integration.IO.Test/test-data/HydraulicBoundaryDatabaseImporter/hlcdWithScenarioInformationMultipleEntries/complete.config.sqlite =================================================================== diff -u Binary files differ Index: Ringtoets/Integration/test/Ringtoets.Integration.IO.Test/test-data/HydraulicBoundaryDatabaseImporter/hlcdWithScenarioInformationMultipleEntries/complete.sqlite =================================================================== diff -u Binary files differ Index: Ringtoets/Integration/test/Ringtoets.Integration.IO.Test/test-data/HydraulicBoundaryDatabaseImporter/hlcdWithScenarioInformationNoEntries/HLCD.sqlite =================================================================== diff -u Binary files differ Index: Ringtoets/Integration/test/Ringtoets.Integration.IO.Test/test-data/HydraulicBoundaryDatabaseImporter/hlcdWithScenarioInformationNoEntries/complete.config.sqlite =================================================================== diff -u Binary files differ Index: Ringtoets/Integration/test/Ringtoets.Integration.IO.Test/test-data/HydraulicBoundaryDatabaseImporter/hlcdWithScenarioInformationNoEntries/complete.sqlite =================================================================== diff -u Binary files differ Index: Ringtoets/Integration/test/Ringtoets.Integration.IO.Test/test-data/HydraulicBoundaryDatabaseImporter/hlcdWithValidScenarioInformation/HLCD.sqlite =================================================================== diff -u Binary files differ Index: Ringtoets/Integration/test/Ringtoets.Integration.IO.Test/test-data/HydraulicBoundaryDatabaseImporter/hlcdWithValidScenarioInformation/complete.config.sqlite =================================================================== diff -u Binary files differ Index: Ringtoets/Integration/test/Ringtoets.Integration.IO.Test/test-data/HydraulicBoundaryDatabaseImporter/hlcdWithValidScenarioInformation/complete.sqlite =================================================================== diff -u Binary files differ Index: Ringtoets/Integration/test/Ringtoets.Integration.IO.Test/test-data/HydraulicBoundaryDatabaseImporter/hlcdWithoutScenarioInformation/HLCD.sqlite =================================================================== diff -u Binary files differ Index: Ringtoets/Integration/test/Ringtoets.Integration.IO.Test/test-data/HydraulicBoundaryDatabaseImporter/hlcdWithoutScenarioInformation/complete.config.sqlite =================================================================== diff -u Binary files differ Index: Ringtoets/Integration/test/Ringtoets.Integration.IO.Test/test-data/HydraulicBoundaryDatabaseImporter/hlcdWithoutScenarioInformation/complete.sqlite =================================================================== diff -u Binary files differ