Index: Ringtoets/Migration/src/Riskeer.Migration.Core/ProjectCreateScript.cs =================================================================== diff -u --- Ringtoets/Migration/src/Riskeer.Migration.Core/ProjectCreateScript.cs (revision 0) +++ Ringtoets/Migration/src/Riskeer.Migration.Core/ProjectCreateScript.cs (revision 2f76d4cf01e6bc7599e0b5182bf05f0edda73cde) @@ -0,0 +1,79 @@ +// Copyright (C) Stichting Deltares 2018. 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 Migration.Scripts.Data; +using Migration.Scripts.Data.Exceptions; +using Ringtoets.Common.Util; +using Riskeer.Migration.Core.Properties; + +namespace Riskeer.Migration.Core +{ + /// + /// Class that provides methods for creating a for a specific version. + /// + public class ProjectCreateScript : CreateScript + { + private readonly string createQuery; + + /// + /// Creates a new instance of the class. + /// + /// The version was designed for. + /// The SQL query that belongs to . + /// Thrown when: + /// + /// is not a valid project version, + /// is empty, null, or consist out of only whitespace characters. + /// + public ProjectCreateScript(string version, string query) : base(version) + { + RingtoetsVersionHelper.ValidateVersion(version); + + if (string.IsNullOrWhiteSpace(query)) + { + throw new ArgumentException(@"Query must have a value.", nameof(query)); + } + + createQuery = query; + } + + protected override IVersionedFile GetEmptyVersionedFile(string location) + { + try + { + using (var databaseFile = new RingtoetsDatabaseFile(location)) + { + databaseFile.OpenDatabaseConnection(); + databaseFile.ExecuteQuery(createQuery); + } + + return new RingtoetsVersionedFile(location); + } + catch (SQLiteException exception) + { + throw new CriticalMigrationException(string.Format(Resources.RingtoetsCreateScript_Creating_Version_0_Failed, + GetVersion()), exception); + } + } + } +} \ No newline at end of file Fisheye: Tag 2f76d4cf01e6bc7599e0b5182bf05f0edda73cde refers to a dead (removed) revision in file `Ringtoets/Migration/src/Riskeer.Migration.Core/RingtoetsCreateScript.cs'. Fisheye: No comparison available. Pass `N' to diff? Index: Ringtoets/Migration/src/Riskeer.Migration.Core/RingtoetsSqLiteDatabaseFileMigrator.cs =================================================================== diff -u -reb0ce91f3f0fb3c543ef2b1875e5ad9e6356fa08 -r2f76d4cf01e6bc7599e0b5182bf05f0edda73cde --- Ringtoets/Migration/src/Riskeer.Migration.Core/RingtoetsSqLiteDatabaseFileMigrator.cs (.../RingtoetsSqLiteDatabaseFileMigrator.cs) (revision eb0ce91f3f0fb3c543ef2b1875e5ad9e6356fa08) +++ Ringtoets/Migration/src/Riskeer.Migration.Core/RingtoetsSqLiteDatabaseFileMigrator.cs (.../RingtoetsSqLiteDatabaseFileMigrator.cs) (revision 2f76d4cf01e6bc7599e0b5182bf05f0edda73cde) @@ -110,12 +110,12 @@ return match.Success ? match.Groups[2].Value : null; } - private RingtoetsCreateScript CreateNewCreateScript(string resourceName) + private ProjectCreateScript CreateNewCreateScript(string resourceName) { string version = GetCreateScriptVersion(resourceName); Stream createStream = scriptResource.GetManifestResourceStream(resourceName); string query = GetStringOfStream(createStream); - return new RingtoetsCreateScript(version, query); + return new ProjectCreateScript(version, query); } #endregion Index: Ringtoets/Migration/src/Riskeer.Migration.Core/Riskeer.Migration.Core.csproj =================================================================== diff -u -reb0ce91f3f0fb3c543ef2b1875e5ad9e6356fa08 -r2f76d4cf01e6bc7599e0b5182bf05f0edda73cde --- Ringtoets/Migration/src/Riskeer.Migration.Core/Riskeer.Migration.Core.csproj (.../Riskeer.Migration.Core.csproj) (revision eb0ce91f3f0fb3c543ef2b1875e5ad9e6356fa08) +++ Ringtoets/Migration/src/Riskeer.Migration.Core/Riskeer.Migration.Core.csproj (.../Riskeer.Migration.Core.csproj) (revision 2f76d4cf01e6bc7599e0b5182bf05f0edda73cde) @@ -25,7 +25,7 @@ True Resources.resx - + Index: Ringtoets/Migration/test/Riskeer.Migration.Core.Test/ProjectCreateScriptTest.cs =================================================================== diff -u --- Ringtoets/Migration/test/Riskeer.Migration.Core.Test/ProjectCreateScriptTest.cs (revision 0) +++ Ringtoets/Migration/test/Riskeer.Migration.Core.Test/ProjectCreateScriptTest.cs (revision 2f76d4cf01e6bc7599e0b5182bf05f0edda73cde) @@ -0,0 +1,165 @@ +// Copyright (C) Stichting Deltares 2018. 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; +using Migration.Scripts.Data.Exceptions; +using NUnit.Framework; +using Ringtoets.Common.Util; + +namespace Riskeer.Migration.Core.Test +{ + [TestFixture] + public class ProjectCreateScriptTest + { + [Test] + [TestCase("")] + [TestCase(null)] + public void Constructor_VersionNullOrEmpty_ThrowsArgumentException(string version) + { + // Setup + const string query = "Valid query"; + + // Call + TestDelegate call = () => new ProjectCreateScript(version, query); + + // Assert + string paramName = Assert.Throws(call).ParamName; + Assert.AreEqual("version", paramName); + } + + [Test] + [TestCase("4")] + public void Constructor_InvalidVersion_ThrowsArgumentException(string version) + { + // Setup + const string query = "Valid query"; + + // Call + TestDelegate call = () => new ProjectCreateScript(version, query); + + // Assert + string expectedMessage = $@"'{version}' is geen geldige Ringtoets versie."; + TestHelper.AssertThrowsArgumentExceptionAndTestMessage(call, expectedMessage); + } + + [Test] + [TestCase("")] + [TestCase(" ")] + [TestCase(null)] + public void Constructor_InvalidQuery_ThrowsArgumentException(string query) + { + // Setup + string version = RingtoetsVersionHelper.GetCurrentDatabaseVersion(); + + // Call + TestDelegate call = () => new ProjectCreateScript(version, query); + + // Assert + string paramName = Assert.Throws(call).ParamName; + Assert.AreEqual("query", paramName); + } + + [Test] + public void Constructor_ValidParameters_ExpectedValues() + { + // Setup + const string query = "Valid query"; + string version = RingtoetsVersionHelper.GetCurrentDatabaseVersion(); + + // Call + var createScript = new ProjectCreateScript(version, query); + + // Assert + Assert.IsInstanceOf(createScript); + Assert.AreEqual(version, createScript.GetVersion()); + } + + [Test] + public void CreateEmptyVersionedFile_FileDoesNotExist_ReturnsVersionedFile() + { + // Setup + const string query = ";"; + string version = RingtoetsVersionHelper.GetCurrentDatabaseVersion(); + + string filePath = TestHelper.GetScratchPadPath(nameof(CreateEmptyVersionedFile_FileDoesNotExist_ReturnsVersionedFile)); + var createScript = new ProjectCreateScript(version, query); + + // Call + IVersionedFile versionedFile = createScript.CreateEmptyVersionedFile(filePath); + + // Assert + Assert.IsTrue(File.Exists(versionedFile.Location)); + File.Delete(filePath); + } + + [Test] + public void CreateEmptyVersionedFile_FileExistsButNotWritable_ThrowsArgumentException() + { + // Setup + const string query = ";"; + string version = RingtoetsVersionHelper.GetCurrentDatabaseVersion(); + + string filePath = TestHelper.GetScratchPadPath(nameof(CreateEmptyVersionedFile_FileExistsButNotWritable_ThrowsArgumentException)); + var createScript = new ProjectCreateScript(version, query); + + using (new FileDisposeHelper(filePath)) + { + FileAttributes attributes = File.GetAttributes(filePath); + File.SetAttributes(filePath, attributes | FileAttributes.ReadOnly); + + // Call + TestDelegate call = () => createScript.CreateEmptyVersionedFile(filePath); + + // Assert + var exception = Assert.Throws(call); + Assert.AreEqual("path", exception.ParamName); + File.SetAttributes(filePath, attributes); + } + } + + [Test] + public void CreateEmptyVersionedFile_QueryFails_ThrowsCriticalMigrationException() + { + // Setup + const string query = "THIS WILL FAIL"; + string version = RingtoetsVersionHelper.GetCurrentDatabaseVersion(); + + string filePath = TestHelper.GetScratchPadPath(nameof(CreateEmptyVersionedFile_QueryFails_ThrowsCriticalMigrationException)); + var createScript = new ProjectCreateScript(version, query); + + // Call + TestDelegate call = () => createScript.CreateEmptyVersionedFile(filePath); + + // Assert + using (new FileDisposeHelper(filePath)) + { + var exception = Assert.Throws(call); + Assert.AreEqual($"Het aanmaken van het Ringtoets projectbestand met versie '{version}' is mislukt.", + exception.Message); + Assert.IsInstanceOf(exception.InnerException); + } + } + } +} \ No newline at end of file Fisheye: Tag 2f76d4cf01e6bc7599e0b5182bf05f0edda73cde refers to a dead (removed) revision in file `Ringtoets/Migration/test/Riskeer.Migration.Core.Test/RingtoetsCreateScriptTest.cs'. Fisheye: No comparison available. Pass `N' to diff? Index: Ringtoets/Migration/test/Riskeer.Migration.Core.Test/Riskeer.Migration.Core.Test.csproj =================================================================== diff -u -r20aaede1ffb984da1aa260be8317fe2d0522ecd1 -r2f76d4cf01e6bc7599e0b5182bf05f0edda73cde --- Ringtoets/Migration/test/Riskeer.Migration.Core.Test/Riskeer.Migration.Core.Test.csproj (.../Riskeer.Migration.Core.Test.csproj) (revision 20aaede1ffb984da1aa260be8317fe2d0522ecd1) +++ Ringtoets/Migration/test/Riskeer.Migration.Core.Test/Riskeer.Migration.Core.Test.csproj (.../Riskeer.Migration.Core.Test.csproj) (revision 2f76d4cf01e6bc7599e0b5182bf05f0edda73cde) @@ -22,7 +22,7 @@ - +