Skip to content

Commit dd4d783

Browse files
committed
Revert "Revert "BlazorTemplate test improvements (#30907)" (#31223)"
This reverts commit 333134c.
1 parent 033b1fb commit dd4d783

File tree

8 files changed

+342
-251
lines changed

8 files changed

+342
-251
lines changed

src/ProjectTemplates/BlazorTemplates.Tests/AssemblyInfo.AssemblyFixtures.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
using ProjectTemplates.Tests.Infrastructure;
66
using Templates.Test;
77
using Templates.Test.Helpers;
8+
using Xunit;
89

910
[assembly: AssemblyFixture(typeof(ProjectFactoryFixture))]
10-
[assembly: AssemblyFixture(typeof(PlaywrightFixture<BlazorServerTemplateTest>))]
11+
[assembly: CollectionBehavior(DisableTestParallelization = true)]
1112

src/ProjectTemplates/BlazorTemplates.Tests/BlazorServerTemplateTest.cs

Lines changed: 45 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
using System.Collections.Generic;
66
using System.Linq;
77
using System.Net;
8-
using System.Runtime.InteropServices;
98
using System.Threading.Tasks;
109
using Microsoft.AspNetCore.BrowserTesting;
1110
using Microsoft.AspNetCore.Testing;
@@ -17,62 +16,47 @@
1716

1817
namespace Templates.Test
1918
{
19+
[TestCaseOrderer("Templates.Test.PriorityOrderer", "BlazorTemplates.Tests")]
2020
public class BlazorServerTemplateTest : BlazorTemplateTest
2121
{
22-
public BlazorServerTemplateTest(ProjectFactoryFixture projectFactory, PlaywrightFixture<BlazorServerTemplateTest> fixture, ITestOutputHelper output)
23-
: base(fixture)
22+
public BlazorServerTemplateTest(ProjectFactoryFixture projectFactory)
23+
: base(projectFactory)
2424
{
25-
ProjectFactory = projectFactory; ;
26-
Output = output;
27-
BrowserContextInfo = new ContextInformation(CreateFactory(output));
2825
}
2926

30-
public ProjectFactoryFixture ProjectFactory { get; set; }
31-
public ITestOutputHelper Output { get; }
32-
public ContextInformation BrowserContextInfo { get; }
33-
public Project Project { get; private set; }
27+
public override string ProjectType { get; } = "blazorserver";
3428

29+
// This test is required to run before BlazorServerTemplateWorks_NoAuth to create and build the project
30+
// If this test is quarantined, BlazorServerTemplateWorks_NoAuth must be quarantined as well
31+
[Fact, TestPriority(BUILDCREATEPUBLISH_PRIORITY)]
32+
public Task BlazorServerTemplate_CreateBuildPublish_NoAuth()
33+
=> CreateBuildPublishAsync("blazorservernoauth" + BrowserKind.Chromium.ToString());
3534

35+
// This tests depends on BlazorServerTemplate_CreateBuildPublish_NoAuth running first
3636
[Theory]
3737
[InlineData(BrowserKind.Chromium)]
3838
[QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/30761")]
3939
public async Task BlazorServerTemplateWorks_NoAuth(BrowserKind browserKind)
4040
{
41-
// Additional arguments are needed. See: https://github.com/dotnet/aspnetcore/issues/24278
42-
Environment.SetEnvironmentVariable("EnableDefaultScopedCssItems", "true");
41+
var project = await ProjectFactory.GetOrCreateProject("blazorservernoauth" + browserKind, Output);
4342

44-
Project = await ProjectFactory.GetOrCreateProject("blazorservernoauth" + browserKind.ToString(), Output);
45-
46-
var createResult = await Project.RunDotNetNewAsync("blazorserver");
47-
Assert.True(0 == createResult.ExitCode, ErrorMessages.GetFailedProcessMessage("create/restore", Project, createResult));
48-
49-
var publishResult = await Project.RunDotNetPublishAsync();
50-
Assert.True(0 == publishResult.ExitCode, ErrorMessages.GetFailedProcessMessage("publish", Project, publishResult));
51-
52-
// Run dotnet build after publish. The reason is that one uses Config = Debug and the other uses Config = Release
53-
// The output from publish will go into bin/Release/netcoreappX.Y/publish and won't be affected by calling build
54-
// later, while the opposite is not true.
55-
56-
var buildResult = await Project.RunDotNetBuildAsync();
57-
Assert.True(0 == buildResult.ExitCode, ErrorMessages.GetFailedProcessMessage("build", Project, buildResult));
58-
59-
await using var browser = Fixture.BrowserManager.IsAvailable(browserKind) ?
60-
await Fixture.BrowserManager.GetBrowserInstance(browserKind, BrowserContextInfo) :
43+
await using var browser = BrowserManager.IsAvailable(browserKind) ?
44+
await BrowserManager.GetBrowserInstance(browserKind, BrowserContextInfo) :
6145
null;
6246

63-
using (var aspNetProcess = Project.StartBuiltProjectAsync())
47+
using (var aspNetProcess = project.StartBuiltProjectAsync())
6448
{
6549
Assert.False(
6650
aspNetProcess.Process.HasExited,
67-
ErrorMessages.GetFailedProcessMessageOrEmpty("Run built project", Project, aspNetProcess.Process));
51+
ErrorMessages.GetFailedProcessMessageOrEmpty("Run built project", project, aspNetProcess.Process));
6852

6953
await aspNetProcess.AssertStatusCode("/", HttpStatusCode.OK, "text/html");
7054

71-
if (Fixture.BrowserManager.IsAvailable(browserKind))
55+
if (BrowserManager.IsAvailable(browserKind))
7256
{
7357
var page = await browser.NewPageAsync();
7458
await aspNetProcess.VisitInBrowserAsync(page);
75-
await TestBasicNavigation(page);
59+
await TestBasicNavigation(project, page);
7660
await page.CloseAsync();
7761
}
7862
else
@@ -81,18 +65,18 @@ await Fixture.BrowserManager.GetBrowserInstance(browserKind, BrowserContextInfo)
8165
}
8266
}
8367

84-
using (var aspNetProcess = Project.StartPublishedProjectAsync())
68+
using (var aspNetProcess = project.StartPublishedProjectAsync())
8569
{
8670
Assert.False(
8771
aspNetProcess.Process.HasExited,
88-
ErrorMessages.GetFailedProcessMessageOrEmpty("Run published project", Project, aspNetProcess.Process));
72+
ErrorMessages.GetFailedProcessMessageOrEmpty("Run published project", project, aspNetProcess.Process));
8973

9074
await aspNetProcess.AssertStatusCode("/", HttpStatusCode.OK, "text/html");
91-
if (Fixture.BrowserManager.IsAvailable(browserKind))
75+
if (BrowserManager.IsAvailable(browserKind))
9276
{
9377
var page = await browser.NewPageAsync();
9478
await aspNetProcess.VisitInBrowserAsync(page);
95-
await TestBasicNavigation(page);
79+
await TestBasicNavigation(project, page);
9680
await page.CloseAsync();
9781
}
9882
else
@@ -102,49 +86,41 @@ await Fixture.BrowserManager.GetBrowserInstance(browserKind, BrowserContextInfo)
10286
}
10387
}
10488

89+
// This test is required to run before BlazorServerTemplateWorks_IndividualAuth to create and build the project
90+
// If this test is quarantined, BlazorServerTemplateWorks_IndividualAuth must be quarantined as well
91+
[Theory, TestPriority(BUILDCREATEPUBLISH_PRIORITY)]
92+
[MemberData(nameof(BlazorServerTemplateWorks_IndividualAuthData))]
93+
public Task BlazorServerTemplate_CreateBuildPublish_IndividualAuth(BrowserKind browserKind, bool useLocalDB)
94+
=> CreateBuildPublishAsync("blazorserverindividual" + browserKind + (useLocalDB ? "uld" : ""));
95+
10596
public static IEnumerable<object[]> BlazorServerTemplateWorks_IndividualAuthData =>
10697
BrowserManager.WithBrowsers(new[] { BrowserKind.Chromium }, true, false);
10798

99+
// This tests depends on BlazorServerTemplate_CreateBuildPublish_IndividualAuth running first
108100
[Theory]
109101
[MemberData(nameof(BlazorServerTemplateWorks_IndividualAuthData))]
110102
[QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/30807")]
111103
[SkipOnHelix("https://github.com/dotnet/aspnetcore/issues/30825", Queues = "All.OSX")]
112104
public async Task BlazorServerTemplateWorks_IndividualAuth(BrowserKind browserKind, bool useLocalDB)
113105
{
114-
// Additional arguments are needed. See: https://github.com/dotnet/aspnetcore/issues/24278
115-
Environment.SetEnvironmentVariable("EnableDefaultScopedCssItems", "true");
116-
117-
Project = await ProjectFactory.GetOrCreateProject("blazorserverindividual" + browserKind + (useLocalDB ? "uld" : ""), Output);
118-
119-
var createResult = await Project.RunDotNetNewAsync("blazorserver", auth: "Individual", useLocalDB: useLocalDB);
120-
Assert.True(0 == createResult.ExitCode, ErrorMessages.GetFailedProcessMessage("create/restore", Project, createResult));
106+
var project = await ProjectFactory.GetOrCreateProject("blazorserverindividual" + browserKind + (useLocalDB ? "uld" : ""), Output);
121107

122-
var publishResult = await Project.RunDotNetPublishAsync();
123-
Assert.True(0 == publishResult.ExitCode, ErrorMessages.GetFailedProcessMessage("publish", Project, publishResult));
124-
125-
// Run dotnet build after publish. The reason is that one uses Config = Debug and the other uses Config = Release
126-
// The output from publish will go into bin/Release/netcoreappX.Y/publish and won't be affected by calling build
127-
// later, while the opposite is not true.
128-
129-
var buildResult = await Project.RunDotNetBuildAsync();
130-
Assert.True(0 == buildResult.ExitCode, ErrorMessages.GetFailedProcessMessage("build", Project, buildResult));
131-
132-
var browser = !Fixture.BrowserManager.IsAvailable(browserKind) ?
108+
var browser = !BrowserManager.IsAvailable(browserKind) ?
133109
null :
134-
await Fixture.BrowserManager.GetBrowserInstance(browserKind, BrowserContextInfo);
110+
await BrowserManager.GetBrowserInstance(browserKind, BrowserContextInfo);
135111

136-
using (var aspNetProcess = Project.StartBuiltProjectAsync())
112+
using (var aspNetProcess = project.StartBuiltProjectAsync())
137113
{
138114
Assert.False(
139115
aspNetProcess.Process.HasExited,
140-
ErrorMessages.GetFailedProcessMessageOrEmpty("Run built project", Project, aspNetProcess.Process));
116+
ErrorMessages.GetFailedProcessMessageOrEmpty("Run built project", project, aspNetProcess.Process));
141117

142118
await aspNetProcess.AssertStatusCode("/", HttpStatusCode.OK, "text/html");
143-
if (Fixture.BrowserManager.IsAvailable(browserKind))
119+
if (BrowserManager.IsAvailable(browserKind))
144120
{
145121
var page = await browser.NewPageAsync();
146122
await aspNetProcess.VisitInBrowserAsync(page);
147-
await TestBasicNavigation(page);
123+
await TestBasicNavigation(project, page);
148124
await page.CloseAsync();
149125
}
150126
else
@@ -153,18 +129,18 @@ public async Task BlazorServerTemplateWorks_IndividualAuth(BrowserKind browserKi
153129
}
154130
}
155131

156-
using (var aspNetProcess = Project.StartPublishedProjectAsync())
132+
using (var aspNetProcess = project.StartPublishedProjectAsync())
157133
{
158134
Assert.False(
159135
aspNetProcess.Process.HasExited,
160-
ErrorMessages.GetFailedProcessMessageOrEmpty("Run published project", Project, aspNetProcess.Process));
136+
ErrorMessages.GetFailedProcessMessageOrEmpty("Run published project", project, aspNetProcess.Process));
161137

162138
await aspNetProcess.AssertStatusCode("/", HttpStatusCode.OK, "text/html");
163-
if (Fixture.BrowserManager.IsAvailable(browserKind))
139+
if (BrowserManager.IsAvailable(browserKind))
164140
{
165141
var page = await browser.NewPageAsync();
166142
await aspNetProcess.VisitInBrowserAsync(page);
167-
await TestBasicNavigation(page);
143+
await TestBasicNavigation(project, page);
168144
await page.CloseAsync();
169145
}
170146
else
@@ -174,7 +150,7 @@ public async Task BlazorServerTemplateWorks_IndividualAuth(BrowserKind browserKi
174150
}
175151
}
176152

177-
private async Task TestBasicNavigation(IPage page)
153+
private async Task TestBasicNavigation(Project project, IPage page)
178154
{
179155
var socket = BrowserContextInfo.Pages[page].WebSockets.SingleOrDefault() ??
180156
(await page.WaitForEventAsync(PageEvent.WebSocket)).WebSocket;
@@ -189,7 +165,7 @@ private async Task TestBasicNavigation(IPage page)
189165

190166
await page.WaitForSelectorAsync("ul");
191167
// <title> element gets project ID injected into it during template execution
192-
Assert.Equal(Project.ProjectName.Trim(), (await page.GetTitleAsync()).Trim());
168+
Assert.Equal(project.ProjectName.Trim(), (await page.GetTitleAsync()).Trim());
193169

194170
// Initially displays the home page
195171
await page.WaitForSelectorAsync("h1 >> text=Hello, world!");
@@ -211,29 +187,15 @@ private async Task TestBasicNavigation(IPage page)
211187
Assert.Equal(5, (await page.QuerySelectorAllAsync("p+table>tbody>tr")).Count());
212188
}
213189

214-
[Theory]
190+
[Theory, TestPriority(BUILDCREATEPUBLISH_PRIORITY)]
215191
[InlineData("IndividualB2C", null)]
216192
[InlineData("IndividualB2C", new string[] { "--called-api-url \"https://graph.microsoft.com\"", "--called-api-scopes user.readwrite" })]
217193
[InlineData("SingleOrg", null)]
218194
[InlineData("SingleOrg", new string[] { "--called-api-url \"https://graph.microsoft.com\"", "--called-api-scopes user.readwrite" })]
219195
[InlineData("SingleOrg", new string[] { "--calls-graph" })]
220196
[QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/30882")]
221-
public async Task BlazorServerTemplat_IdentityWeb_BuildAndPublish(string auth, string[] args)
222-
{
223-
Project = await ProjectFactory.GetOrCreateProject("blazorserveridweb" + Guid.NewGuid().ToString().Substring(0, 10).ToLowerInvariant(), Output);
197+
public Task BlazorServerTemplate_IdentityWeb_BuildAndPublish(string auth, string[] args)
198+
=> CreateBuildPublishAsync("blazorserveridweb" + Guid.NewGuid().ToString().Substring(0, 10).ToLowerInvariant(), auth, args);
224199

225-
var createResult = await Project.RunDotNetNewAsync("blazorserver", auth: auth, args: args);
226-
Assert.True(0 == createResult.ExitCode, ErrorMessages.GetFailedProcessMessage("create/restore", Project, createResult));
227-
228-
var publishResult = await Project.RunDotNetPublishAsync();
229-
Assert.True(0 == publishResult.ExitCode, ErrorMessages.GetFailedProcessMessage("publish", Project, publishResult));
230-
231-
// Run dotnet build after publish. The reason is that one uses Config = Debug and the other uses Config = Release
232-
// The output from publish will go into bin/Release/netcoreappX.Y/publish and won't be affected by calling build
233-
// later, while the opposite is not true.
234-
235-
var buildResult = await Project.RunDotNetBuildAsync();
236-
Assert.True(0 == buildResult.ExitCode, ErrorMessages.GetFailedProcessMessage("build", Project, buildResult));
237-
}
238200
}
239201
}

0 commit comments

Comments
 (0)