Skip to content

Commit 333134c

Browse files
authored
Revert "BlazorTemplate test improvements (#30907)" (#31223)
This reverts commit 730e39b.
1 parent e50e354 commit 333134c

File tree

8 files changed

+251
-342
lines changed

8 files changed

+251
-342
lines changed

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

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

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

src/ProjectTemplates/BlazorTemplates.Tests/BlazorServerTemplateTest.cs

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

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

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

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());
3435

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-
var project = await ProjectFactory.GetOrCreateProject("blazorservernoauth" + browserKind, Output);
41+
// Additional arguments are needed. See: https://github.com/dotnet/aspnetcore/issues/24278
42+
Environment.SetEnvironmentVariable("EnableDefaultScopedCssItems", "true");
4243

43-
await using var browser = BrowserManager.IsAvailable(browserKind) ?
44-
await BrowserManager.GetBrowserInstance(browserKind, BrowserContextInfo) :
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) :
4561
null;
4662

47-
using (var aspNetProcess = project.StartBuiltProjectAsync())
63+
using (var aspNetProcess = Project.StartBuiltProjectAsync())
4864
{
4965
Assert.False(
5066
aspNetProcess.Process.HasExited,
51-
ErrorMessages.GetFailedProcessMessageOrEmpty("Run built project", project, aspNetProcess.Process));
67+
ErrorMessages.GetFailedProcessMessageOrEmpty("Run built project", Project, aspNetProcess.Process));
5268

5369
await aspNetProcess.AssertStatusCode("/", HttpStatusCode.OK, "text/html");
5470

55-
if (BrowserManager.IsAvailable(browserKind))
71+
if (Fixture.BrowserManager.IsAvailable(browserKind))
5672
{
5773
var page = await browser.NewPageAsync();
5874
await aspNetProcess.VisitInBrowserAsync(page);
59-
await TestBasicNavigation(project, page);
75+
await TestBasicNavigation(page);
6076
await page.CloseAsync();
6177
}
6278
else
@@ -65,18 +81,18 @@ await BrowserManager.GetBrowserInstance(browserKind, BrowserContextInfo) :
6581
}
6682
}
6783

68-
using (var aspNetProcess = project.StartPublishedProjectAsync())
84+
using (var aspNetProcess = Project.StartPublishedProjectAsync())
6985
{
7086
Assert.False(
7187
aspNetProcess.Process.HasExited,
72-
ErrorMessages.GetFailedProcessMessageOrEmpty("Run published project", project, aspNetProcess.Process));
88+
ErrorMessages.GetFailedProcessMessageOrEmpty("Run published project", Project, aspNetProcess.Process));
7389

7490
await aspNetProcess.AssertStatusCode("/", HttpStatusCode.OK, "text/html");
75-
if (BrowserManager.IsAvailable(browserKind))
91+
if (Fixture.BrowserManager.IsAvailable(browserKind))
7692
{
7793
var page = await browser.NewPageAsync();
7894
await aspNetProcess.VisitInBrowserAsync(page);
79-
await TestBasicNavigation(project, page);
95+
await TestBasicNavigation(page);
8096
await page.CloseAsync();
8197
}
8298
else
@@ -86,41 +102,49 @@ await BrowserManager.GetBrowserInstance(browserKind, BrowserContextInfo) :
86102
}
87103
}
88104

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-
96105
public static IEnumerable<object[]> BlazorServerTemplateWorks_IndividualAuthData =>
97106
BrowserManager.WithBrowsers(new[] { BrowserKind.Chromium }, true, false);
98107

99-
// This tests depends on BlazorServerTemplate_CreateBuildPublish_IndividualAuth running first
100108
[Theory]
101109
[MemberData(nameof(BlazorServerTemplateWorks_IndividualAuthData))]
102110
[QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/30807")]
103111
[SkipOnHelix("https://github.com/dotnet/aspnetcore/issues/30825", Queues = "All.OSX")]
104112
public async Task BlazorServerTemplateWorks_IndividualAuth(BrowserKind browserKind, bool useLocalDB)
105113
{
106-
var project = await ProjectFactory.GetOrCreateProject("blazorserverindividual" + browserKind + (useLocalDB ? "uld" : ""), Output);
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));
107121

108-
var browser = !BrowserManager.IsAvailable(browserKind) ?
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) ?
109133
null :
110-
await BrowserManager.GetBrowserInstance(browserKind, BrowserContextInfo);
134+
await Fixture.BrowserManager.GetBrowserInstance(browserKind, BrowserContextInfo);
111135

112-
using (var aspNetProcess = project.StartBuiltProjectAsync())
136+
using (var aspNetProcess = Project.StartBuiltProjectAsync())
113137
{
114138
Assert.False(
115139
aspNetProcess.Process.HasExited,
116-
ErrorMessages.GetFailedProcessMessageOrEmpty("Run built project", project, aspNetProcess.Process));
140+
ErrorMessages.GetFailedProcessMessageOrEmpty("Run built project", Project, aspNetProcess.Process));
117141

118142
await aspNetProcess.AssertStatusCode("/", HttpStatusCode.OK, "text/html");
119-
if (BrowserManager.IsAvailable(browserKind))
143+
if (Fixture.BrowserManager.IsAvailable(browserKind))
120144
{
121145
var page = await browser.NewPageAsync();
122146
await aspNetProcess.VisitInBrowserAsync(page);
123-
await TestBasicNavigation(project, page);
147+
await TestBasicNavigation(page);
124148
await page.CloseAsync();
125149
}
126150
else
@@ -129,18 +153,18 @@ public async Task BlazorServerTemplateWorks_IndividualAuth(BrowserKind browserKi
129153
}
130154
}
131155

132-
using (var aspNetProcess = project.StartPublishedProjectAsync())
156+
using (var aspNetProcess = Project.StartPublishedProjectAsync())
133157
{
134158
Assert.False(
135159
aspNetProcess.Process.HasExited,
136-
ErrorMessages.GetFailedProcessMessageOrEmpty("Run published project", project, aspNetProcess.Process));
160+
ErrorMessages.GetFailedProcessMessageOrEmpty("Run published project", Project, aspNetProcess.Process));
137161

138162
await aspNetProcess.AssertStatusCode("/", HttpStatusCode.OK, "text/html");
139-
if (BrowserManager.IsAvailable(browserKind))
163+
if (Fixture.BrowserManager.IsAvailable(browserKind))
140164
{
141165
var page = await browser.NewPageAsync();
142166
await aspNetProcess.VisitInBrowserAsync(page);
143-
await TestBasicNavigation(project, page);
167+
await TestBasicNavigation(page);
144168
await page.CloseAsync();
145169
}
146170
else
@@ -150,7 +174,7 @@ public async Task BlazorServerTemplateWorks_IndividualAuth(BrowserKind browserKi
150174
}
151175
}
152176

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

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

170194
// Initially displays the home page
171195
await page.WaitForSelectorAsync("h1 >> text=Hello, world!");
@@ -187,15 +211,29 @@ private async Task TestBasicNavigation(Project project, IPage page)
187211
Assert.Equal(5, (await page.QuerySelectorAllAsync("p+table>tbody>tr")).Count());
188212
}
189213

190-
[Theory, TestPriority(BUILDCREATEPUBLISH_PRIORITY)]
214+
[Theory]
191215
[InlineData("IndividualB2C", null)]
192216
[InlineData("IndividualB2C", new string[] { "--called-api-url \"https://graph.microsoft.com\"", "--called-api-scopes user.readwrite" })]
193217
[InlineData("SingleOrg", null)]
194218
[InlineData("SingleOrg", new string[] { "--called-api-url \"https://graph.microsoft.com\"", "--called-api-scopes user.readwrite" })]
195219
[InlineData("SingleOrg", new string[] { "--calls-graph" })]
196220
[QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/30882")]
197-
public Task BlazorServerTemplate_IdentityWeb_BuildAndPublish(string auth, string[] args)
198-
=> CreateBuildPublishAsync("blazorserveridweb" + Guid.NewGuid().ToString().Substring(0, 10).ToLowerInvariant(), auth, args);
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);
199224

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+
}
200238
}
201239
}

0 commit comments

Comments
 (0)