Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 0 additions & 6 deletions global.json

This file was deleted.

19 changes: 12 additions & 7 deletions src/Moryx.Cli.Templates/Solution.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,19 +14,24 @@ public static void Assert(string dir, Action<string> then, Action<string> onErro

public static string GetSolutionName(string dir, Action<string> onError)
{
var files = Directory.GetFiles(dir, "*.slnx");
if (files.Length == 0)
return GetSolutionName(Directory.GetFiles(dir, "*.sln*"), onError);
}

public static string GetSolutionName(string[] files, Action<string> onError)
{
string[] filteredFiles = [.. files.Where(f => f.EndsWith(".slnx"))];
if (filteredFiles.Length == 0)
{
files = Directory.GetFiles(dir, "*.sln");
filteredFiles = [.. files.Where(f => f.EndsWith(".sln"))];
}

if (files.Length > 1)
if (filteredFiles.Length > 0)
{
if (files.Length == 1)
if (filteredFiles.Length == 1)
{
return Path.GetFileNameWithoutExtension(files[0]);
return Path.GetFileNameWithoutExtension(filteredFiles[0]);
}
if (files.Length > 1)
if (filteredFiles.Length > 1)
{
onError("Too many _solutions_ found. Please make sure, there is only one solution.");
return "";
Expand Down
85 changes: 85 additions & 0 deletions src/Tests/Moryx.Cli.Tests/Templates/SolutionTests/SolutionTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
using Moq;
using Moryx.Cli.Templates;
using Moryx.Cli.Templates.Models;
using static Microsoft.CodeAnalysis.CSharp.SyntaxTokenParser;

namespace Moryx.Cli.Tests.Templates.SolutionTests
{
public class SolutionTests
{
private const string SlnFilename = "Project1.sln";
private const string SlnxFilename = "Project1x.slnx";
private TemplateConfiguration _templateConfiguration = new();
private Template _template;

Check warning on line 13 in src/Tests/Moryx.Cli.Tests/Templates/SolutionTests/SolutionTests.cs

View workflow job for this annotation

GitHub Actions / Tests / Tests

The field 'SolutionTests._template' is never used

Check warning on line 13 in src/Tests/Moryx.Cli.Tests/Templates/SolutionTests/SolutionTests.cs

View workflow job for this annotation

GitHub Actions / Tests / Tests

Non-nullable field '_template' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the field as nullable.

Check warning on line 13 in src/Tests/Moryx.Cli.Tests/Templates/SolutionTests/SolutionTests.cs

View workflow job for this annotation

GitHub Actions / Build-Publish

The field 'SolutionTests._template' is never used

Check warning on line 13 in src/Tests/Moryx.Cli.Tests/Templates/SolutionTests/SolutionTests.cs

View workflow job for this annotation

GitHub Actions / Build-Publish

Non-nullable field '_template' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the field as nullable.

Check warning on line 13 in src/Tests/Moryx.Cli.Tests/Templates/SolutionTests/SolutionTests.cs

View workflow job for this annotation

GitHub Actions / Build-Publish

The field 'SolutionTests._template' is never used

Check warning on line 13 in src/Tests/Moryx.Cli.Tests/Templates/SolutionTests/SolutionTests.cs

View workflow job for this annotation

GitHub Actions / Build-Publish

Non-nullable field '_template' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the field as nullable.

[SetUp]
public void Setup()
{
var settingsMock = new Mock<TemplateSettings>();
settingsMock.SetupGet(m => m.SourceDirectory).Returns(DummyFileList.SourceDir());
}

[Test]
public void SingleSlnFileWillReturnFilename()
{
string[] files = [SlnFilename, "Class1.cs"];

var result = Solution.GetSolutionName(files, Assert.Fail);

Assert.That(result, Is.EqualTo("Project1"));
}

[Test]
public void SingleSlnxFileWillReturnFilename()
{
string[] files = [SlnxFilename, "Class1.cs"];

var result = Solution.GetSolutionName(files, Assert.Fail);

Assert.That(result, Is.EqualTo("Project1x"));
}

[Test]
public void SingleSlnAndSingleSlnxCanCoexistPrioritizingSlnx()
{
string[] files = [SlnxFilename, SlnFilename];

var result = Solution.GetSolutionName(files, Assert.Fail);

Assert.That(result, Is.EqualTo("Project1x"));
}

[Test]
public void MultipleSlnFilesWillResultInError()
{
string[] files = [SlnFilename, "Project2.sln", "Project3.sln"];
var errorDelegate = new Mock<Action<string>>();

var result = Solution.GetSolutionName(files, errorDelegate.Object);

errorDelegate.Verify(m => m("Too many _solutions_ found. Please make sure, there is only one solution."), Times.Once);
}

[Test]
public void MultipleSlnxFilesWillResultInError()
{
string[] files = [SlnxFilename, "Project2.slnx", "Project3.slnx"];
var errorDelegate = new Mock<Action<string>>();

var result = Solution.GetSolutionName(files, errorDelegate.Object);

errorDelegate.Verify(m => m("Too many _solutions_ found. Please make sure, there is only one solution."), Times.Once);
}

[Test]
public void NoSlnOrSlnxFilesWillResultInError()
{
string[] files = ["Class1.cs", "Class2.cs"];
var errorDelegate = new Mock<Action<string>>();

var result = Solution.GetSolutionName(files, errorDelegate.Object);

errorDelegate.Verify(m => m("No _solutions_ found. Please make sure, there is a VisualStudio solution in this directory."), Times.Once);
}
}
}