Skip to content

Revert "BlazorTemplate test improvements" #31223

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
1 commit merged into from
Mar 25, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,7 @@
using ProjectTemplates.Tests.Infrastructure;
using Templates.Test;
using Templates.Test.Helpers;
using Xunit;

[assembly: AssemblyFixture(typeof(ProjectFactoryFixture))]
[assembly: CollectionBehavior(DisableTestParallelization = true)]
[assembly: AssemblyFixture(typeof(PlaywrightFixture<BlazorServerTemplateTest>))]

128 changes: 83 additions & 45 deletions src/ProjectTemplates/BlazorTemplates.Tests/BlazorServerTemplateTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Runtime.InteropServices;
using System.Threading.Tasks;
using Microsoft.AspNetCore.BrowserTesting;
using Microsoft.AspNetCore.Testing;
Expand All @@ -16,47 +17,62 @@

namespace Templates.Test
{
[TestCaseOrderer("Templates.Test.PriorityOrderer", "BlazorTemplates.Tests")]
public class BlazorServerTemplateTest : BlazorTemplateTest
{
public BlazorServerTemplateTest(ProjectFactoryFixture projectFactory)
: base(projectFactory)
public BlazorServerTemplateTest(ProjectFactoryFixture projectFactory, PlaywrightFixture<BlazorServerTemplateTest> fixture, ITestOutputHelper output)
: base(fixture)
{
ProjectFactory = projectFactory; ;
Output = output;
BrowserContextInfo = new ContextInformation(CreateFactory(output));
}

public override string ProjectType { get; } = "blazorserver";
public ProjectFactoryFixture ProjectFactory { get; set; }
public ITestOutputHelper Output { get; }
public ContextInformation BrowserContextInfo { get; }
public Project Project { get; private set; }

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

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

await using var browser = BrowserManager.IsAvailable(browserKind) ?
await BrowserManager.GetBrowserInstance(browserKind, BrowserContextInfo) :
Project = await ProjectFactory.GetOrCreateProject("blazorservernoauth" + browserKind.ToString(), Output);

var createResult = await Project.RunDotNetNewAsync("blazorserver");
Assert.True(0 == createResult.ExitCode, ErrorMessages.GetFailedProcessMessage("create/restore", Project, createResult));

var publishResult = await Project.RunDotNetPublishAsync();
Assert.True(0 == publishResult.ExitCode, ErrorMessages.GetFailedProcessMessage("publish", Project, publishResult));

// Run dotnet build after publish. The reason is that one uses Config = Debug and the other uses Config = Release
// The output from publish will go into bin/Release/netcoreappX.Y/publish and won't be affected by calling build
// later, while the opposite is not true.

var buildResult = await Project.RunDotNetBuildAsync();
Assert.True(0 == buildResult.ExitCode, ErrorMessages.GetFailedProcessMessage("build", Project, buildResult));

await using var browser = Fixture.BrowserManager.IsAvailable(browserKind) ?
await Fixture.BrowserManager.GetBrowserInstance(browserKind, BrowserContextInfo) :
null;

using (var aspNetProcess = project.StartBuiltProjectAsync())
using (var aspNetProcess = Project.StartBuiltProjectAsync())
{
Assert.False(
aspNetProcess.Process.HasExited,
ErrorMessages.GetFailedProcessMessageOrEmpty("Run built project", project, aspNetProcess.Process));
ErrorMessages.GetFailedProcessMessageOrEmpty("Run built project", Project, aspNetProcess.Process));

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

if (BrowserManager.IsAvailable(browserKind))
if (Fixture.BrowserManager.IsAvailable(browserKind))
{
var page = await browser.NewPageAsync();
await aspNetProcess.VisitInBrowserAsync(page);
await TestBasicNavigation(project, page);
await TestBasicNavigation(page);
await page.CloseAsync();
}
else
Expand All @@ -65,18 +81,18 @@ await BrowserManager.GetBrowserInstance(browserKind, BrowserContextInfo) :
}
}

using (var aspNetProcess = project.StartPublishedProjectAsync())
using (var aspNetProcess = Project.StartPublishedProjectAsync())
{
Assert.False(
aspNetProcess.Process.HasExited,
ErrorMessages.GetFailedProcessMessageOrEmpty("Run published project", project, aspNetProcess.Process));
ErrorMessages.GetFailedProcessMessageOrEmpty("Run published project", Project, aspNetProcess.Process));

await aspNetProcess.AssertStatusCode("/", HttpStatusCode.OK, "text/html");
if (BrowserManager.IsAvailable(browserKind))
if (Fixture.BrowserManager.IsAvailable(browserKind))
{
var page = await browser.NewPageAsync();
await aspNetProcess.VisitInBrowserAsync(page);
await TestBasicNavigation(project, page);
await TestBasicNavigation(page);
await page.CloseAsync();
}
else
Expand All @@ -86,41 +102,49 @@ await BrowserManager.GetBrowserInstance(browserKind, BrowserContextInfo) :
}
}

// This test is required to run before BlazorServerTemplateWorks_IndividualAuth to create and build the project
// If this test is quarantined, BlazorServerTemplateWorks_IndividualAuth must be quarantined as well
[Theory, TestPriority(BUILDCREATEPUBLISH_PRIORITY)]
[MemberData(nameof(BlazorServerTemplateWorks_IndividualAuthData))]
public Task BlazorServerTemplate_CreateBuildPublish_IndividualAuth(BrowserKind browserKind, bool useLocalDB)
=> CreateBuildPublishAsync("blazorserverindividual" + browserKind + (useLocalDB ? "uld" : ""));

public static IEnumerable<object[]> BlazorServerTemplateWorks_IndividualAuthData =>
BrowserManager.WithBrowsers(new[] { BrowserKind.Chromium }, true, false);

// This tests depends on BlazorServerTemplate_CreateBuildPublish_IndividualAuth running first
[Theory]
[MemberData(nameof(BlazorServerTemplateWorks_IndividualAuthData))]
[QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/30807")]
[SkipOnHelix("https://github.com/dotnet/aspnetcore/issues/30825", Queues = "All.OSX")]
public async Task BlazorServerTemplateWorks_IndividualAuth(BrowserKind browserKind, bool useLocalDB)
{
var project = await ProjectFactory.GetOrCreateProject("blazorserverindividual" + browserKind + (useLocalDB ? "uld" : ""), Output);
// Additional arguments are needed. See: https://github.com/dotnet/aspnetcore/issues/24278
Environment.SetEnvironmentVariable("EnableDefaultScopedCssItems", "true");

Project = await ProjectFactory.GetOrCreateProject("blazorserverindividual" + browserKind + (useLocalDB ? "uld" : ""), Output);

var createResult = await Project.RunDotNetNewAsync("blazorserver", auth: "Individual", useLocalDB: useLocalDB);
Assert.True(0 == createResult.ExitCode, ErrorMessages.GetFailedProcessMessage("create/restore", Project, createResult));

var browser = !BrowserManager.IsAvailable(browserKind) ?
var publishResult = await Project.RunDotNetPublishAsync();
Assert.True(0 == publishResult.ExitCode, ErrorMessages.GetFailedProcessMessage("publish", Project, publishResult));

// Run dotnet build after publish. The reason is that one uses Config = Debug and the other uses Config = Release
// The output from publish will go into bin/Release/netcoreappX.Y/publish and won't be affected by calling build
// later, while the opposite is not true.

var buildResult = await Project.RunDotNetBuildAsync();
Assert.True(0 == buildResult.ExitCode, ErrorMessages.GetFailedProcessMessage("build", Project, buildResult));

var browser = !Fixture.BrowserManager.IsAvailable(browserKind) ?
null :
await BrowserManager.GetBrowserInstance(browserKind, BrowserContextInfo);
await Fixture.BrowserManager.GetBrowserInstance(browserKind, BrowserContextInfo);

using (var aspNetProcess = project.StartBuiltProjectAsync())
using (var aspNetProcess = Project.StartBuiltProjectAsync())
{
Assert.False(
aspNetProcess.Process.HasExited,
ErrorMessages.GetFailedProcessMessageOrEmpty("Run built project", project, aspNetProcess.Process));
ErrorMessages.GetFailedProcessMessageOrEmpty("Run built project", Project, aspNetProcess.Process));

await aspNetProcess.AssertStatusCode("/", HttpStatusCode.OK, "text/html");
if (BrowserManager.IsAvailable(browserKind))
if (Fixture.BrowserManager.IsAvailable(browserKind))
{
var page = await browser.NewPageAsync();
await aspNetProcess.VisitInBrowserAsync(page);
await TestBasicNavigation(project, page);
await TestBasicNavigation(page);
await page.CloseAsync();
}
else
Expand All @@ -129,18 +153,18 @@ public async Task BlazorServerTemplateWorks_IndividualAuth(BrowserKind browserKi
}
}

using (var aspNetProcess = project.StartPublishedProjectAsync())
using (var aspNetProcess = Project.StartPublishedProjectAsync())
{
Assert.False(
aspNetProcess.Process.HasExited,
ErrorMessages.GetFailedProcessMessageOrEmpty("Run published project", project, aspNetProcess.Process));
ErrorMessages.GetFailedProcessMessageOrEmpty("Run published project", Project, aspNetProcess.Process));

await aspNetProcess.AssertStatusCode("/", HttpStatusCode.OK, "text/html");
if (BrowserManager.IsAvailable(browserKind))
if (Fixture.BrowserManager.IsAvailable(browserKind))
{
var page = await browser.NewPageAsync();
await aspNetProcess.VisitInBrowserAsync(page);
await TestBasicNavigation(project, page);
await TestBasicNavigation(page);
await page.CloseAsync();
}
else
Expand All @@ -150,7 +174,7 @@ public async Task BlazorServerTemplateWorks_IndividualAuth(BrowserKind browserKi
}
}

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

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

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

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

var createResult = await Project.RunDotNetNewAsync("blazorserver", auth: auth, args: args);
Assert.True(0 == createResult.ExitCode, ErrorMessages.GetFailedProcessMessage("create/restore", Project, createResult));

var publishResult = await Project.RunDotNetPublishAsync();
Assert.True(0 == publishResult.ExitCode, ErrorMessages.GetFailedProcessMessage("publish", Project, publishResult));

// Run dotnet build after publish. The reason is that one uses Config = Debug and the other uses Config = Release
// The output from publish will go into bin/Release/netcoreappX.Y/publish and won't be affected by calling build
// later, while the opposite is not true.

var buildResult = await Project.RunDotNetBuildAsync();
Assert.True(0 == buildResult.ExitCode, ErrorMessages.GetFailedProcessMessage("build", Project, buildResult));
}
}
}
Loading