44 lines
1.5 KiB
C#
44 lines
1.5 KiB
C#
using Microsoft.Playwright;
|
|
using Microsoft.Playwright.NUnit;
|
|
|
|
namespace Tests;
|
|
|
|
/// <summary>
|
|
/// Base class for Playwright tests that require an authenticated session.
|
|
/// Signs in via the dev-only bypass endpoint before each test.
|
|
/// </summary>
|
|
public abstract class AuthenticatedPageTest : PageTest
|
|
{
|
|
protected const string BaseUrl = "http://localhost:5256";
|
|
|
|
[SetUp]
|
|
public async Task SignIn()
|
|
{
|
|
// Use a browser with a UI as requested
|
|
await Context.Tracing.StartAsync(new()
|
|
{
|
|
Title = TestContext.CurrentContext.Test.ClassName + "." + TestContext.CurrentContext.Test.Name,
|
|
Screenshots = true,
|
|
Snapshots = true,
|
|
Sources = true
|
|
});
|
|
|
|
// Set a default timeout for all locators to help with Blazor latency
|
|
Page.SetDefaultTimeout(15_000);
|
|
|
|
// Perform login via the context's APIRequest helper which shares cookies with the context
|
|
var response = await Context.APIRequest.PostAsync($"{BaseUrl}/api/auth/dev-login");
|
|
if (!response.Ok)
|
|
throw new Exception(
|
|
$"Dev login failed with status {response.Status}. Ensure the server is running in Development mode.");
|
|
}
|
|
|
|
[TearDown]
|
|
public async Task TearDown()
|
|
{
|
|
await Context.Tracing.StopAsync(new()
|
|
{
|
|
Path = Path.Combine(TestContext.CurrentContext.WorkDirectory, "playwright-traces", $"{TestContext.CurrentContext.Test.ClassName}.{TestContext.CurrentContext.Test.Name}.zip")
|
|
});
|
|
}
|
|
} |