diff --git a/yuniql-core/WorkspaceService.cs b/yuniql-core/WorkspaceService.cs index e54eb35..ca9fdfc 100644 --- a/yuniql-core/WorkspaceService.cs +++ b/yuniql-core/WorkspaceService.cs @@ -1,9 +1,9 @@ -using Yuniql.Extensibility; -using System; +using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; +using Yuniql.Extensibility; namespace Yuniql.Core { @@ -149,7 +149,7 @@ public string IncrementMajorVersion(string workspace, string sqlFileName) { var localVersions = GetLocalVersions(workspace); - var nextMajorVersion = new LocalVersion { Major = localVersions.First().Major + 1, Minor = 0 }; + var nextMajorVersion = new LocalVersion { Major = (localVersions.FirstOrDefault()?.Major ?? -1) + 1, Minor = 0 }; localVersions.Add(nextMajorVersion); string nextVersionPath = Path.Combine(workspace, nextMajorVersion.SemVersion); @@ -171,7 +171,7 @@ public string IncrementMinorVersion(string workspace, string sqlFileName) { var localVersions = GetLocalVersions(workspace); - var nextMinorVersion = new LocalVersion { Major = localVersions.First().Major, Minor = localVersions.First().Minor + 1 }; + var nextMinorVersion = new LocalVersion { Major = localVersions.FirstOrDefault()?.Major ?? 0, Minor = (localVersions.FirstOrDefault()?.Minor ?? -1) + 1 }; localVersions.Add(nextMinorVersion); string nextVersionPath = Path.Combine(workspace, nextMinorVersion.SemVersion); diff --git a/yuniql-tests/unit-tests/Tests/WorkspaceServiceTests.cs b/yuniql-tests/unit-tests/Tests/WorkspaceServiceTests.cs index 8a7faaa..62cb4b9 100644 --- a/yuniql-tests/unit-tests/Tests/WorkspaceServiceTests.cs +++ b/yuniql-tests/unit-tests/Tests/WorkspaceServiceTests.cs @@ -1,9 +1,10 @@ -using Microsoft.VisualStudio.TestTools.UnitTesting; +using System; +using System.IO; +using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; +using Shouldly; using Yuniql.Core; using Yuniql.Extensibility; -using Shouldly; -using System.IO; namespace Yuniql.UnitTests { @@ -134,7 +135,25 @@ public void Test_Increment_Major_Version() directoryService.Verify(s => s.GetDirectories(workspace, "v*.*")); directoryService.Verify(s => s.CreateDirectory(@$"{workspace}\v1.00")); } + [TestMethod()] + public void Test_Increment_Major_Version_Without_Previous_Version() + { + //arrange + var workspace = @"c:\temp\yuniql"; + var traceService = new Mock(); + var fileService = new Mock(); + var directoryService = new Mock(); + directoryService.Setup(s => s.GetDirectories(workspace, "v*.*")).Returns(Array.Empty()); + //act + var sut = new WorkspaceService(traceService.Object, directoryService.Object, fileService.Object); + var result = sut.IncrementMajorVersion(workspace, sqlFileName: null); + + //assert + result.ShouldBe("v0.00"); + directoryService.Verify(s => s.GetDirectories(workspace, "v*.*")); + directoryService.Verify(s => s.CreateDirectory(@$"{workspace}\v0.00")); + } [TestMethod()] public void Test_Increment_Major_Version_With_Sql_File() @@ -187,6 +206,27 @@ public void Test_Increment_Minor_Version() directoryService.Verify(s => s.CreateDirectory(@$"{workspace}\v0.03")); } + [TestMethod] + public void Test_Increment_Minor_Version_Without_Previous_Version() + { + //arrange + var workspace = @"c:\temp\yuniql"; + var traceService = new Mock(); + var fileService = new Mock(); + + var directoryService = new Mock(); + directoryService.Setup(s => s.GetDirectories(workspace, "v*.*")).Returns(Array.Empty()); + + //act + var sut = new WorkspaceService(traceService.Object, directoryService.Object, fileService.Object); + var result = sut.IncrementMinorVersion(workspace, sqlFileName: null); + + //assert + result.ShouldBe("v0.00"); + directoryService.Verify(s => s.GetDirectories(workspace, "v*.*")); + directoryService.Verify(s => s.CreateDirectory(@$"{workspace}\v0.00")); + } + [TestMethod] public void Test_Increment_Minor_Version_With_Sql_File() {