110 lines
4.8 KiB
C#
110 lines
4.8 KiB
C#
using Sdt.Config;
|
|
using Xunit;
|
|
|
|
namespace DevTool.Tests;
|
|
|
|
public sealed class ConfigBootstrapperMatrixTests
|
|
{
|
|
[Fact]
|
|
public void DotnetProject_GeneratesDotnetCoreWorkflows()
|
|
{
|
|
var root = CreateTempDir("sdt-matrix-dotnet-");
|
|
File.WriteAllText(Path.Combine(root, "sample.sln"), "");
|
|
|
|
var scan = ConfigBootstrapper.Scan(root);
|
|
var config = ConfigBootstrapper.BuildDefaultConfig(scan);
|
|
|
|
var build = config.Workflows.FirstOrDefault(w => w.Id == "build");
|
|
var deps = config.Workflows.FirstOrDefault(w => w.Id == "deps-refresh");
|
|
var test = config.Workflows.FirstOrDefault(w => w.Id == "test");
|
|
|
|
Assert.NotNull(build);
|
|
Assert.NotNull(deps);
|
|
Assert.NotNull(test);
|
|
Assert.Contains(build!.Steps, s => s.Action == "dotnet-build");
|
|
Assert.Contains(deps!.Steps, s => s.Action == "dotnet-restore");
|
|
Assert.Contains(test!.Steps, s => s.Action == "dotnet-test");
|
|
}
|
|
|
|
[Fact]
|
|
public void NodeProject_GeneratesNodeCoreWorkflows()
|
|
{
|
|
var root = CreateTempDir("sdt-matrix-node-");
|
|
File.WriteAllText(Path.Combine(root, "package.json"), """{ "name": "demo", "scripts": { "build": "echo build", "test": "echo test" } }""");
|
|
|
|
var scan = ConfigBootstrapper.Scan(root);
|
|
var config = ConfigBootstrapper.BuildDefaultConfig(scan);
|
|
|
|
var build = config.Workflows.FirstOrDefault(w => w.Id == "build");
|
|
var deps = config.Workflows.FirstOrDefault(w => w.Id == "deps-refresh");
|
|
var test = config.Workflows.FirstOrDefault(w => w.Id == "test");
|
|
|
|
Assert.NotNull(build);
|
|
Assert.NotNull(deps);
|
|
Assert.NotNull(test);
|
|
Assert.Contains(build!.Steps, s => s.Action == "npm-build");
|
|
Assert.Contains(deps!.Steps, s => s.Action == "npm-ci");
|
|
Assert.Contains(test!.Steps, s => s.Action == "npm-test");
|
|
}
|
|
|
|
[Fact]
|
|
public void TauriCargoProject_GeneratesTauriAndCargoWorkflows()
|
|
{
|
|
var root = CreateTempDir("sdt-matrix-tauri-");
|
|
File.WriteAllText(Path.Combine(root, "package.json"), """{ "name": "demo", "scripts": { "build": "echo build" } }""");
|
|
File.WriteAllText(Path.Combine(root, "Cargo.toml"), "[package]\nname=\"demo\"\nversion=\"0.1.0\"");
|
|
File.WriteAllText(Path.Combine(root, "tauri.conf.json"), "{ }");
|
|
|
|
var scan = ConfigBootstrapper.Scan(root);
|
|
var config = ConfigBootstrapper.BuildDefaultConfig(scan);
|
|
|
|
var build = config.Workflows.FirstOrDefault(w => w.Id == "build");
|
|
var deps = config.Workflows.FirstOrDefault(w => w.Id == "deps-refresh");
|
|
var test = config.Workflows.FirstOrDefault(w => w.Id == "test");
|
|
|
|
Assert.NotNull(build);
|
|
Assert.NotNull(deps);
|
|
Assert.NotNull(test);
|
|
Assert.Contains(build!.Steps, s => s.Action == "tauri-build");
|
|
Assert.Contains(build.Steps, s => s.Action == "cargo-build");
|
|
Assert.Contains(deps!.Steps, s => s.Action == "npm-ci");
|
|
Assert.Contains(test!.Steps, s => s.Action == "cargo-test");
|
|
}
|
|
|
|
[Fact]
|
|
public void GoMavenGradle_ActionsRemainConservativeAndRunnable()
|
|
{
|
|
var root = CreateTempDir("sdt-matrix-jvm-go-");
|
|
File.WriteAllText(Path.Combine(root, "go.mod"), "module example.com/demo");
|
|
File.WriteAllText(Path.Combine(root, "pom.xml"), "<project/>");
|
|
File.WriteAllText(Path.Combine(root, "build.gradle"), "plugins {}");
|
|
|
|
var scan = ConfigBootstrapper.Scan(root);
|
|
var config = ConfigBootstrapper.BuildDefaultConfig(scan);
|
|
|
|
var build = config.Workflows.First(w => w.Id == "build");
|
|
var deps = config.Workflows.First(w => w.Id == "deps-refresh");
|
|
var test = config.Workflows.First(w => w.Id == "test");
|
|
|
|
Assert.Contains(build.Steps, s => s.Command == "go" && s.Args.SequenceEqual(["build", "./..."]));
|
|
Assert.Contains(build.Steps, s => s.Command == "mvn" && s.Args.SequenceEqual(["package", "-DskipTests"]));
|
|
Assert.Contains(build.Steps, s => s.Command == "gradle" && s.Args.SequenceEqual(["build"]));
|
|
|
|
Assert.Contains(deps.Steps, s => s.Command == "go" && s.Args.SequenceEqual(["mod", "download"]));
|
|
Assert.Contains(deps.Steps, s => s.Command == "mvn" && s.Args.SequenceEqual(["dependency:resolve"]));
|
|
Assert.Contains(deps.Steps, s => s.Command == "gradle" && s.Args.SequenceEqual(["dependencies"]));
|
|
|
|
Assert.Contains(test.Steps, s => s.Command == "go" && s.Args.SequenceEqual(["test", "./..."]));
|
|
Assert.Contains(test.Steps, s => s.Command == "mvn" && s.Args.SequenceEqual(["test"]));
|
|
Assert.Contains(test.Steps, s => s.Command == "gradle" && s.Args.SequenceEqual(["test"]));
|
|
}
|
|
|
|
private static string CreateTempDir(string prefix)
|
|
{
|
|
var path = Path.Combine(Path.GetTempPath(), prefix + Guid.NewGuid().ToString("N"));
|
|
Directory.CreateDirectory(path);
|
|
return path;
|
|
}
|
|
}
|
|
|