Index: Migration/Scripts/src/Migration.Scripts.Data/Migration.Scripts.Data.csproj
===================================================================
diff -u -r7050299dc93fba048f82eb9e11d90c86a8508596 -r83fbfb9ccbeaef0916d3485f89d48fdae9b8eb1d
--- Migration/Scripts/src/Migration.Scripts.Data/Migration.Scripts.Data.csproj (.../Migration.Scripts.Data.csproj) (revision 7050299dc93fba048f82eb9e11d90c86a8508596)
+++ Migration/Scripts/src/Migration.Scripts.Data/Migration.Scripts.Data.csproj (.../Migration.Scripts.Data.csproj) (revision 83fbfb9ccbeaef0916d3485f89d48fdae9b8eb1d)
@@ -46,6 +46,7 @@
+ True
Index: Migration/Scripts/src/Migration.Scripts.Data/MigrationScript.cs
===================================================================
diff -u
--- Migration/Scripts/src/Migration.Scripts.Data/MigrationScript.cs (revision 0)
+++ Migration/Scripts/src/Migration.Scripts.Data/MigrationScript.cs (revision 83fbfb9ccbeaef0916d3485f89d48fdae9b8eb1d)
@@ -0,0 +1,102 @@
+// Copyright (C) Stichting Deltares 2016. All rights reserved.
+//
+// This file is part of Ringtoets.
+//
+// Ringtoets is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see .
+//
+// All names, logos, and references to "Deltares" are registered trademarks of
+// Stichting Deltares and remain full property of Stichting Deltares at all times.
+// All rights reserved.
+
+using System;
+using System.Data.SQLite;
+using System.IO;
+using Migration.Scripts.Data.Exceptions;
+
+namespace Migration.Scripts.Data
+{
+ ///
+ /// Class that provides methods for migration a .
+ ///
+ public class MigrationScript
+ {
+ private readonly CreateScript createScript;
+ private readonly UpgradeScript upgradeScript;
+
+ ///
+ /// Creates a new instance of .
+ ///
+ /// The create script to use for migrating.
+ /// The upgrade script to use for migrating.
+ /// Thrown when any of the input parameters is null.
+ public MigrationScript(CreateScript createScript, UpgradeScript upgradeScript)
+ {
+ if (createScript == null)
+ {
+ throw new ArgumentNullException(nameof(createScript));
+ }
+ if (upgradeScript == null)
+ {
+ throw new ArgumentNullException(nameof(upgradeScript));
+ }
+ this.createScript = createScript;
+ this.upgradeScript = upgradeScript;
+ }
+
+ ///
+ /// Gets the supported version.
+ ///
+ /// The supported version.
+ public string SupportedVersion()
+ {
+ return upgradeScript.FromVersion();
+ }
+
+ ///
+ /// Gets the target version.
+ ///
+ /// The target version.
+ public string TargetVersion()
+ {
+ return upgradeScript.ToVersion();
+ }
+
+ ///
+ /// Uses to upgrade to a new .
+ ///
+ ///
+ /// The upgraded .
+ /// Thrown when is null.
+ /// Thrown when migration failed.
+ public VersionedFile Upgrade(VersionedFile sourceVersionedFile)
+ {
+ if (sourceVersionedFile == null)
+ {
+ throw new ArgumentNullException(nameof(sourceVersionedFile));
+ }
+ var newLocation = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
+
+ try
+ {
+ VersionedFile newVersionedFile = createScript.CreateEmptyVersionedFile(newLocation);
+ upgradeScript.Upgrade(sourceVersionedFile, newVersionedFile);
+ return newVersionedFile;
+ }
+ catch (SQLiteException exception)
+ {
+ throw new CriticalDatabaseMigrationException("Migratie is niet gelukt.", exception);
+ }
+ }
+ }
+}
\ No newline at end of file
Index: Migration/Scripts/test/Migration.Scripts.Data.Test/Migration.Scripts.Data.Test.csproj
===================================================================
diff -u -r7050299dc93fba048f82eb9e11d90c86a8508596 -r83fbfb9ccbeaef0916d3485f89d48fdae9b8eb1d
--- Migration/Scripts/test/Migration.Scripts.Data.Test/Migration.Scripts.Data.Test.csproj (.../Migration.Scripts.Data.Test.csproj) (revision 7050299dc93fba048f82eb9e11d90c86a8508596)
+++ Migration/Scripts/test/Migration.Scripts.Data.Test/Migration.Scripts.Data.Test.csproj (.../Migration.Scripts.Data.Test.csproj) (revision 83fbfb9ccbeaef0916d3485f89d48fdae9b8eb1d)
@@ -56,6 +56,7 @@
Properties\GlobalAssembly.cs
+
Index: Migration/Scripts/test/Migration.Scripts.Data.Test/MigrationScriptTest.cs
===================================================================
diff -u
--- Migration/Scripts/test/Migration.Scripts.Data.Test/MigrationScriptTest.cs (revision 0)
+++ Migration/Scripts/test/Migration.Scripts.Data.Test/MigrationScriptTest.cs (revision 83fbfb9ccbeaef0916d3485f89d48fdae9b8eb1d)
@@ -0,0 +1,131 @@
+// Copyright (C) Stichting Deltares 2016. All rights reserved.
+//
+// This file is part of Ringtoets.
+//
+// Ringtoets is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see .
+//
+// All names, logos, and references to "Deltares" are registered trademarks of
+// Stichting Deltares and remain full property of Stichting Deltares at all times.
+// All rights reserved.
+
+using System;
+using System.Data.SQLite;
+using System.IO;
+using Core.Common.TestUtil;
+using Migration.Scripts.Data.Exceptions;
+using NUnit.Framework;
+
+namespace Migration.Scripts.Data.Test
+{
+ [TestFixture]
+ public class MigrationScriptTest
+ {
+ [Test]
+ public void Constructor_CreateScriptNull_ThrowsArgumentNullException()
+ {
+ // Setup
+ var upgradeScript = new UpgradeScript("1", "2", ";");
+
+ // Call
+ TestDelegate call = () => new MigrationScript(null, upgradeScript);
+
+ // Assert
+ string paramName = Assert.Throws(call).ParamName;
+ Assert.AreEqual("createScript", paramName);
+ }
+
+ [Test]
+ public void Constructor_UpgradeScriptNull_ThrowsArgumentNullException()
+ {
+ // Setup
+ var createScript = new CreateScript("1", ";");
+
+ // Call
+ TestDelegate call = () => new MigrationScript(createScript, null);
+
+ // Assert
+ string paramName = Assert.Throws(call).ParamName;
+ Assert.AreEqual("upgradeScript", paramName);
+ }
+
+ [Test]
+ public void Constructor_ValidParameters_ExpectedProperties()
+ {
+ // Setup
+ var createScript = new CreateScript("2", ";");
+ var upgradeScript = new UpgradeScript("1", "2", ";");
+
+ // Call
+ var migrationScript = new MigrationScript(createScript, upgradeScript);
+
+ // Assert
+ Assert.AreEqual(upgradeScript.FromVersion(), migrationScript.SupportedVersion());
+ Assert.AreEqual(upgradeScript.ToVersion(), migrationScript.TargetVersion());
+ }
+
+ [Test]
+ public void Upgrade_VersionedFileNull_ThrowsArgumentNullException()
+ {
+ // Setup
+ var createScript = new CreateScript("2", ";");
+ var upgradeScript = new UpgradeScript("1", "2", ";");
+ var migrationScript = new MigrationScript(createScript, upgradeScript);
+
+ // Call
+ TestDelegate call = () => migrationScript.Upgrade(null);
+
+ // Assert
+ string paramName = Assert.Throws(call).ParamName;
+ Assert.AreEqual("sourceVersionedFile", paramName);
+ }
+
+ [Test]
+ public void Upgrade_UpgradeFails_ThrowsCriticalDatabaseMigrationException()
+ {
+ // Setup
+ var createScript = new CreateScript("2", "THIS WILL FAIL");
+ var upgradeScript = new UpgradeScript("1", "2", ";");
+ var migrationScript = new MigrationScript(createScript, upgradeScript);
+ var versionedFile = new VersionedFile("c:\\file.ext");
+
+ // Call
+ TestDelegate call = () => migrationScript.Upgrade(versionedFile);
+
+ // Assert
+ CriticalDatabaseMigrationException exception = Assert.Throws(call);
+ Assert.AreEqual("Migratie is niet gelukt.", exception.Message);
+ Assert.IsInstanceOf(exception.InnerException);
+ }
+
+ [Test]
+ public void Upgrade_ValidParameters_ExpectedProperties()
+ {
+ // Setup
+ var createScript = new CreateScript("2", ";");
+ var upgradeScript = new UpgradeScript("1", "2", ";");
+ var migrationScript = new MigrationScript(createScript, upgradeScript);
+ var versionedFile = new VersionedFile("c:\\file.ext");
+
+ // Call
+ VersionedFile upgradedFile = migrationScript.Upgrade(versionedFile);
+
+ // Assert
+ Assert.IsNotNull(upgradedFile);
+ using (new FileDisposeHelper(upgradedFile.Location))
+ {
+ Assert.IsTrue(File.Exists(upgradedFile.Location));
+ }
+ }
+ }
+}
\ No newline at end of file