public void GivenConsole_WhenMigrateCalledWithArguments_MigratesToNewVersion()
        {
            // Given
            string sourceFilePath  = ProjectMigrationTestHelper.GetOutdatedSupportedProjectFilePath();
            string targetFilePath  = TestHelper.GetScratchPadPath($"{nameof(RiskeerMigrationConsoleTest)}.{nameof(GivenConsole_WhenMigrateCalledWithArguments_MigratesToNewVersion)}");
            var    console         = new RiskeerMigrationConsole();
            string expectedVersion = ProjectVersionHelper.GetCurrentDatabaseVersion();

            using (new FileDisposeHelper(targetFilePath))
            {
                using (var consoleOutput = new ConsoleOutput())
                {
                    // When
                    console.ExecuteConsoleTool(new[]
                    {
                        sourceFilePath,
                        targetFilePath
                    });

                    // Then
                    string expected = Environment.NewLine
                                      + $"Het projectbestand '{sourceFilePath}' is succesvol gemigreerd naar '{targetFilePath}' (versie {expectedVersion})."
                                      + Environment.NewLine;
                    string consoleText = consoleOutput.GetConsoleOutput();
                    Assert.AreEqual(expected, consoleText);

                    var toVersionedFile = new ProjectVersionedFile(targetFilePath);
                    Assert.AreEqual(expectedVersion, toVersionedFile.GetVersion());
                }
            }

            Assert.AreEqual(ErrorCode.ErrorSuccess, environmentControl.ErrorCodeCalled);
        }
Beispiel #2
0
        public void ShouldMigrate_OutdatedProjectUnsupported_ReturnsNotSupportedAndGeneratesLogMessages()
        {
            // Setup
            var mocks         = new MockRepository();
            var inquiryHelper = mocks.Stub <IInquiryHelper>();

            mocks.ReplayAll();

            string sourceFilePath = ProjectMigrationTestHelper.GetOutdatedUnSupportedProjectFilePath();
            var    versionedFile  = new ProjectVersionedFile(sourceFilePath);
            string fileVersion    = versionedFile.GetVersion();

            var migrator      = new ProjectMigrator(inquiryHelper);
            var shouldMigrate = MigrationRequired.Yes;

            // Call
            void Call() => shouldMigrate = migrator.ShouldMigrate(sourceFilePath);

            // Assert
            var expectedMessage = $"Het migreren van een projectbestand met versie '{fileVersion}' naar versie '{currentDatabaseVersion}' is niet ondersteund.";

            TestHelper.AssertLogMessageIsGenerated(Call, expectedMessage);
            Assert.AreEqual(MigrationRequired.NotSupported, shouldMigrate);

            mocks.VerifyAll();
        }
Beispiel #3
0
        public void Migrate_ValidFilesWithLogFile_SavesFileAtNewLocation()
        {
            // Setup
            const string newVersion        = "17.1";
            string       sourceFilePath    = ProjectMigrationTestHelper.GetOutdatedSupportedProjectFilePath();
            var          fromVersionedFile = new ProjectVersionedFile(sourceFilePath);

            string targetFilePath = TestHelper.GetScratchPadPath(nameof(Migrate_ValidFilesWithLogFile_SavesFileAtNewLocation));
            string logFilePath    = TestHelper.GetScratchPadPath(string.Concat(nameof(Migrate_ValidFilesWithLogFile_SavesFileAtNewLocation), ".log"));
            var    migrator       = new ProjectFileMigrator
            {
                LogPath = logFilePath
            };

            using (new FileDisposeHelper(logFilePath))
                using (new FileDisposeHelper(targetFilePath))
                {
                    // Call
                    migrator.Migrate(fromVersionedFile, newVersion, targetFilePath);

                    // Assert
                    var toVersionedFile = new ProjectVersionedFile(targetFilePath);
                    Assert.AreEqual(newVersion, toVersionedFile.GetVersion());
                }
        }
Beispiel #4
0
        public void Migrate_TargetFileNotWritable_ThrowsCriticalDatabaseMigrationException()
        {
            // Setup
            const string newVersion        = "17.1";
            string       sourceFilePath    = ProjectMigrationTestHelper.GetOutdatedSupportedProjectFilePath();
            var          fromVersionedFile = new ProjectVersionedFile(sourceFilePath);

            string targetFilePath = TestHelper.GetScratchPadPath(nameof(Migrate_TargetFileNotWritable_ThrowsCriticalDatabaseMigrationException));
            var    migrator       = new ProjectFileMigrator();

            using (new FileDisposeHelper(targetFilePath))
            {
                FileAttributes attributes = File.GetAttributes(targetFilePath);
                File.SetAttributes(targetFilePath, attributes | FileAttributes.ReadOnly);

                try
                {
                    // Call
                    TestDelegate call = () => migrator.Migrate(fromVersionedFile, newVersion, targetFilePath);

                    // Assert
                    var exception = Assert.Throws <CriticalMigrationException>(call);
                    StringAssert.StartsWith("Het gemigreerde projectbestand is aangemaakt op '",
                                            exception.Message);
                    StringAssert.EndsWith($"', maar er is een onverwachte fout opgetreden tijdens het verplaatsen naar '{targetFilePath}'.",
                                          exception.Message);
                    Assert.IsInstanceOf <UnauthorizedAccessException>(exception.InnerException);
                }
                finally
                {
                    File.SetAttributes(targetFilePath, attributes);
                }
            }
        }
        public void GivenConsole_WhenMigrateCalledUnableToSaveTarget_ThenExitWithErrorCode()
        {
            // Given
            string sourceFilePath = ProjectMigrationTestHelper.GetOutdatedSupportedProjectFilePath();
            string targetFilePath = TestHelper.GetScratchPadPath($"{nameof(RiskeerMigrationConsoleTest)}.{nameof(GivenConsole_WhenMigrateCalledUnableToSaveTarget_ThenExitWithErrorCode)}");

            var console = new RiskeerMigrationConsole();

            using (var fileDisposeHelper = new FileDisposeHelper(targetFilePath))
                using (var consoleOutput = new ConsoleOutput())
                {
                    fileDisposeHelper.LockFiles();

                    // When
                    console.ExecuteConsoleTool(new[]
                    {
                        sourceFilePath,
                        targetFilePath
                    });

                    // Then
                    string consoleText = consoleOutput.GetConsoleOutput();
                    StringAssert.StartsWith(Environment.NewLine + "Het gemigreerde projectbestand is aangemaakt op '",
                                            consoleText);
                    StringAssert.EndsWith($"', maar er is een onverwachte fout opgetreden tijdens het verplaatsen naar '{targetFilePath}'."
                                          + Environment.NewLine
                                          + "Het besturingssysteem geeft de volgende melding: "
                                          + Environment.NewLine
                                          + $"The process cannot access the file '{targetFilePath}' because it is being used by another process."
                                          + Environment.NewLine + Environment.NewLine
                                          + GetConsoleFullDescription(), consoleText);
                    Assert.AreEqual(ErrorCode.ErrorBadCommand, environmentControl.ErrorCodeCalled);
                }
        }
Beispiel #6
0
        public void NeedsMigrate_NeedsMigrate_ReturnsTrue()
        {
            // Setup
            string sourceFilePath = ProjectMigrationTestHelper.GetOutdatedSupportedProjectFilePath();
            var    versionedFile  = new ProjectVersionedFile(sourceFilePath);
            var    migrator       = new ProjectFileMigrator();

            // Call
            bool needsMigrate = migrator.NeedsMigrate(versionedFile, "17.1");

            // Assert
            Assert.IsTrue(needsMigrate);
        }
        private static IEnumerable <TestCaseData> ProjectFilesToMigrate()
        {
            string unsupportedProjectFilePath = ProjectMigrationTestHelper.GetOutdatedUnSupportedProjectFilePath();
            var    unsupportedVersionedFile   = new ProjectVersionedFile(unsupportedProjectFilePath);
            string unsupportedVersion         = unsupportedVersionedFile.GetVersion();

            string supportedProjectFilePath = ProjectMigrationTestHelper.GetOutdatedSupportedProjectFilePath();
            var    supportedVersionedFile   = new ProjectVersionedFile(supportedProjectFilePath);
            string supportedVersion         = supportedVersionedFile.GetVersion();

            yield return(new TestCaseData(unsupportedProjectFilePath, unsupportedVersion, false).SetName("UnsupportedProjectVersion"));

            yield return(new TestCaseData(supportedProjectFilePath, supportedVersion, true).SetName("SupportedProjectVersion"));
        }
Beispiel #8
0
        public void Migrate_UnsupportedVersion_ThrowsCriticalDatabaseMigrationException()
        {
            // Setup
            string sourceFilePath    = ProjectMigrationTestHelper.GetOutdatedUnSupportedProjectFilePath();
            var    fromVersionedFile = new ProjectVersionedFile(sourceFilePath);

            string targetFilePath = TestHelper.GetScratchPadPath(nameof(Migrate_UnsupportedVersion_ThrowsCriticalDatabaseMigrationException));
            var    migrator       = new ProjectFileMigrator();

            // Call
            TestDelegate call = () => migrator.Migrate(fromVersionedFile, "17.1", targetFilePath);

            // Assert
            string message = Assert.Throws <CriticalMigrationException>(call).Message;

            Assert.AreEqual("Het migreren van een projectbestand met versie '8' naar versie '17.1' is niet ondersteund.", message);
        }
Beispiel #9
0
        public void Migrate_TargetFilePathEqualsSourcePath_ThrowsCriticalDatabaseMigrationException()
        {
            // Setup
            const string newVersion        = "17.1";
            string       sourceFilePath    = ProjectMigrationTestHelper.GetOutdatedSupportedProjectFilePath();
            var          fromVersionedFile = new ProjectVersionedFile(sourceFilePath);
            var          migrator          = new ProjectFileMigrator();

            // Call
            TestDelegate call = () => migrator.Migrate(fromVersionedFile, newVersion, sourceFilePath);

            // Assert
            var exception = Assert.Throws <CriticalMigrationException>(call);

            Assert.AreEqual("Het doelprojectpad moet anders zijn dan het bronprojectpad.",
                            exception.Message);
        }
Beispiel #10
0
        public void Migrate_UnableToSaveAtTargetFilePath_MigrationFailsAndLogsError()
        {
            // Setup
            string sourceFilePath = ProjectMigrationTestHelper.GetOutdatedSupportedProjectFilePath();
            string targetFile     = $"{nameof(ProjectMigratorTest)}." +
                                    $"{nameof(Migrate_UnableToSaveAtTargetFilePath_MigrationFailsAndLogsError)}.rtd";
            string targetFilePath = Path.Combine(TestHelper.GetScratchPadPath(), testDirectory, targetFile);

            var mocks         = new MockRepository();
            var inquiryHelper = mocks.Stub <IInquiryHelper>();

            mocks.ReplayAll();

            var logDirectory = $"{nameof(Migrate_UnableToSaveAtTargetFilePath_MigrationFailsAndLogsError)}_log";

            using (new DirectoryDisposeHelper(TestHelper.GetScratchPadPath(), logDirectory))
                using (new UseCustomSettingsHelper(new TestSettingsHelper
                {
                    TempPath = TestHelper.GetScratchPadPath(logDirectory)
                }))
                    using (var fileDisposeHelper = new FileDisposeHelper(targetFilePath))
                    {
                        var migrator = new ProjectMigrator(inquiryHelper);

                        fileDisposeHelper.LockFiles();

                        var migrationSuccessful = true;

                        // Call
                        void Call() => migrationSuccessful = migrator.Migrate(sourceFilePath, targetFilePath);

                        // Assert
                        TestHelper.AssertLogMessages(Call, messages =>
                        {
                            string[] msgs = messages.ToArray();
                            Assert.AreEqual(1, msgs.Length);
                            StringAssert.StartsWith($"Het migreren van het projectbestand '{sourceFilePath}' is mislukt: ", msgs[0]);
                        });
                        Assert.IsFalse(migrationSuccessful);

                        string logPath = Path.Combine(TestHelper.GetScratchPadPath(), logDirectory, "RiskeerMigrationLog.sqlite");
                        Assert.IsFalse(File.Exists(logPath));
                    }

            mocks.VerifyAll();
        }
Beispiel #11
0
        public void Migrate_MigrationLogDatabaseInUse_MigrationFailsAndLogsError()
        {
            // Setup
            string sourceFilePath = ProjectMigrationTestHelper.GetOutdatedSupportedProjectFilePath();
            string targetFile     = $"{nameof(ProjectMigratorTest)}." +
                                    $"{nameof(Migrate_MigrationLogDatabaseInUse_MigrationFailsAndLogsError)}.rtd";
            string targetFilePath = Path.Combine(TestHelper.GetScratchPadPath(), testDirectory, targetFile);

            var mocks         = new MockRepository();
            var inquiryHelper = mocks.Stub <IInquiryHelper>();

            mocks.ReplayAll();

            var logDirectory = $"{nameof(Migrate_MigrationLogDatabaseInUse_MigrationFailsAndLogsError)}_log";

            string logPath = Path.Combine(TestHelper.GetScratchPadPath(), logDirectory, "RiskeerMigrationLog.sqlite");

            using (new DirectoryDisposeHelper(TestHelper.GetScratchPadPath(), logDirectory))
                using (new UseCustomSettingsHelper(new TestSettingsHelper
                {
                    TempPath = TestHelper.GetScratchPadPath(logDirectory)
                }))
                    using (var fileDisposeHelper = new FileDisposeHelper(logPath))
                    {
                        var migrator = new ProjectMigrator(inquiryHelper);
                        fileDisposeHelper.LockFiles();

                        var migrationSuccessful = true;

                        // Call
                        void Call() => migrationSuccessful = migrator.Migrate(sourceFilePath, targetFilePath);

                        // Assert
                        var logMessage = Tuple.Create(
                            $"Het is niet mogelijk om het Riskeer logbestand '{logPath}' aan te maken.",
                            LogLevelConstant.Error);
                        TestHelper.AssertLogMessageWithLevelIsGenerated(Call, logMessage);
                        Assert.IsFalse(migrationSuccessful);

                        Assert.IsTrue(File.Exists(logPath));
                    }

            mocks.VerifyAll();
        }
Beispiel #12
0
        public void ShouldMigrate_LatestProjectVersion_ReturnsFalse()
        {
            // Setup
            var mocks         = new MockRepository();
            var inquiryHelper = mocks.Stub <IInquiryHelper>();

            mocks.ReplayAll();

            string sourceFilePath = ProjectMigrationTestHelper.GetLatestProjectFilePath();

            var migrator = new ProjectMigrator(inquiryHelper);

            // Call
            MigrationRequired shouldMigrate = migrator.ShouldMigrate(sourceFilePath);

            // Assert
            Assert.AreEqual(MigrationRequired.No, shouldMigrate);
            mocks.VerifyAll();
        }
Beispiel #13
0
        public void Migrate_TargetPathNull_ThrowsArgumentNullException()
        {
            // Setup
            var mocks         = new MockRepository();
            var inquiryHelper = mocks.Stub <IInquiryHelper>();

            mocks.ReplayAll();

            var migrator = new ProjectMigrator(inquiryHelper);

            string sourceFilePath = ProjectMigrationTestHelper.GetOutdatedSupportedProjectFilePath();

            // Call
            void Call() => migrator.Migrate(sourceFilePath, null);

            // Assert
            var exception = Assert.Throws <ArgumentNullException>(Call);

            Assert.AreEqual("targetFilePath", exception.ParamName);
        }
Beispiel #14
0
        public void ShouldMigrate_OutdatedProjectSupported_AskMigrationConfirmationAndReturnBasedOnConfirmation(bool confirmContinuation)
        {
            // Setup
            string question = "Het project dat u wilt openen is opgeslagen in het formaat van een eerdere versie van Riskeer of Ringtoets." +
                              $"{Environment.NewLine}{Environment.NewLine}" +
                              $"Weet u zeker dat u het bestand wilt migreren naar het formaat van uw huidige Riskeerversie ({currentDatabaseVersion})?";
            var mocks         = new MockRepository();
            var inquiryHelper = mocks.StrictMock <IInquiryHelper>();

            inquiryHelper.Expect(h => h.InquireContinuation(question)).Return(confirmContinuation);
            mocks.ReplayAll();

            string sourceFilePath = ProjectMigrationTestHelper.GetOutdatedSupportedProjectFilePath();

            var migrator = new ProjectMigrator(inquiryHelper);

            // Call
            var shouldMigrate = MigrationRequired.No;

            void Call() => shouldMigrate = migrator.ShouldMigrate(sourceFilePath);

            // Assert
            var expectedLogMessages = new List <Tuple <string, LogLevelConstant> >();

            if (!confirmContinuation)
            {
                expectedLogMessages.Add(Tuple.Create($"Het migreren van het projectbestand '{sourceFilePath}' is geannuleerd.",
                                                     LogLevelConstant.Warn));
            }

            TestHelper.AssertLogMessagesWithLevelAreGenerated(Call, expectedLogMessages, expectedLogMessages.Count);

            MigrationRequired expectedResult = confirmContinuation ? MigrationRequired.Yes : MigrationRequired.Aborted;

            Assert.AreEqual(expectedResult, shouldMigrate);

            mocks.VerifyAll();
        }
Beispiel #15
0
        public void Migrate_InvalidTargetFilePath_ThrowsArgumentException(string invalidFilePath)
        {
            // Setup
            var mocks         = new MockRepository();
            var inquiryHelper = mocks.Stub <IInquiryHelper>();

            mocks.ReplayAll();

            var migrator = new ProjectMigrator(inquiryHelper);

            string sourceFilePath = ProjectMigrationTestHelper.GetOutdatedSupportedProjectFilePath();

            // Call
            void Call() => migrator.Migrate(sourceFilePath, invalidFilePath);

            // Assert
            var exception = TestHelper.AssertThrowsArgumentExceptionAndTestMessage <ArgumentException>(
                Call, "Doelprojectpad moet een geldig projectpad zijn.");

            Assert.AreEqual("targetFilePath", exception.ParamName);

            mocks.VerifyAll();
        }
Beispiel #16
0
        public void Migrate_ValidFilesWithNonExistingLogFile_ThrowsCriticalDatabaseMigrationException()
        {
            // Setup
            const string newVersion        = "17.1";
            string       sourceFilePath    = ProjectMigrationTestHelper.GetOutdatedSupportedProjectFilePath();
            var          fromVersionedFile = new ProjectVersionedFile(sourceFilePath);

            string targetFilePath = TestHelper.GetScratchPadPath(nameof(Migrate_ValidFilesWithNonExistingLogFile_ThrowsCriticalDatabaseMigrationException));
            string logFilePath    = TestHelper.GetScratchPadPath(string.Concat(nameof(Migrate_ValidFilesWithNonExistingLogFile_ThrowsCriticalDatabaseMigrationException), ".log"));
            var    migrator       = new ProjectFileMigrator
            {
                LogPath = logFilePath
            };

            using (new FileDisposeHelper(targetFilePath))
            {
                // Call
                TestDelegate call = () => migrator.Migrate(fromVersionedFile, newVersion, targetFilePath);

                // Assert
                var exception = Assert.Throws <CriticalMigrationException>(call);
                Assert.IsInstanceOf <SQLiteException>(exception.InnerException);
            }
        }
Beispiel #17
0
        public void GivenMigratorAndSupportedFile_WhenValidTargetLocationGiven_ThenFileSuccessfullyMigrates()
        {
            // Given
            string sourceFilePath = ProjectMigrationTestHelper.GetOutdatedSupportedProjectFilePath();

            string targetFile = $"{nameof(ProjectMigratorTest)}." +
                                $"{nameof(GivenMigratorAndSupportedFile_WhenValidTargetLocationGiven_ThenFileSuccessfullyMigrates)}.rtd";
            string targetFilePath = Path.Combine(TestHelper.GetScratchPadPath(), testDirectory, targetFile);

            var mocks         = new MockRepository();
            var inquiryHelper = mocks.Stub <IInquiryHelper>();

            mocks.ReplayAll();

            var logDirectory = $"{nameof(GivenMigratorAndSupportedFile_WhenValidTargetLocationGiven_ThenFileSuccessfullyMigrates)}_log";

            using (new DirectoryDisposeHelper(TestHelper.GetScratchPadPath(), logDirectory))
                using (new UseCustomSettingsHelper(new TestSettingsHelper
                {
                    TempPath = TestHelper.GetScratchPadPath(logDirectory)
                }))
                {
                    var migrator = new ProjectMigrator(inquiryHelper);

                    var migrationSuccessful = false;

                    // When
                    void Call() => migrationSuccessful = migrator.Migrate(sourceFilePath, targetFilePath);

                    // Then
                    string expectedMessage = $"Het projectbestand '{sourceFilePath}' is succesvol gemigreerd naar '{targetFilePath}' " +
                                             $"(versie {currentDatabaseVersion}).";
                    var migrationLog = new StringBuilder();
                    migrationLog.AppendLine("Door de migratie is het project aangepast. Bekijk het migratierapport door op details te klikken.");
                    migrationLog.AppendLine("Gevolgen van de migratie van versie 16.4 naar versie 17.1:");
                    migrationLog.AppendLine("* Alle berekende resultaten zijn verwijderd.");
                    migrationLog.AppendLine("* Traject: 'assessmentSection'");
                    migrationLog.AppendLine("  + Faalmechanisme: 'Grasbekleding erosie kruin en binnentalud'");
                    migrationLog.AppendLine("    - De naam van dijkprofiel '1' is veranderd naar '102' en wordt ook gebruikt als ID.");
                    migrationLog.AppendLine("    - De naam van dijkprofiel '10' is veranderd naar '104' en wordt ook gebruikt als ID.");
                    migrationLog.AppendLine("Gevolgen van de migratie van versie 17.1 naar versie 17.2:");
                    migrationLog.AppendLine("* Traject: 'assessmentSection'");
                    migrationLog.AppendLine("  + De omgevingswaarde is gelijk gesteld aan 1/30000.");
                    migrationLog.AppendLine("  + De signaleringsparameter is gelijk gesteld aan 1/30000 (voorheen de waarde van de norm).");
                    migrationLog.AppendLine("  + De norm van het traject is gelijk gesteld aan de signaleringsparameter.");
                    migrationLog.AppendLine("  + Faalmechanisme: 'Hoogte kunstwerk'");
                    migrationLog.AppendLine("    - Het ID van kunstwerk 'Id' is veranderd naar 'Id00003'.");
                    migrationLog.AppendLine("    - Het ID van voorlandprofiel 'FP' is veranderd naar 'FP7'.");
                    migrationLog.AppendLine("  + Faalmechanisme: 'Betrouwbaarheid sluiting kunstwerk'");
                    migrationLog.AppendLine("    - Het ID van kunstwerk 'id' is veranderd naar 'id00002'.");
                    migrationLog.AppendLine("    - Het ID van voorlandprofiel 'FP' is veranderd naar 'FP8'.");
                    migrationLog.AppendLine("  + Faalmechanisme: 'Golfklappen op asfaltbekleding'");
                    migrationLog.AppendLine("    - Het ID van voorlandprofiel 'FP' is veranderd naar 'FP9'.");
                    migrationLog.AppendLine("  + Faalmechanisme: 'Grasbekleding erosie buitentalud'");
                    migrationLog.AppendLine("    - Het ID van voorlandprofiel 'FP' is veranderd naar 'FP10'.");
                    migrationLog.AppendLine("  + Faalmechanisme: 'Stabiliteit steenzetting'");
                    migrationLog.AppendLine("    - Het ID van voorlandprofiel 'FP' is veranderd naar 'FP11'.");
                    migrationLog.AppendLine("  + Faalmechanisme: 'Sterkte en stabiliteit puntconstructies'");
                    migrationLog.AppendLine("    - Het ID van kunstwerk 'anId' is veranderd naar 'anId000000002'.");
                    migrationLog.AppendLine("    - Het ID van voorlandprofiel 'FP' is veranderd naar 'FP12'.");
                    migrationLog.AppendLine("* Traject: 'Demo traject'");
                    migrationLog.AppendLine("  + De omgevingswaarde is gelijk gesteld aan 1/1000.");
                    migrationLog.AppendLine("  + De signaleringsparameter is gelijk gesteld aan 1/30000 (voorheen de waarde van de norm).");
                    migrationLog.AppendLine("  + De norm van het traject is gelijk gesteld aan de signaleringsparameter.");
                    migrationLog.AppendLine("Gevolgen van de migratie van versie 17.2 naar versie 17.3:");
                    migrationLog.AppendLine("* Geen aanpassingen.");
                    migrationLog.AppendLine("Gevolgen van de migratie van versie 17.3 naar versie 18.1:");
                    migrationLog.AppendLine("* Traject: 'assessmentSection'");
                    migrationLog.AppendLine("  + Faalmechanisme: 'Piping'");
                    migrationLog.AppendLine("    - De waarde '3.2' voor de verschuiving van parameter 'Verzadigd gewicht' van ondergrondlaag 'HotPinkLayer' is ongeldig en is veranderd naar NaN.");
                    migrationLog.AppendLine("  + Faalmechanisme: 'Sterkte en stabiliteit langsconstructies'");
                    migrationLog.AppendLine("    - Alle resultaten voor de toets op maat van dit faalmechanisme konden niet worden omgezet naar een geldig resultaat en zijn verwijderd.");
                    migrationLog.AppendLine("  + Faalmechanisme: 'Technische innovaties'");
                    migrationLog.AppendLine("    - Alle resultaten voor de toets op maat van dit faalmechanisme konden niet worden omgezet naar een geldig resultaat en zijn verwijderd.");
                    migrationLog.AppendLine("  + Faalmechanisme: 'Wateroverdruk bij asfaltbekleding'");
                    migrationLog.AppendLine("    - Alle resultaten voor de toets op maat van dit faalmechanisme konden niet worden omgezet naar een geldig resultaat en zijn verwijderd.");
                    migrationLog.AppendLine("  + Faalmechanisme: 'Betrouwbaarheid sluiting kunstwerk'");
                    migrationLog.AppendLine("    - De waarde van '0' van parameter 'Aantal identieke doorstroomopeningen' van berekening 'Nieuwe berekening' is ongeldig en is veranderd naar 1.");
                    migrationLog.AppendLine("  + Faalmechanisme: 'Macrostabiliteit buitenwaarts'");
                    migrationLog.AppendLine("    - Alle resultaten voor de toets op maat van dit faalmechanisme konden niet worden omgezet naar een geldig resultaat en zijn verwijderd.");
                    migrationLog.AppendLine("  + Faalmechanisme: 'Golfklappen op asfaltbekleding'");
                    migrationLog.AppendLine("    - Alle resultaten voor de gedetailleerde toets van dit faalmechanisme konden niet worden omgezet naar een geldig resultaat en zijn verwijderd.");
                    migrationLog.AppendLine("    - Alle resultaten voor de toets op maat van dit faalmechanisme konden niet worden omgezet naar een geldig resultaat en zijn verwijderd.");
                    migrationLog.AppendLine("  + Faalmechanisme: 'Grasbekleding erosie buitentalud'");
                    migrationLog.AppendLine("    - Alle resultaten voor de gedetailleerde toets van dit faalmechanisme konden niet worden omgezet naar een geldig resultaat en zijn verwijderd.");
                    migrationLog.AppendLine("    - Alle resultaten voor de toets op maat van dit faalmechanisme konden niet worden omgezet naar een geldig resultaat en zijn verwijderd.");
                    migrationLog.AppendLine("  + Faalmechanisme: 'Grasbekleding afschuiven binnentalud'");
                    migrationLog.AppendLine("    - Alle resultaten voor de gedetailleerde toets van dit faalmechanisme konden niet worden omgezet naar een geldig resultaat en zijn verwijderd.");
                    migrationLog.AppendLine("    - Alle resultaten voor de toets op maat van dit faalmechanisme konden niet worden omgezet naar een geldig resultaat en zijn verwijderd.");
                    migrationLog.AppendLine("  + Faalmechanisme: 'Grasbekleding afschuiven buitentalud'");
                    migrationLog.AppendLine("    - Alle resultaten voor de gedetailleerde toets van dit faalmechanisme konden niet worden omgezet naar een geldig resultaat en zijn verwijderd.");
                    migrationLog.AppendLine("    - Alle resultaten voor de toets op maat van dit faalmechanisme konden niet worden omgezet naar een geldig resultaat en zijn verwijderd.");
                    migrationLog.AppendLine("  + Faalmechanisme: 'Microstabiliteit'");
                    migrationLog.AppendLine("    - Alle resultaten voor de gedetailleerde toets van dit faalmechanisme konden niet worden omgezet naar een geldig resultaat en zijn verwijderd.");
                    migrationLog.AppendLine("    - Alle resultaten voor de toets op maat van dit faalmechanisme konden niet worden omgezet naar een geldig resultaat en zijn verwijderd.");
                    migrationLog.AppendLine("  + Faalmechanisme: 'Piping bij kunstwerk'");
                    migrationLog.AppendLine("    - Alle resultaten voor de gedetailleerde toets van dit faalmechanisme konden niet worden omgezet naar een geldig resultaat en zijn verwijderd.");
                    migrationLog.AppendLine("    - Alle resultaten voor de toets op maat van dit faalmechanisme konden niet worden omgezet naar een geldig resultaat en zijn verwijderd.");
                    migrationLog.AppendLine("  + Faalmechanisme: 'Stabiliteit steenzetting'");
                    migrationLog.AppendLine("    - Alle resultaten voor de gedetailleerde toets van dit faalmechanisme konden niet worden omgezet naar een geldig resultaat en zijn verwijderd.");
                    migrationLog.AppendLine("    - Alle resultaten voor de toets op maat van dit faalmechanisme konden niet worden omgezet naar een geldig resultaat en zijn verwijderd.");
                    migrationLog.AppendLine("  + Faalmechanisme: 'Duinafslag'");
                    migrationLog.AppendLine("    - Alle resultaten voor de gedetailleerde toets van dit faalmechanisme konden niet worden omgezet naar een geldig resultaat en zijn verwijderd.");
                    migrationLog.AppendLine("    - Alle resultaten voor de toets op maat van dit faalmechanisme konden niet worden omgezet naar een geldig resultaat en zijn verwijderd.");
                    migrationLog.AppendLine("Gevolgen van de migratie van versie 18.1 naar versie 19.1:");
                    migrationLog.AppendLine("* Traject: 'assessmentSection'");
                    migrationLog.AppendLine("  + Er worden standaardwaarden conform WBI2017 gebruikt voor de HLCD bestandsinformatie.");
                    migrationLog.AppendLine("  + De waarde voor de transparantie van de achtergrondkaart is aangepast naar 0.60.");
                    migrationLog.AppendLine("* Traject: 'Demo traject'");
                    migrationLog.AppendLine("  + Er worden standaardwaarden conform WBI2017 gebruikt voor de HLCD bestandsinformatie.");
                    migrationLog.AppendLine("  + De waarde voor de transparantie van de achtergrondkaart is aangepast naar 0.60.");
                    migrationLog.AppendLine("Gevolgen van de migratie van versie 19.1 naar versie 21.1:");
                    migrationLog.AppendLine("* Geen aanpassingen.");
                    migrationLog.AppendLine("Gevolgen van de migratie van versie 21.1 naar versie 22.1:");
                    migrationLog.AppendLine("* De oorspronkelijke faalmechanismen zijn omgezet naar het nieuwe formaat.\r\n* Alle toetsoordelen zijn verwijderd.");
                    migrationLog.AppendLine("* Traject: 'assessmentSection'");
                    migrationLog.AppendLine("  + Faalmechanisme: 'Grasbekleding erosie kruin en binnentalud'");
                    migrationLog.AppendLine("    - De waarden van de doelkans voor HBN en overslagdebiet zijn veranderd naar de trajectnorm.");
                    migrationLog.AppendLine("* Traject: 'Demo traject'");
                    migrationLog.AppendLine("  + Faalmechanisme: 'Grasbekleding erosie kruin en binnentalud'");
                    migrationLog.AppendLine("    - De waarden van de doelkans voor HBN en overslagdebiet zijn veranderd naar de trajectnorm.");
                    migrationLog.AppendLine("Gevolgen van de migratie van versie 22.1 naar versie 22.2:");
                    migrationLog.AppendLine("* Geen aanpassingen.");

                    Tuple <string, LogLevelConstant>[] expectedLogMessagesAndLevel =
                    {
                        Tuple.Create(expectedMessage,         LogLevelConstant.Info),
                        Tuple.Create(migrationLog.ToString(), LogLevelConstant.Info)
                    };
                    TestHelper.AssertLogMessagesWithLevelAreGenerated(Call, expectedLogMessagesAndLevel, 2);

                    Assert.IsTrue(migrationSuccessful);

                    var toVersionedFile = new ProjectVersionedFile(targetFilePath);
                    Assert.AreEqual(currentDatabaseVersion, toVersionedFile.GetVersion());
                }

            string logPath = Path.Combine(TestHelper.GetScratchPadPath(), logDirectory, "RiskeerMigrationLog.sqlite");

            Assert.IsFalse(File.Exists(logPath));

            mocks.VerifyAll();
        }