Skip to content
This repository has been archived by the owner on Oct 17, 2024. It is now read-only.

Commit

Permalink
fixed version evaluation
Browse files Browse the repository at this point in the history
  • Loading branch information
byCrookie committed Sep 10, 2022
1 parent 61ae91e commit e949939
Show file tree
Hide file tree
Showing 8 changed files with 102 additions and 12 deletions.
2 changes: 1 addition & 1 deletion Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<PropertyGroup>
<MajorVersion>1</MajorVersion>
<MinorVersion>1</MinorVersion>
<PatchVersion>0</PatchVersion>
<PatchVersion>1</PatchVersion>
</PropertyGroup>

<PropertyGroup>
Expand Down
5 changes: 5 additions & 0 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,10 @@
<PackageVersion Include="Microsoft.CodeAnalysis.Compilers" Version="4.2.0"/>
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="4.2.0"/>
<PackageVersion Include="System.Reactive" Version="5.0.0"/>
<PackageVersion Include="FluentAssertions" Version="6.7.0" />
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.2.0" />
<PackageVersion Include="MSTest.TestAdapter" Version="2.2.10" />
<PackageVersion Include="MSTest.TestFramework" Version="2.2.10" />
<PackageVersion Include="coverlet.collector" Version="3.1.2"/>
</ItemGroup>
</Project>
6 changes: 6 additions & 0 deletions src/TypeCode.Business/Version/ISemanticVersionComparer.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
namespace TypeCode.Business.Version;

public interface ISemanticVersionComparer
{
bool IsNewer(string current, string newest);
}
1 change: 1 addition & 0 deletions src/TypeCode.Business/Version/IVersionModule.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ namespace TypeCode.Business.Version;

[ServiceProviderModule]
[Transient(typeof(IVersionEvaluator), typeof(VersionEvaluator))]
[Transient(typeof(ISemanticVersionComparer), typeof(SemanticVersionComparer))]
public interface IVersionModule
{
}
26 changes: 26 additions & 0 deletions src/TypeCode.Business/Version/SemanticVersionComparer.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
namespace TypeCode.Business.Version;

public class SemanticVersionComparer : ISemanticVersionComparer
{
public bool IsNewer(string current, string newest)
{
var currentSplitted = current.Split(".").Select(int.Parse);
var newestSplitted = newest.Split(".").Select(int.Parse);
var zipped = currentSplitted.Zip(newestSplitted).Reverse().ToList();

var isHigher = false;
foreach (var (currentPart, newestPart) in zipped)
{
if (newestPart > currentPart)
{
isHigher = true;
}
else if (newestPart < currentPart)
{
isHigher = false;
}
}

return isHigher;
}
}
29 changes: 18 additions & 11 deletions src/TypeCode.Business/Version/VersionEvaluator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,13 @@ namespace TypeCode.Business.Version;

public class VersionEvaluator : IVersionEvaluator
{
private readonly ISemanticVersionComparer _semanticVersionComparer;

public VersionEvaluator(ISemanticVersionComparer semanticVersionComparer)
{
_semanticVersionComparer = semanticVersionComparer;
}

public async Task<VersionResult> EvaluateAsync()
{
var currentVersion = await ReadCurrentVersionAsync().ConfigureAwait(false);
Expand All @@ -26,29 +33,29 @@ public async Task<VersionResult> EvaluateAsync()
};
}

private static bool HasNewerVersion(VersionResult currentVersion, VersionResponse? newestVersion)
private bool HasNewerVersion(VersionResult currentVersion, VersionResponse? newestVersion)
{
if (string.IsNullOrEmpty(currentVersion.CurrentVersion) || string.IsNullOrEmpty(newestVersion?.TagName))
{
return false;
}

var current = CurrentAsInt(currentVersion);
var newest = NewestAsInt(newestVersion);
return current < newest;
var current = Current(currentVersion);
var newest = Newest(newestVersion);

return _semanticVersionComparer.IsNewer(current, newest);
}

private static int NewestAsInt(VersionResponse newestVersion)
private static string Newest(VersionResponse newestVersion)
{
return int.Parse(string.Join("", GetVersionNumberFromTag(newestVersion).Trim().Split('.')[..3]));
return GetVersionNumberFromTag(newestVersion).Trim();
}

private static int CurrentAsInt(VersionResult currentVersion)
private static string Current(VersionResult currentVersion)
{
return int.Parse(currentVersion.CurrentVersion!.Trim().Split('-').Length > 1
? string.Join("", currentVersion.CurrentVersion!.Trim().Split('-')[0].Split('.')[..3])
: string.Join("", currentVersion.CurrentVersion!.Trim().Split('.')[..3]));
return currentVersion.CurrentVersion!.Trim().Split('-').Length > 1
? currentVersion.CurrentVersion!.Trim().Split('-')[0]
: currentVersion.CurrentVersion!.Trim();
}

public Task<VersionResult> ReadCurrentVersionAsync()
Expand Down
8 changes: 8 additions & 0 deletions tests/TypeCode.Business.Tests/TypeCode.Business.Tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,14 @@

<ItemGroup>
<PackageReference Include="byCrookie.LibrarySdk" />
<PackageReference Include="FluentAssertions" />
<PackageReference Include="Microsoft.NET.Test.Sdk" />
<PackageReference Include="MSTest.TestAdapter" />
<PackageReference Include="MSTest.TestFramework" />
<PackageReference Include="coverlet.collector">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>

<ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
using FluentAssertions;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using TypeCode.Business.Version;

namespace TypeCode.Business.Tests.Version;

[TestClass]
public class SemanticVersionComparerTest
{
private SemanticVersionComparer _testee = null!;

[TestInitialize]
public void Initialize()
{
_testee = new SemanticVersionComparer();
}

[TestMethod]
[DataRow("1.1.1", "1.1.1", false)]
[DataRow("1.1.1", "1.1.2", true)]
[DataRow("1.1.1", "1.2.1", true)]
[DataRow("1.1.1", "2.1.1", true)]
[DataRow("1.1.1", "2.2.1", true)]
[DataRow("1.1.1", "2.2.2", true)]

[DataRow("1.1.0", "1.1.1", true)]
[DataRow("1.1.2", "1.1.1", false)]
[DataRow("1.2.1", "1.1.1", false)]
[DataRow("2.1.1", "1.1.1", false)]
[DataRow("2.2.1", "1.1.1", false)]
[DataRow("1.1.2", "1.1.1", false)]
public void IsNewer_WhenData_ThenReturn(string current, string newer, bool expected)
{
var result = _testee.IsNewer(current, newer);
result.Should().Be(expected);
}
}

0 comments on commit e949939

Please sign in to comment.