Skip to content

Commit dcf313c

Browse files
committed
Add tests for finding solution files and update code accordingly
1 parent d527923 commit dcf313c

File tree

3 files changed

+97
-13
lines changed

3 files changed

+97
-13
lines changed

global.json

Lines changed: 0 additions & 6 deletions
This file was deleted.

src/Moryx.Cli.Templates/Solution.cs

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,19 +14,24 @@ public static void Assert(string dir, Action<string> then, Action<string> onErro
1414

1515
public static string GetSolutionName(string dir, Action<string> onError)
1616
{
17-
var files = Directory.GetFiles(dir, "*.slnx");
18-
if (files.Length == 0)
17+
return GetSolutionName(Directory.GetFiles(dir, "*.sln*"), onError);
18+
}
19+
20+
public static string GetSolutionName(string[] files, Action<string> onError)
21+
{
22+
string[] filteredFiles = [.. files.Where(f => f.EndsWith(".slnx"))];
23+
if (filteredFiles.Length == 0)
1924
{
20-
files = Directory.GetFiles(dir, "*.sln");
25+
filteredFiles = [.. files.Where(f => f.EndsWith(".sln"))];
2126
}
2227

23-
if (files.Length > 1)
28+
if (filteredFiles.Length > 0)
2429
{
25-
if (files.Length == 1)
30+
if (filteredFiles.Length == 1)
2631
{
27-
return Path.GetFileNameWithoutExtension(files[0]);
32+
return Path.GetFileNameWithoutExtension(filteredFiles[0]);
2833
}
29-
if (files.Length > 1)
34+
if (filteredFiles.Length > 1)
3035
{
3136
onError("Too many _solutions_ found. Please make sure, there is only one solution.");
3237
return "";
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
using Moq;
2+
using Moryx.Cli.Templates;
3+
using Moryx.Cli.Templates.Models;
4+
using static Microsoft.CodeAnalysis.CSharp.SyntaxTokenParser;
5+
6+
namespace Moryx.Cli.Tests.Templates.SolutionTests
7+
{
8+
public class SolutionTests
9+
{
10+
private const string SlnFilename = "Project1.sln";
11+
private const string SlnxFilename = "Project1x.slnx";
12+
private TemplateConfiguration _templateConfiguration = new();
13+
private Template _template;
14+
15+
[SetUp]
16+
public void Setup()
17+
{
18+
var settingsMock = new Mock<TemplateSettings>();
19+
settingsMock.SetupGet(m => m.SourceDirectory).Returns(DummyFileList.SourceDir());
20+
}
21+
22+
[Test]
23+
public void SingleSlnFileWillReturnFilename()
24+
{
25+
string[] files = [SlnFilename, "Class1.cs"];
26+
27+
var result = Solution.GetSolutionName(files, Assert.Fail);
28+
29+
Assert.That(result, Is.EqualTo("Project1"));
30+
}
31+
32+
[Test]
33+
public void SingleSlnxFileWillReturnFilename()
34+
{
35+
string[] files = [SlnxFilename, "Class1.cs"];
36+
37+
var result = Solution.GetSolutionName(files, Assert.Fail);
38+
39+
Assert.That(result, Is.EqualTo("Project1x"));
40+
}
41+
42+
[Test]
43+
public void SingleSlnAndSingleSlnxCanCoexistPrioritizingSlnx()
44+
{
45+
string[] files = [SlnxFilename, SlnFilename];
46+
47+
var result = Solution.GetSolutionName(files, Assert.Fail);
48+
49+
Assert.That(result, Is.EqualTo("Project1x"));
50+
}
51+
52+
[Test]
53+
public void MultipleSlnFilesWillResultInError()
54+
{
55+
string[] files = [SlnFilename, "Project2.sln", "Project3.sln"];
56+
var errorDelegate = new Mock<Action<string>>();
57+
58+
var result = Solution.GetSolutionName(files, errorDelegate.Object);
59+
60+
errorDelegate.Verify(m => m("Too many _solutions_ found. Please make sure, there is only one solution."), Times.Once);
61+
}
62+
63+
[Test]
64+
public void MultipleSlnxFilesWillResultInError()
65+
{
66+
string[] files = [SlnxFilename, "Project2.slnx", "Project3.slnx"];
67+
var errorDelegate = new Mock<Action<string>>();
68+
69+
var result = Solution.GetSolutionName(files, errorDelegate.Object);
70+
71+
errorDelegate.Verify(m => m("Too many _solutions_ found. Please make sure, there is only one solution."), Times.Once);
72+
}
73+
74+
[Test]
75+
public void NoSlnOrSlnxFilesWillResultInError()
76+
{
77+
string[] files = ["Class1.cs", "Class2.cs"];
78+
var errorDelegate = new Mock<Action<string>>();
79+
80+
var result = Solution.GetSolutionName(files, errorDelegate.Object);
81+
82+
errorDelegate.Verify(m => m("No _solutions_ found. Please make sure, there is a VisualStudio solution in this directory."), Times.Once);
83+
}
84+
}
85+
}

0 commit comments

Comments
 (0)