From 8b7396dc80d690c78c3600aa917111e76fab12bc Mon Sep 17 00:00:00 2001
From: Tom Longhurst <30480171+thomhurst@users.noreply.github.com>
Date: Thu, 23 Jan 2025 16:35:22 +0000
Subject: [PATCH 1/2] Add ASP.NET `dotnet new` Template
---
Directory.Packages.props | 12 ++++--
TUnit.Templates/content/Directory.Build.props | 2 +-
.../.template.config/template.json | 20 +++++++++
.../TestProject/TestProject.csproj | 18 ++++++++
.../content/TUnit.AspNet/TestProject/Tests.cs | 19 +++++++++
.../TestProject/WebApplicationFactory.cs | 14 +++++++
.../content/TUnit.AspNet/WebApp/Program.cs | 13 ++++++
.../WebApp/Properties/launchSettings.json | 41 +++++++++++++++++++
.../content/TUnit.AspNet/WebApp/WebApp.csproj | 14 +++++++
.../content/TUnit.AspNet/WebApp/WebApp.http | 6 +++
.../WebApp/appsettings.Development.json | 8 ++++
.../TUnit.AspNet/WebApp/appsettings.json | 9 ++++
TUnit.sln | 24 ++++++++++-
13 files changed, 195 insertions(+), 5 deletions(-)
create mode 100644 TUnit.Templates/content/TUnit.AspNet/TestProject/.template.config/template.json
create mode 100644 TUnit.Templates/content/TUnit.AspNet/TestProject/TestProject.csproj
create mode 100644 TUnit.Templates/content/TUnit.AspNet/TestProject/Tests.cs
create mode 100644 TUnit.Templates/content/TUnit.AspNet/TestProject/WebApplicationFactory.cs
create mode 100644 TUnit.Templates/content/TUnit.AspNet/WebApp/Program.cs
create mode 100644 TUnit.Templates/content/TUnit.AspNet/WebApp/Properties/launchSettings.json
create mode 100644 TUnit.Templates/content/TUnit.AspNet/WebApp/WebApp.csproj
create mode 100644 TUnit.Templates/content/TUnit.AspNet/WebApp/WebApp.http
create mode 100644 TUnit.Templates/content/TUnit.AspNet/WebApp/appsettings.Development.json
create mode 100644 TUnit.Templates/content/TUnit.AspNet/WebApp/appsettings.json
diff --git a/Directory.Packages.props b/Directory.Packages.props
index d3d7bfe0c8..e8cbb0fc48 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -48,8 +48,14 @@
-
-
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
@@ -65,4 +71,4 @@
-
+
\ No newline at end of file
diff --git a/TUnit.Templates/content/Directory.Build.props b/TUnit.Templates/content/Directory.Build.props
index 91a726632a..621de2131d 100644
--- a/TUnit.Templates/content/Directory.Build.props
+++ b/TUnit.Templates/content/Directory.Build.props
@@ -1,6 +1,6 @@
-
+
diff --git a/TUnit.Templates/content/TUnit.AspNet/TestProject/.template.config/template.json b/TUnit.Templates/content/TUnit.AspNet/TestProject/.template.config/template.json
new file mode 100644
index 0000000000..772e07bd94
--- /dev/null
+++ b/TUnit.Templates/content/TUnit.AspNet/TestProject/.template.config/template.json
@@ -0,0 +1,20 @@
+{
+ "$schema": "http://json.schemastore.org/template",
+ "author": "Tom Longhurst",
+ "description": "Templates for getting started with TUnit",
+ "classifications": [
+ "Test",
+ "TUnit"
+ ],
+ "name": "TUnit Test Project",
+ "identity": "TUnit.Test.Project",
+ "groupIdentity": "TUnit",
+ "shortName": "TUnit",
+ "tags": {
+ "language": "C#",
+ "type": "project"
+ },
+ "sourceName": "TestProject",
+ "preferNameDirectory": true
+ }
+
\ No newline at end of file
diff --git a/TUnit.Templates/content/TUnit.AspNet/TestProject/TestProject.csproj b/TUnit.Templates/content/TUnit.AspNet/TestProject/TestProject.csproj
new file mode 100644
index 0000000000..8285bda86e
--- /dev/null
+++ b/TUnit.Templates/content/TUnit.AspNet/TestProject/TestProject.csproj
@@ -0,0 +1,18 @@
+
+
+
+ enable
+ enable
+ Exe
+ net8.0
+
+
+
+
+
+
+
+
+
+
+
diff --git a/TUnit.Templates/content/TUnit.AspNet/TestProject/Tests.cs b/TUnit.Templates/content/TUnit.AspNet/TestProject/Tests.cs
new file mode 100644
index 0000000000..10335f18d2
--- /dev/null
+++ b/TUnit.Templates/content/TUnit.AspNet/TestProject/Tests.cs
@@ -0,0 +1,19 @@
+namespace TestProject;
+
+public class Tests
+{
+ [ClassDataSource(Shared = SharedType.PerTestSession)]
+ public required WebApplicationFactory WebApplicationFactory { get; init; }
+
+ [Test]
+ public async Task Test()
+ {
+ var client = WebApplicationFactory.CreateClient();
+
+ var response = await client.GetAsync("/ping");
+
+ var stringContent = await response.Content.ReadAsStringAsync();
+
+ await Assert.That(stringContent).IsEqualTo("Hello, World!");
+ }
+}
\ No newline at end of file
diff --git a/TUnit.Templates/content/TUnit.AspNet/TestProject/WebApplicationFactory.cs b/TUnit.Templates/content/TUnit.AspNet/TestProject/WebApplicationFactory.cs
new file mode 100644
index 0000000000..25f32fe395
--- /dev/null
+++ b/TUnit.Templates/content/TUnit.AspNet/TestProject/WebApplicationFactory.cs
@@ -0,0 +1,14 @@
+using Microsoft.AspNetCore.Mvc.Testing;
+using TUnit.Core.Interfaces;
+
+namespace TestProject;
+
+public class WebApplicationFactory : WebApplicationFactory, IAsyncInitializer
+{
+ public Task InitializeAsync()
+ {
+ _ = Server;
+
+ return Task.CompletedTask;
+ }
+}
\ No newline at end of file
diff --git a/TUnit.Templates/content/TUnit.AspNet/WebApp/Program.cs b/TUnit.Templates/content/TUnit.AspNet/WebApp/Program.cs
new file mode 100644
index 0000000000..8842d6ecde
--- /dev/null
+++ b/TUnit.Templates/content/TUnit.AspNet/WebApp/Program.cs
@@ -0,0 +1,13 @@
+var builder = WebApplication.CreateBuilder(args);
+
+builder.Services.AddEndpointsApiExplorer();
+
+var app = builder.Build();
+
+app.UseHttpsRedirection();
+
+app.MapGet("/ping", () => "Hello, World!");
+
+app.Run();
+
+public partial class Program;
\ No newline at end of file
diff --git a/TUnit.Templates/content/TUnit.AspNet/WebApp/Properties/launchSettings.json b/TUnit.Templates/content/TUnit.AspNet/WebApp/Properties/launchSettings.json
new file mode 100644
index 0000000000..ae6d71d792
--- /dev/null
+++ b/TUnit.Templates/content/TUnit.AspNet/WebApp/Properties/launchSettings.json
@@ -0,0 +1,41 @@
+{
+ "$schema": "http://json.schemastore.org/launchsettings.json",
+ "iisSettings": {
+ "windowsAuthentication": false,
+ "anonymousAuthentication": true,
+ "iisExpress": {
+ "applicationUrl": "http://localhost:24820",
+ "sslPort": 44340
+ }
+ },
+ "profiles": {
+ "http": {
+ "commandName": "Project",
+ "dotnetRunMessages": true,
+ "launchBrowser": true,
+ "launchUrl": "swagger",
+ "applicationUrl": "http://localhost:5298",
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ }
+ },
+ "https": {
+ "commandName": "Project",
+ "dotnetRunMessages": true,
+ "launchBrowser": true,
+ "launchUrl": "swagger",
+ "applicationUrl": "https://localhost:7061;http://localhost:5298",
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ }
+ },
+ "IIS Express": {
+ "commandName": "IISExpress",
+ "launchBrowser": true,
+ "launchUrl": "swagger",
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ }
+ }
+ }
+}
diff --git a/TUnit.Templates/content/TUnit.AspNet/WebApp/WebApp.csproj b/TUnit.Templates/content/TUnit.AspNet/WebApp/WebApp.csproj
new file mode 100644
index 0000000000..2039e8368c
--- /dev/null
+++ b/TUnit.Templates/content/TUnit.AspNet/WebApp/WebApp.csproj
@@ -0,0 +1,14 @@
+
+
+
+ net8.0
+ enable
+ enable
+
+
+
+
+
+
+
+
diff --git a/TUnit.Templates/content/TUnit.AspNet/WebApp/WebApp.http b/TUnit.Templates/content/TUnit.AspNet/WebApp/WebApp.http
new file mode 100644
index 0000000000..ddb8d4620e
--- /dev/null
+++ b/TUnit.Templates/content/TUnit.AspNet/WebApp/WebApp.http
@@ -0,0 +1,6 @@
+@WebApp_HostAddress = http://localhost:5298
+
+GET {{WebApp_HostAddress}}/weatherforecast/
+Accept: application/json
+
+###
diff --git a/TUnit.Templates/content/TUnit.AspNet/WebApp/appsettings.Development.json b/TUnit.Templates/content/TUnit.AspNet/WebApp/appsettings.Development.json
new file mode 100644
index 0000000000..0c208ae918
--- /dev/null
+++ b/TUnit.Templates/content/TUnit.AspNet/WebApp/appsettings.Development.json
@@ -0,0 +1,8 @@
+{
+ "Logging": {
+ "LogLevel": {
+ "Default": "Information",
+ "Microsoft.AspNetCore": "Warning"
+ }
+ }
+}
diff --git a/TUnit.Templates/content/TUnit.AspNet/WebApp/appsettings.json b/TUnit.Templates/content/TUnit.AspNet/WebApp/appsettings.json
new file mode 100644
index 0000000000..10f68b8c8b
--- /dev/null
+++ b/TUnit.Templates/content/TUnit.AspNet/WebApp/appsettings.json
@@ -0,0 +1,9 @@
+{
+ "Logging": {
+ "LogLevel": {
+ "Default": "Information",
+ "Microsoft.AspNetCore": "Warning"
+ }
+ },
+ "AllowedHosts": "*"
+}
diff --git a/TUnit.sln b/TUnit.sln
index bd95cdede5..16ea6e3eff 100644
--- a/TUnit.sln
+++ b/TUnit.sln
@@ -71,6 +71,16 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TUnit.Engine.Tests", "TUnit
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestProject", "TUnit.Templates\content\TUnit\TestProject.csproj", "{4BFDDFDB-96D9-42AA-85CE-9FBD017ACBE1}"
EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Templates", "Templates", "{835A7825-FC06-46E2-B3B1-2BF791A22B97}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Basic", "Basic", "{1CE32FD7-4B3B-4639-B88F-67FB339461F2}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AspNet", "AspNet", "{23F41068-7C7E-435C-B6AB-4258B6380DC2}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestProject", "TUnit.Templates\content\TUnit.AspNet\TestProject\TestProject.csproj", "{2BCFDB65-AF9F-4CC4-B215-4C0035906F2A}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebApp", "TUnit.Templates\content\TUnit.AspNet\WebApp\WebApp.csproj", "{D778BF96-702F-4A59-A2D5-E348A3320E58}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -189,6 +199,14 @@ Global
{4BFDDFDB-96D9-42AA-85CE-9FBD017ACBE1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4BFDDFDB-96D9-42AA-85CE-9FBD017ACBE1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4BFDDFDB-96D9-42AA-85CE-9FBD017ACBE1}.Release|Any CPU.Build.0 = Release|Any CPU
+ {2BCFDB65-AF9F-4CC4-B215-4C0035906F2A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {2BCFDB65-AF9F-4CC4-B215-4C0035906F2A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {2BCFDB65-AF9F-4CC4-B215-4C0035906F2A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {2BCFDB65-AF9F-4CC4-B215-4C0035906F2A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D778BF96-702F-4A59-A2D5-E348A3320E58}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D778BF96-702F-4A59-A2D5-E348A3320E58}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D778BF96-702F-4A59-A2D5-E348A3320E58}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D778BF96-702F-4A59-A2D5-E348A3320E58}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -217,7 +235,11 @@ Global
{744CD312-B913-48E0-B917-531ED2A9A541} = {503DA9FA-045D-4910-8AF6-905E6048B1F1}
{54D5F1A7-7979-4C07-8FE1-426233846018} = {503DA9FA-045D-4910-8AF6-905E6048B1F1}
{E0E07E64-BC0A-489E-B562-2982F3836994} = {62AD1EAF-43C4-4AC0-B9FA-CD59739B3850}
- {4BFDDFDB-96D9-42AA-85CE-9FBD017ACBE1} = {0BA988BF-ADCE-4343-9098-B4EF65C43709}
+ {1CE32FD7-4B3B-4639-B88F-67FB339461F2} = {835A7825-FC06-46E2-B3B1-2BF791A22B97}
+ {4BFDDFDB-96D9-42AA-85CE-9FBD017ACBE1} = {1CE32FD7-4B3B-4639-B88F-67FB339461F2}
+ {23F41068-7C7E-435C-B6AB-4258B6380DC2} = {835A7825-FC06-46E2-B3B1-2BF791A22B97}
+ {2BCFDB65-AF9F-4CC4-B215-4C0035906F2A} = {23F41068-7C7E-435C-B6AB-4258B6380DC2}
+ {D778BF96-702F-4A59-A2D5-E348A3320E58} = {23F41068-7C7E-435C-B6AB-4258B6380DC2}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {109D285A-36B3-4503-BCDF-8E26FB0E2C5B}
From 7ad932048024e41e047c913ee9907831cc1e1a00 Mon Sep 17 00:00:00 2001
From: Tom Longhurst <30480171+thomhurst@users.noreply.github.com>
Date: Thu, 23 Jan 2025 16:52:37 +0000
Subject: [PATCH 2/2] Fix
---
Directory.Packages.props | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/Directory.Packages.props b/Directory.Packages.props
index c456152b33..f750cf9f97 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -48,11 +48,11 @@
-
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive