using Microsoft.Playwright; using Microsoft.Playwright.NUnit; namespace Tests; /// /// Base class for Playwright tests that require an authenticated session. /// Signs in via the dev-only bypass endpoint before each test. /// 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 TracingStartOptions { 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 TracingStopOptions { Path = Path.Combine(TestContext.CurrentContext.WorkDirectory, "playwright-traces", $"{TestContext.CurrentContext.Test.ClassName}.{TestContext.CurrentContext.Test.Name}.zip") }); } }