Index: Riskeer/Storage/src/Riskeer.Storage.Core/StorageSqLite.cs =================================================================== diff -u -rbe7740ca6f6cca451c34a543dd69fd0a36824a8e -rd38a7c2f4b9cf36a8af8b0214a8b763700ceb25e --- Riskeer/Storage/src/Riskeer.Storage.Core/StorageSqLite.cs (.../StorageSqLite.cs) (revision be7740ca6f6cca451c34a543dd69fd0a36824a8e) +++ Riskeer/Storage/src/Riskeer.Storage.Core/StorageSqLite.cs (.../StorageSqLite.cs) (revision d38a7c2f4b9cf36a8af8b0214a8b763700ceb25e) @@ -124,6 +124,10 @@ { throw CreateStorageReaderException(databaseFilePath, Resources.StorageSqLite_LoadProject_Invalid_Riskeer_database_file, exception); } + catch (EntityReadException exception) + { + throw CreateStorageReaderException(databaseFilePath, exception.Message, exception); + } catch (SystemException exception) { throw CreateStorageReaderException(databaseFilePath, Resources.StorageSqLite_LoadProject_Invalid_Riskeer_database_file, exception); Index: Riskeer/Storage/test/Riskeer.Storage.Core.Test/StorageSqLiteTest.cs =================================================================== diff -u -rdee4429e5ee796ce93e361a6ef00b36410df231e -rd38a7c2f4b9cf36a8af8b0214a8b763700ceb25e --- Riskeer/Storage/test/Riskeer.Storage.Core.Test/StorageSqLiteTest.cs (.../StorageSqLiteTest.cs) (revision dee4429e5ee796ce93e361a6ef00b36410df231e) +++ Riskeer/Storage/test/Riskeer.Storage.Core.Test/StorageSqLiteTest.cs (.../StorageSqLiteTest.cs) (revision d38a7c2f4b9cf36a8af8b0214a8b763700ceb25e) @@ -26,11 +26,13 @@ using Core.Common.Base.Data; using Core.Common.Base.Storage; using Core.Common.TestUtil; +using Core.Common.Util.Extensions; using NUnit.Framework; using Rhino.Mocks; using Riskeer.Common.Data.AssessmentSection; using Riskeer.Common.Util; using Riskeer.Integration.Data; +using Riskeer.Storage.Core.Exceptions; using Riskeer.Storage.Core.TestUtil; namespace Riskeer.Storage.Core.Test @@ -255,6 +257,35 @@ } [Test] + public void LoadProject_ReadProjectThrowsEntityReadException_ThrowsStorageException() + { + // Setup + string tempProjectFilePath = Path.Combine(workingDirectory, nameof(LoadProject_ReadProjectThrowsEntityReadException_ThrowsStorageException)); + var storage = new StorageSqLite(); + var mockRepository = new MockRepository(); + var project = mockRepository.StrictMock(CreateAssessmentSection()); + + // Precondition + void Precondition() + { + SqLiteDatabaseHelper.CreateValidProjectDatabase(tempProjectFilePath, project); + SqLiteDatabaseHelper.SetInvalidNumberOfAssessmentSectionEntities(tempProjectFilePath); + } + Assert.DoesNotThrow(Precondition); + + // Call + void Call() => storage.LoadProject(tempProjectFilePath); + + // Assert + var exception = Assert.Throws(Call); + Exception innerException = exception.InnerException; + Assert.IsInstanceOf(innerException); + + var expectedMessage = $"Fout bij het lezen van bestand '{tempProjectFilePath}': {innerException.Message.FirstToLower()}"; + Assert.AreEqual(expectedMessage, exception.Message); + } + + [Test] public void LoadProject_ValidDatabase_ReturnsProject() { // Setup Index: Riskeer/Storage/test/Riskeer.Storage.Core.TestUtil/SqLiteDatabaseHelper.cs =================================================================== diff -u -rda1df87d94dcc61aa26d5f033c6bf579c2249cdd -rd38a7c2f4b9cf36a8af8b0214a8b763700ceb25e --- Riskeer/Storage/test/Riskeer.Storage.Core.TestUtil/SqLiteDatabaseHelper.cs (.../SqLiteDatabaseHelper.cs) (revision da1df87d94dcc61aa26d5f033c6bf579c2249cdd) +++ Riskeer/Storage/test/Riskeer.Storage.Core.TestUtil/SqLiteDatabaseHelper.cs (.../SqLiteDatabaseHelper.cs) (revision d38a7c2f4b9cf36a8af8b0214a8b763700ceb25e) @@ -81,6 +81,18 @@ } /// + /// Configures the AssessmentSectionEntity table to an invalid state. + /// + /// The database file path. + /// Thrown when + /// is null or whitespace. + public static void SetInvalidNumberOfAssessmentSectionEntities(string databaseFilePath) + { + string removeAssessmentSectionEntityRowsCommand = GetRemoveAllAssessmentSectionEntityRowsCommandText(); + PerformCommandOnDatabase(databaseFilePath, removeAssessmentSectionEntityRowsCommand); + } + + /// /// Creates a new Sqlite database file with the structure defined in . /// /// Path to database file. @@ -178,5 +190,10 @@ return "INSERT INTO VersionEntity (Version, Timestamp, FingerPrint) " + $"VALUES (\"{databaseVersion}\", '2016-08-10 10:55:48', 'QWERTY')"; } + + private static string GetRemoveAllAssessmentSectionEntityRowsCommandText() + { + return "DELETE FROM AssessmentSectionEntity; "; + } } } \ No newline at end of file