Skip to content

Commit f013fed

Browse files
Improve templating tests
1 parent b7e122f commit f013fed

File tree

7 files changed

+198
-10
lines changed

7 files changed

+198
-10
lines changed

src/ProjectTemplates/test/EmptyWebTemplateTest.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,14 @@ public EmptyWebTemplateTest(ProjectFactoryFixture projectFactory, ITestOutputHel
2222

2323
public ITestOutputHelper Output { get; }
2424

25-
[Fact]
26-
public async Task EmptyWebTemplateAsync()
25+
[Theory]
26+
[InlineData(null)]
27+
[InlineData("F#")]
28+
public async Task EmptyWebTemplateAsync(string languageOverride)
2729
{
28-
Project = await ProjectFactory.GetOrCreateProject("empty", Output);
30+
Project = await ProjectFactory.GetOrCreateProject("empty" + (languageOverride == "F#" ? "fsharp" : "csharp"), Output);
2931

30-
var createResult = await Project.RunDotNetNewAsync("web");
32+
var createResult = await Project.RunDotNetNewAsync("web", language: languageOverride);
3133
Assert.True(0 == createResult.ExitCode, ErrorMessages.GetFailedProcessMessage("create/restore", Project, createResult));
3234

3335
var publishResult = await Project.RunDotNetPublishAsync();
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// Copyright (c) .NET Foundation. All rights reserved.
2+
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
3+
4+
using ProjectTemplates.Tests.Helpers;
5+
using Xunit;
6+
using Xunit.Abstractions;
7+
8+
namespace Templates.Test
9+
{
10+
public class GrpcTemplateTest
11+
{
12+
public GrpcTemplateTest(ProjectFactoryFixture factoryFixture, ITestOutputHelper output)
13+
{
14+
Project = factoryFixture.CreateProject(output);
15+
}
16+
17+
public Project Project { get; }
18+
19+
[Fact]
20+
public void GrpcTemplate()
21+
{
22+
Project.RunDotNetNew("grpc");
23+
Project.BuildProject();
24+
}
25+
}
26+
}

src/ProjectTemplates/test/Helpers/AspNetProcess.cs

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,37 @@ private Uri GetListeningUri(ITestOutputHelper output)
111111
}
112112
}
113113

114-
public Task AssertOk(string requestUrl)
114+
public async Task AssertLinksWork(string requestUrl)
115+
{
116+
var request = new HttpRequestMessage(
117+
HttpMethod.Get,
118+
new Uri(_listeningUri, requestUrl));
119+
120+
var response = await _httpClient.SendAsync(request);
121+
122+
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
123+
var parser = new HtmlParser();
124+
var html = await parser.ParseAsync(await response.Content.ReadAsStreamAsync());
125+
foreach (IHtmlAnchorElement link in html.Links)
126+
{
127+
if(link.Protocol == "about:")
128+
{
129+
AssertOk(link.PathName);
130+
}
131+
else
132+
{
133+
var result = await _httpClient.GetAsync(link.Href);
134+
Assert.True(IsSuccessStatusCode(result), $"{link.Href} is a broken link!");
135+
}
136+
}
137+
}
138+
139+
private bool IsSuccessStatusCode(HttpResponseMessage response)
140+
{
141+
return response.IsSuccessStatusCode || response.StatusCode == HttpStatusCode.Redirect;
142+
}
143+
144+
private void AssertOk(string requestUrl)
115145
=> AssertStatusCode(requestUrl, HttpStatusCode.OK);
116146

117147
public Task AssertNotFound(string requestUrl)
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
// Copyright (c) .NET Foundation. All rights reserved.
2+
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
3+
4+
using ProjectTemplates.Tests.Helpers;
5+
using Xunit;
6+
using Xunit.Abstractions;
7+
8+
namespace Templates.Test
9+
{
10+
public class RazorClassLibraryTemplateTest
11+
{
12+
public RazorClassLibraryTemplateTest(ProjectFactoryFixture factoryFixture, ITestOutputHelper output)
13+
{
14+
Project = factoryFixture.CreateProject(output);
15+
}
16+
17+
public Project Project { get; }
18+
19+
[Fact]
20+
public void RazorClassLibraryTemplate()
21+
{
22+
Project.RunDotNetNew("razorclasslib");
23+
24+
Project.BuildProject();
25+
}
26+
}
27+
}

src/ProjectTemplates/test/WebApiTemplateTest.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,14 @@ public WebApiTemplateTest(ProjectFactoryFixture factoryFixture, ITestOutputHelpe
2222

2323
public Project Project { get; set; }
2424

25-
[Fact]
26-
public async Task WebApiTemplateAsync()
25+
[Theory]
26+
[InlineData(null)]
27+
[InlineData("F#")]
28+
public async Task WebApiTemplateAsync(string languageOverride)
2729
{
28-
Project = await FactoryFixture.GetOrCreateProject("webapi", Output);
30+
Project = await FactoryFixture.GetOrCreateProject("webapi" + (languageOverride == "F#" ? "fsharp" : "csharp"), Output);
2931

30-
var createResult = await Project.RunDotNetNewAsync("webapi");
32+
var createResult = await Project.RunDotNetNewAsync("webapi", language: languageOverride);
3133
Assert.True(0 == createResult.ExitCode, ErrorMessages.GetFailedProcessMessage("create/restore", Project, createResult));
3234

3335
var publishResult = await Project.RunDotNetPublishAsync();
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// Copyright (c) .NET Foundation. All rights reserved.
2+
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
3+
4+
using ProjectTemplates.Tests.Helpers;
5+
using Xunit;
6+
using Xunit.Abstractions;
7+
8+
namespace Templates.Test
9+
{
10+
public class WorkerTemplateTest
11+
{
12+
public WorkerTemplateTest(ProjectFactoryFixture factoryFixture, ITestOutputHelper output)
13+
{
14+
Project = factoryFixture.CreateProject(output);
15+
}
16+
17+
public Project Project { get; }
18+
19+
[Fact(Skip = "Microsoft.NET.Sdk.Worker isn't available yet")]
20+
public void WorkerTemplate()
21+
{
22+
Project.RunDotNetNew("worker");
23+
Project.BuildProject();
24+
}
25+
}
26+
}

src/ProjectTemplates/test/template-baselines.json

Lines changed: 76 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -370,7 +370,7 @@
370370
}
371371
},
372372
"web": {
373-
"None": {
373+
"CSharp": {
374374
"Template": "web",
375375
"Arguments": "new web",
376376
"Files": [
@@ -381,6 +381,18 @@
381381
"Properties/launchSettings.json"
382382
],
383383
"AuthOption": "None"
384+
},
385+
"FSharp": {
386+
"Template": "web",
387+
"Arguments": "new web --language F#",
388+
"Files": [
389+
"appsettings.Development.json",
390+
"appsettings.json",
391+
"Program.fs",
392+
"Startup.fs",
393+
"Properties/launchSettings.json"
394+
],
395+
"AuthOption": "None"
384396
}
385397
},
386398
"webapi": {
@@ -435,6 +447,18 @@
435447
"Properties/launchSettings.json"
436448
],
437449
"AuthOption": "Windows"
450+
},
451+
"FSharp": {
452+
"Template": "webapi",
453+
"Arguments": "new webapi --language F#",
454+
"Files": [
455+
"appsettings.Development.json",
456+
"appsettings.json",
457+
"Program.fs",
458+
"Startup.fs",
459+
"Controllers/ValuesController.fs",
460+
"Properties/launchSettings.json"
461+
]
438462
}
439463
},
440464
"mvc": {
@@ -864,6 +888,57 @@
864888
]
865889
}
866890
},
891+
"razorcomponents": {
892+
"None": {
893+
"Template": "razorcomponents",
894+
"Arguments": "new razorcomponents",
895+
"Files": [
896+
"Components/Pages/_ViewImports.cshtml",
897+
"Components/Pages/Counter.razor",
898+
"Components/Pages/FetchData.razor",
899+
"Components/Pages/Index.razor",
900+
"Components/Shared/MainLayout.razor",
901+
"Components/Shared/NavMenu.razor",
902+
"Components/_ViewImports.cshtml",
903+
"Components/App.razor",
904+
"Pages/_ViewImports.cshtml",
905+
"Pages/Index.cshtml",
906+
"Properties/launchSettings.json",
907+
"Services/WeatherForecast.cs",
908+
"Services/WeatherForecastService.cs",
909+
"wwwroot/css/bootstrap/bootstrap.min.css",
910+
"wwwroot/css/bootstrap/bootstrap.min.css.map",
911+
"wwwroot/css/open-iconic/font/css/open-iconic-bootstrap.min.css",
912+
"wwwroot/css/open-iconic/font/fonts/open-iconic.eot",
913+
"wwwroot/css/open-iconic/font/fonts/open-iconic.otf",
914+
"wwwroot/css/open-iconic/font/fonts/open-iconic.svg",
915+
"wwwroot/css/open-iconic/font/fonts/open-iconic.ttf",
916+
"wwwroot/css/open-iconic/font/fonts/open-iconic.woff",
917+
"wwwroot/css/open-iconic/FONT-LICENSE",
918+
"wwwroot/css/open-iconic/ICON-LICENSE",
919+
"wwwroot/css/open-iconic/README.md",
920+
"wwwroot/css/site.css",
921+
"wwwroot/favicon.ico",
922+
"appsettings.Development.json",
923+
"appsettings.json",
924+
"Program.cs",
925+
"Startup.cs"
926+
]
927+
}
928+
},
929+
"worker": {
930+
"None": {
931+
"Template": "worker",
932+
"Arguments": "new worker",
933+
"Files": [
934+
"Properties/launchSettings.json",
935+
"appsettings.Development.json",
936+
"appsettings.json",
937+
"Program.cs",
938+
"Worker.cs"
939+
]
940+
}
941+
},
867942
"angular": {
868943
"None": {
869944
"Template": "angular",

0 commit comments

Comments
 (0)