Skip to content

Commit

Permalink
GitTools#2595 - update unit tests
Browse files Browse the repository at this point in the history
  • Loading branch information
arturcic committed Apr 11, 2023
1 parent c4461fb commit 0ae2c0b
Show file tree
Hide file tree
Showing 9 changed files with 196 additions and 123 deletions.
4 changes: 1 addition & 3 deletions src/GitVersion.Core/Core/Abstractions/IRepositoryStore.cs
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,7 @@ public interface IRepositoryStore

IReadOnlyList<SemanticVersionWithTag> GetTaggedSemanticVersions(string? labelPrefix, SemanticVersionFormat format);

IReadOnlyList<SemanticVersionWithTag> GetTaggedSemanticVersionsOnBranch(
IBranch branch, string? labelPrefix, SemanticVersionFormat format
);
IReadOnlyList<SemanticVersionWithTag> GetTaggedSemanticVersionsOnBranch(IBranch branch, string? labelPrefix, SemanticVersionFormat format);

bool IsCommitOnBranch(ICommit? baseVersionSource, IBranch branch, ICommit firstMatchingCommit);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ internal class NextVersionCalculator : INextVersionCalculator
{
private readonly ILog log;
private readonly IMainlineVersionCalculator mainlineVersionCalculator;
private readonly ITrunkBasedVersionCalculator trunkBasedVersionCalculator;
private readonly IContinuousDeploymentVersionCalculator continuousDeploymentVersionCalculator;
private readonly IContinuousDeliveryVersionCalculator continuousDeliveryVersionCalculator;
private readonly IManualDeploymentVersionCalculator manualDeploymentVersionCalculator;
Expand All @@ -24,7 +23,6 @@ internal class NextVersionCalculator : INextVersionCalculator
public NextVersionCalculator(ILog log,
Lazy<GitVersionContext> versionContext,
IMainlineVersionCalculator mainlineVersionCalculator,
ITrunkBasedVersionCalculator trunkBasedVersionCalculator,
IContinuousDeploymentVersionCalculator continuousDeploymentVersionCalculator,
IContinuousDeliveryVersionCalculator continuousDeliveryVersionCalculator,
IManualDeploymentVersionCalculator manualDeploymentVersionCalculator,
Expand All @@ -35,7 +33,6 @@ public NextVersionCalculator(ILog log,
this.log = log.NotNull();
this.versionContext = versionContext.NotNull();
this.mainlineVersionCalculator = mainlineVersionCalculator.NotNull();
this.trunkBasedVersionCalculator = trunkBasedVersionCalculator.NotNull();
this.continuousDeploymentVersionCalculator = continuousDeploymentVersionCalculator.NotNull();
this.continuousDeliveryVersionCalculator = continuousDeliveryVersionCalculator.NotNull();
this.manualDeploymentVersionCalculator = manualDeploymentVersionCalculator.NotNull();
Expand Down
5 changes: 3 additions & 2 deletions src/GitVersion.MsBuild.Tests/Helpers/MsBuildExeFixture.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,11 @@ public class MsBuildExeFixture
private readonly AnalyzerManager manager = new();
private readonly string ProjectPath;

public MsBuildExeFixture(RepositoryFixtureBase fixture, string workingDirectory = "")
public MsBuildExeFixture(RepositoryFixtureBase fixture, string workingDirectory = "", string language = "C#")
{
var projectExtension = FileHelper.GetProjectExtension(language);
this.fixture = fixture;
this.ProjectPath = PathHelper.Combine(workingDirectory, "app.csproj");
this.ProjectPath = PathHelper.Combine(workingDirectory, $"app.{projectExtension}");

var versionFile = PathHelper.Combine(workingDirectory, "gitversion.json");

Expand Down
174 changes: 104 additions & 70 deletions src/GitVersion.MsBuild.Tests/Tasks/GenerateGitVersionInformationTest.cs

Large diffs are not rendered by default.

3 changes: 2 additions & 1 deletion src/GitVersion.MsBuild.Tests/Tasks/GetVersionTaskTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,8 @@ public void GetVersionTaskShouldReturnVersionOutputVariablesWhenRunWithMsBuildIn
{
const string taskName = nameof(GetVersion);

using var result = ExecuteMsBuildExeInAzurePipeline(project => AddGetVersionTask(project, taskName, taskName, outputProperty));
using var result = ExecuteMsBuildExeInAzurePipeline(project =>
AddGetVersionTask(project, taskName, taskName, outputProperty));

result.ProjectPath.ShouldNotBeNullOrWhiteSpace();
result.MsBuild.Count.ShouldBeGreaterThan(0);
Expand Down
12 changes: 6 additions & 6 deletions src/GitVersion.MsBuild.Tests/Tasks/TestTaskBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,11 @@ protected static MsBuildTaskFixtureResult<T> ExecuteMsBuildTask<T>(T task) where
return result;
}

protected static MsBuildExeFixtureResult ExecuteMsBuildExe(Action<ProjectCreator> extendProject)
protected static MsBuildExeFixtureResult ExecuteMsBuildExe(Action<ProjectCreator> extendProject, string language = "C#")
{
var fixture = CreateLocalRepositoryFixture();

var msbuildFixture = new MsBuildExeFixture(fixture, fixture.RepositoryPath);
var msbuildFixture = new MsBuildExeFixture(fixture, fixture.RepositoryPath, language);

msbuildFixture.CreateTestProject(extendProject);

Expand All @@ -51,7 +51,7 @@ protected static MsBuildTaskFixtureResult<T> ExecuteMsBuildTaskInAzurePipeline<T
var environmentVariables = new List<KeyValuePair<string, string?>>(env.ToArray());
if (buildNumber != null)
{
environmentVariables.Add(new KeyValuePair<string, string?>("BUILD_BUILDNUMBER", buildNumber));
environmentVariables.Add(new("BUILD_BUILDNUMBER", buildNumber));
}
msbuildFixture.WithEnv(environmentVariables.ToArray());
if (configurationText != null)
Expand Down Expand Up @@ -81,11 +81,11 @@ protected static MsBuildTaskFixtureResult<T> ExecuteMsBuildTaskInGitHubActions<T
return result;
}

protected static MsBuildExeFixtureResult ExecuteMsBuildExeInAzurePipeline(Action<ProjectCreator> extendProject)
protected static MsBuildExeFixtureResult ExecuteMsBuildExeInAzurePipeline(Action<ProjectCreator> extendProject, string language = "C#")
{
var fixture = CreateRemoteRepositoryFixture();

var msbuildFixture = new MsBuildExeFixture(fixture, fixture.LocalRepositoryFixture.RepositoryPath);
var msbuildFixture = new MsBuildExeFixture(fixture, fixture.LocalRepositoryFixture.RepositoryPath, language);

msbuildFixture.CreateTestProject(extendProject);
msbuildFixture.WithEnv(env.ToArray());
Expand Down Expand Up @@ -118,7 +118,7 @@ private static RemoteRepositoryFixture CreateRemoteRepositoryFixture()
fixture.Repository.MakeACommit();
fixture.Repository.CreateBranch("develop");

Commands.Fetch(fixture.LocalRepositoryFixture.Repository, fixture.LocalRepositoryFixture.Repository.Network.Remotes.First().Name, Array.Empty<string>(), new FetchOptions(), null);
Commands.Fetch(fixture.LocalRepositoryFixture.Repository, fixture.LocalRepositoryFixture.Repository.Network.Remotes.First().Name, Array.Empty<string>(), new(), null);
Commands.Checkout(fixture.LocalRepositoryFixture.Repository, fixture.Repository.Head.Tip);
fixture.LocalRepositoryFixture.Repository.Branches.Remove(MainBranch);
fixture.InitializeRepo();
Expand Down
107 changes: 70 additions & 37 deletions src/GitVersion.MsBuild.Tests/Tasks/UpdateAssemblyInfoTaskTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,157 +9,190 @@ namespace GitVersion.MsBuild.Tests.Tasks;
[TestFixture]
public class UpdateAssemblyInfoTaskTest : TestTaskBase
{
[Test]
public void UpdateAssemblyInfoTaskShouldCreateFile()
private static readonly object[] Languages =
{
var task = new UpdateAssemblyInfo();
new object[] { "C#" },
new object[] { "F#" },
new object[] { "VB" },
};

[TestCaseSource(nameof(Languages))]
public void UpdateAssemblyInfoTaskShouldCreateFile(string language)
{
var extension = FileHelper.GetFileExtension(language);
var task = new UpdateAssemblyInfo { Language = language };

using var result = ExecuteMsBuildTask(task);

result.Success.ShouldBe(true);
result.Errors.ShouldBe(0);
result.Task.AssemblyInfoTempFilePath.ShouldNotBeNull();
result.Task.AssemblyInfoTempFilePath.ShouldMatch($@"AssemblyInfo.*\.g\.{extension}");

var fileContent = File.ReadAllText(result.Task.AssemblyInfoTempFilePath);
fileContent.ShouldContain(@"[assembly: AssemblyVersion(""1.2.4.0"")]");
fileContent.ShouldContain(@"assembly: AssemblyVersion(""1.2.4.0"")");
}

[Test]
public void UpdateAssemblyInfoTaskShouldCreateFileInBuildServer()
[TestCaseSource(nameof(Languages))]
public void UpdateAssemblyInfoTaskShouldCreateFileInBuildServer(string language)
{
var task = new UpdateAssemblyInfo();
var extension = FileHelper.GetFileExtension(language);
var task = new UpdateAssemblyInfo { Language = language };

using var result = ExecuteMsBuildTaskInAzurePipeline(task);

result.Success.ShouldBe(true);
result.Errors.ShouldBe(0);
result.Task.AssemblyInfoTempFilePath.ShouldNotBeNull();
result.Task.AssemblyInfoTempFilePath.ShouldMatch($@"AssemblyInfo.*\.g\.{extension}");

var fileContent = File.ReadAllText(result.Task.AssemblyInfoTempFilePath);
fileContent.ShouldContain(@"[assembly: AssemblyVersion(""1.0.1.0"")]");
fileContent.ShouldContain(@"assembly: AssemblyVersion(""1.0.1.0"")");
}

[Test]
public void UpdateAssemblyInfoTaskShouldCreateFileWhenRunWithMsBuild()
[TestCaseSource(nameof(Languages))]
public void UpdateAssemblyInfoTaskShouldCreateFileWhenRunWithMsBuild(string language)
{
const string taskName = nameof(UpdateAssemblyInfo);
const string outputProperty = nameof(UpdateAssemblyInfo.AssemblyInfoTempFilePath);

using var result = ExecuteMsBuildExe(project => AddUpdateAssemblyInfoTask(project, taskName, taskName, outputProperty));
var extension = FileHelper.GetFileExtension(language);
using var result = ExecuteMsBuildExe(project =>
AddUpdateAssemblyInfoTask(project, taskName, taskName, outputProperty, language), language);

result.ProjectPath.ShouldNotBeNullOrWhiteSpace();
result.MsBuild.Count.ShouldBeGreaterThan(0);
result.MsBuild.OverallSuccess.ShouldBe(true);
result.MsBuild.ShouldAllBe(x => x.Succeeded);
result.Output.ShouldNotBeNullOrWhiteSpace();

var generatedFilePath = PathHelper.Combine(Path.GetDirectoryName(result.ProjectPath), "AssemblyInfo.g.cs");
var generatedFilePath = PathHelper.Combine(Path.GetDirectoryName(result.ProjectPath), $"AssemblyInfo.g.{extension}");
result.Output.ShouldContain($"{outputProperty}: {generatedFilePath}");

var fileContent = File.ReadAllText(generatedFilePath);
fileContent.ShouldContain(@"[assembly: AssemblyVersion(""1.2.4.0"")]");
fileContent.ShouldContain(@"assembly: AssemblyVersion(""1.2.4.0"")");
}

[Test]
public void UpdateAssemblyInfoTaskShouldCreateFileWhenRunWithMsBuildInBuildServer()
[TestCaseSource(nameof(Languages))]
public void UpdateAssemblyInfoTaskShouldCreateFileWhenRunWithMsBuildInBuildServer(string language)
{
const string taskName = nameof(UpdateAssemblyInfo);
const string outputProperty = nameof(UpdateAssemblyInfo.AssemblyInfoTempFilePath);

using var result = ExecuteMsBuildExeInAzurePipeline(project => AddUpdateAssemblyInfoTask(project, taskName, taskName, outputProperty));
var extension = FileHelper.GetFileExtension(language);
using var result = ExecuteMsBuildExeInAzurePipeline(project =>
AddUpdateAssemblyInfoTask(project, taskName, taskName, outputProperty, language), language);

result.ProjectPath.ShouldNotBeNullOrWhiteSpace();
result.MsBuild.Count.ShouldBeGreaterThan(0);
result.MsBuild.OverallSuccess.ShouldBe(true);
result.MsBuild.ShouldAllBe(x => x.Succeeded);
result.Output.ShouldNotBeNullOrWhiteSpace();

var generatedFilePath = PathHelper.Combine(Path.GetDirectoryName(result.ProjectPath), "AssemblyInfo.g.cs");
var generatedFilePath = PathHelper.Combine(Path.GetDirectoryName(result.ProjectPath), $"AssemblyInfo.g.{extension}");
result.Output.ShouldContain($"{outputProperty}: {generatedFilePath}");

var fileContent = File.ReadAllText(generatedFilePath);
fileContent.ShouldContain(@"[assembly: AssemblyVersion(""1.0.1.0"")]");
fileContent.ShouldContain(@"assembly: AssemblyVersion(""1.0.1.0"")");
}

[Test]
public void UpdateAssemblyInfoTaskShouldCreateFileWhenIntermediateOutputPathDoesNotExist()
[TestCaseSource(nameof(Languages))]
public void UpdateAssemblyInfoTaskShouldCreateFileWhenIntermediateOutputPathDoesNotExist(string language)
{
var task = new UpdateAssemblyInfo { IntermediateOutputPath = Guid.NewGuid().ToString("N") };
var extension = FileHelper.GetFileExtension(language);
var task = new UpdateAssemblyInfo { Language = language, IntermediateOutputPath = Guid.NewGuid().ToString("N") };

using var result = ExecuteMsBuildTask(task);

result.Success.ShouldBe(true);
result.Errors.ShouldBe(0);
result.Task.AssemblyInfoTempFilePath.ShouldNotBeNull();
result.Task.AssemblyInfoTempFilePath.ShouldMatch($@"AssemblyInfo.*\.g\.{extension}");

var fileContent = File.ReadAllText(result.Task.AssemblyInfoTempFilePath);
fileContent.ShouldContain(@"[assembly: AssemblyVersion(""1.2.4.0"")]");
fileContent.ShouldContain(@"assembly: AssemblyVersion(""1.2.4.0"")");
}

[Test]
public void UpdateAssemblyInfoTaskShouldCreateFileWhenIntermediateOutputPathDoesNotExistInBuildServer()
[TestCaseSource(nameof(Languages))]
public void UpdateAssemblyInfoTaskShouldCreateFileWhenIntermediateOutputPathDoesNotExistInBuildServer(string language)
{
var task = new UpdateAssemblyInfo { IntermediateOutputPath = Guid.NewGuid().ToString("N") };
var extension = FileHelper.GetFileExtension(language);
var task = new UpdateAssemblyInfo { Language = language, IntermediateOutputPath = Guid.NewGuid().ToString("N") };

using var result = ExecuteMsBuildTaskInAzurePipeline(task);

result.Success.ShouldBe(true);
result.Errors.ShouldBe(0);
result.Task.AssemblyInfoTempFilePath.ShouldNotBeNull();
result.Task.AssemblyInfoTempFilePath.ShouldMatch($@"AssemblyInfo.*\.g\.{extension}");

var fileContent = File.ReadAllText(result.Task.AssemblyInfoTempFilePath);
fileContent.ShouldContain(@"[assembly: AssemblyVersion(""1.0.1.0"")]");
fileContent.ShouldContain(@"assembly: AssemblyVersion(""1.0.1.0"")");
}

[Test]
public void UpdateAssemblyInfoTaskShouldCreateFileWhenRunWithMsBuildAndIntermediateOutputPathDoesNotExist()
[TestCaseSource(nameof(Languages))]
public void UpdateAssemblyInfoTaskShouldCreateFileWhenRunWithMsBuildAndIntermediateOutputPathDoesNotExist(string language)
{
const string taskName = nameof(UpdateAssemblyInfo);
const string outputProperty = nameof(UpdateAssemblyInfo.AssemblyInfoTempFilePath);
var randDir = Guid.NewGuid().ToString("N");

using var result = ExecuteMsBuildExe(project => AddUpdateAssemblyInfoTask(project, taskName, taskName, outputProperty, Path.Combine("$(MSBuildProjectDirectory)", randDir)));
var extension = FileHelper.GetFileExtension(language);
using var result = ExecuteMsBuildExe(project =>
{
var intermediateOutputPath = Path.Combine("$(MSBuildProjectDirectory)", randDir);
AddUpdateAssemblyInfoTask(project, taskName, taskName, outputProperty, language, intermediateOutputPath);
}, language);

result.ProjectPath.ShouldNotBeNullOrWhiteSpace();
result.MsBuild.Count.ShouldBeGreaterThan(0);
result.MsBuild.OverallSuccess.ShouldBe(true);
result.MsBuild.ShouldAllBe(x => x.Succeeded);
result.Output.ShouldNotBeNullOrWhiteSpace();

var generatedFilePath = PathHelper.Combine(Path.GetDirectoryName(result.ProjectPath), randDir, "AssemblyInfo.g.cs");
var generatedFilePath = PathHelper.Combine(Path.GetDirectoryName(result.ProjectPath), randDir, $"AssemblyInfo.g.{extension}");
result.Output.ShouldContain($"{outputProperty}: {generatedFilePath}");

var fileContent = File.ReadAllText(generatedFilePath);
fileContent.ShouldContain(@"[assembly: AssemblyVersion(""1.2.4.0"")]");
fileContent.ShouldContain(@"assembly: AssemblyVersion(""1.2.4.0"")");
}

[Test]
public void UpdateAssemblyInfoTaskShouldCreateFileWhenRunWithMsBuildAndIntermediateOutputPathDoesNotExistInBuildServer()
[TestCaseSource(nameof(Languages))]
public void UpdateAssemblyInfoTaskShouldCreateFileWhenRunWithMsBuildAndIntermediateOutputPathDoesNotExistInBuildServer(string language)
{
const string taskName = nameof(UpdateAssemblyInfo);
const string outputProperty = nameof(UpdateAssemblyInfo.AssemblyInfoTempFilePath);
var randDir = Guid.NewGuid().ToString("N");

using var result = ExecuteMsBuildExeInAzurePipeline(project => AddUpdateAssemblyInfoTask(project, taskName, taskName, outputProperty, Path.Combine("$(MSBuildProjectDirectory)", randDir)));
var extension = FileHelper.GetFileExtension(language);
using var result = ExecuteMsBuildExeInAzurePipeline(project =>
{
var intermediateOutputPath = Path.Combine("$(MSBuildProjectDirectory)", randDir);
AddUpdateAssemblyInfoTask(project, taskName, taskName, outputProperty, language, intermediateOutputPath);
}, language);

result.ProjectPath.ShouldNotBeNullOrWhiteSpace();
result.MsBuild.Count.ShouldBeGreaterThan(0);
result.MsBuild.OverallSuccess.ShouldBe(true);
result.MsBuild.ShouldAllBe(x => x.Succeeded);
result.Output.ShouldNotBeNullOrWhiteSpace();

var generatedFilePath = PathHelper.Combine(Path.GetDirectoryName(result.ProjectPath), randDir, "AssemblyInfo.g.cs");
var generatedFilePath = PathHelper.Combine(Path.GetDirectoryName(result.ProjectPath), randDir, $"AssemblyInfo.g.{extension}");
result.Output.ShouldContain($"{outputProperty}: {generatedFilePath}");

var fileContent = File.ReadAllText(generatedFilePath);
fileContent.ShouldContain(@"[assembly: AssemblyVersion(""1.0.1.0"")]");
fileContent.ShouldContain(@"assembly: AssemblyVersion(""1.0.1.0"")");
}

private static void AddUpdateAssemblyInfoTask(ProjectCreator project, string targetToRun, string taskName, string outputProperty, string intermediateOutputPath = "$(MSBuildProjectDirectory)")
private static void AddUpdateAssemblyInfoTask(ProjectCreator project, string targetToRun, string taskName,
string outputProperty, string language,
string intermediateOutputPath = "$(MSBuildProjectDirectory)")
{
var assemblyFileLocation = typeof(GitVersionTaskBase).Assembly.Location;
project.UsingTaskAssemblyFile(taskName, assemblyFileLocation)
.Property("ManagePackageVersionsCentrally", "false")
.Property("GenerateAssemblyInfo", "false")
.Property("Language", language)
.Target(targetToRun, beforeTargets: "CoreCompile;GetAssemblyVersion;GenerateNuspec")
.Task(taskName, parameters: new Dictionary<string, string?>
{
Expand Down
3 changes: 2 additions & 1 deletion src/GitVersion.MsBuild.Tests/Tasks/WriteVersionInfoTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,8 @@ public void WriteVersionInfoTaskShouldLogOutputVariablesToBuildOutputWhenRunWith
{
const string taskName = nameof(WriteVersionInfoToBuildLog);

using var result = ExecuteMsBuildExeInAzurePipeline(project => AddWriteVersionInfoToBuildLogTask(project, taskName, taskName));
using var result = ExecuteMsBuildExeInAzurePipeline(project =>
AddWriteVersionInfoToBuildLogTask(project, taskName, taskName));

result.ProjectPath.ShouldNotBeNullOrWhiteSpace();
result.MsBuild.Count.ShouldBeGreaterThan(0);
Expand Down
8 changes: 8 additions & 0 deletions src/GitVersion.MsBuild/Helpers/FileHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,14 @@ public static void DeleteTempFiles()
_ => throw new ArgumentException($"Unknown language detected: '{language}'")
};

public static string GetProjectExtension(string language) => language switch
{
"C#" => "csproj",
"F#" => "fsproj",
"VB" => "vbproj",
_ => throw new ArgumentException($"Unknown language detected: '{language}'")
};

public static void CheckForInvalidFiles(IEnumerable<ITaskItem> compileFiles, string projectFile)
{
if (GetInvalidFiles(compileFiles, projectFile).FirstOrDefault() is { } invalidCompileFile)
Expand Down

0 comments on commit 0ae2c0b

Please sign in to comment.