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