From ea25780d03bd0dfb731292a9e3bef6742237b629 Mon Sep 17 00:00:00 2001 From: Mackinnon Buck Date: Tue, 27 Aug 2024 15:18:31 -0700 Subject: [PATCH 1/2] Invoke inbound activity handlers on circuit start --- .../Server/src/Circuits/CircuitHost.cs | 4 +-- .../CircuitContextTest.cs | 33 ++++++++++++------- .../ServerRenderingTests/InteractivityTest.cs | 4 +-- .../test/testassets/BasicTestApp/Index.razor | 11 +++++++ .../RazorComponents/App.razor | 1 + .../Interactivity/CircuitContextPage.razor | 24 +------------- 6 files changed, 39 insertions(+), 38 deletions(-) diff --git a/src/Components/Server/src/Circuits/CircuitHost.cs b/src/Components/Server/src/Circuits/CircuitHost.cs index f1983d987a58..82eb2ffa524c 100644 --- a/src/Components/Server/src/Circuits/CircuitHost.cs +++ b/src/Components/Server/src/Circuits/CircuitHost.cs @@ -104,7 +104,7 @@ public Task InitializeAsync(ProtectedPrerenderComponentApplicationStore store, C { Log.InitializationStarted(_logger); - return Renderer.Dispatcher.InvokeAsync(async () => + return HandleInboundActivityAsync(() => Renderer.Dispatcher.InvokeAsync(async () => { if (_initialized) { @@ -165,7 +165,7 @@ public Task InitializeAsync(ProtectedPrerenderComponentApplicationStore store, C UnhandledException?.Invoke(this, new UnhandledExceptionEventArgs(ex, isTerminating: false)); await TryNotifyClientErrorAsync(Client, GetClientErrorMessage(ex), ex); } - }); + })); } // We handle errors in DisposeAsync because there's no real value in letting it propagate. diff --git a/src/Components/test/E2ETest/ServerExecutionTests/CircuitContextTest.cs b/src/Components/test/E2ETest/ServerExecutionTests/CircuitContextTest.cs index 0a1eb6306a30..91c2b580fe60 100644 --- a/src/Components/test/E2ETest/ServerExecutionTests/CircuitContextTest.cs +++ b/src/Components/test/E2ETest/ServerExecutionTests/CircuitContextTest.cs @@ -22,28 +22,39 @@ public CircuitContextTest( { } - protected override void InitializeAsyncCore() + [Fact] + public void ComponentMethods_HaveCircuitContext() { Navigate(ServerPathBase); Browser.MountTestComponent(); - Browser.Equal("Circuit Context", () => Browser.Exists(By.TagName("h1")).Text); + TestCircuitContextCore(Browser); } [Fact] - public void ComponentMethods_HaveCircuitContext() + public void ComponentMethods_HaveCircuitContext_OnInitialPageLoad() { - Browser.Click(By.Id("trigger-click-event-button")); + // https://github.com/dotnet/aspnetcore/issues/57481 + Navigate($"{ServerPathBase}?initial-component-type={typeof(CircuitContextComponent).AssemblyQualifiedName}"); + TestCircuitContextCore(Browser); + } + + // Internal for reuse in Blazor Web tests + internal static void TestCircuitContextCore(IWebDriver browser) + { + browser.Equal("Circuit Context", () => browser.Exists(By.TagName("h1")).Text); + + browser.Click(By.Id("trigger-click-event-button")); - Browser.True(() => HasCircuitContext("SetParametersAsync")); - Browser.True(() => HasCircuitContext("OnInitializedAsync")); - Browser.True(() => HasCircuitContext("OnParametersSetAsync")); - Browser.True(() => HasCircuitContext("OnAfterRenderAsync")); - Browser.True(() => HasCircuitContext("InvokeDotNet")); - Browser.True(() => HasCircuitContext("OnClickEvent")); + browser.True(() => HasCircuitContext("SetParametersAsync")); + browser.True(() => HasCircuitContext("OnInitializedAsync")); + browser.True(() => HasCircuitContext("OnParametersSetAsync")); + browser.True(() => HasCircuitContext("OnAfterRenderAsync")); + browser.True(() => HasCircuitContext("InvokeDotNet")); + browser.True(() => HasCircuitContext("OnClickEvent")); bool HasCircuitContext(string eventName) { - var resultText = Browser.FindElement(By.Id($"circuit-context-result-{eventName}")).Text; + var resultText = browser.FindElement(By.Id($"circuit-context-result-{eventName}")).Text; var result = bool.Parse(resultText); return result; } diff --git a/src/Components/test/E2ETest/ServerRenderingTests/InteractivityTest.cs b/src/Components/test/E2ETest/ServerRenderingTests/InteractivityTest.cs index ab1ea0a9c7dd..ec3fdc9fae3b 100644 --- a/src/Components/test/E2ETest/ServerRenderingTests/InteractivityTest.cs +++ b/src/Components/test/E2ETest/ServerRenderingTests/InteractivityTest.cs @@ -4,6 +4,7 @@ using Components.TestServer.RazorComponents; using Microsoft.AspNetCore.Components.E2ETest.Infrastructure; using Microsoft.AspNetCore.Components.E2ETest.Infrastructure.ServerFixtures; +using Microsoft.AspNetCore.Components.E2ETests.ServerExecutionTests; using Microsoft.AspNetCore.E2ETesting; using OpenQA.Selenium; using TestServer; @@ -1142,8 +1143,7 @@ public void NavigationManagerCanRefreshSSRPageWhenServerInteractivityEnabled() public void InteractiveServerRootComponent_CanAccessCircuitContext() { Navigate($"{ServerPathBase}/interactivity/circuit-context"); - - Browser.Equal("True", () => Browser.FindElement(By.Id("has-circuit-context")).Text); + CircuitContextTest.TestCircuitContextCore(Browser); } [Fact] diff --git a/src/Components/test/testassets/BasicTestApp/Index.razor b/src/Components/test/testassets/BasicTestApp/Index.razor index be5417871d06..3021acccd481 100644 --- a/src/Components/test/testassets/BasicTestApp/Index.razor +++ b/src/Components/test/testassets/BasicTestApp/Index.razor @@ -137,6 +137,17 @@ Type SelectedComponentType => SelectedComponentTypeName == "none" ? null : Type.GetType(SelectedComponentTypeName, throwOnError: true); + [SupplyParameterFromQuery(Name = "initial-component-type")] + private string InitialComponentTypeName { get; set; } + + protected override void OnInitialized() + { + if (InitialComponentTypeName is { Length: > 0 } initialComponentTypeName) + { + SelectedComponentTypeName = initialComponentTypeName; + } + } + void RenderSelectedComponent(RenderTreeBuilder builder) { if (SelectedComponentType != null) diff --git a/src/Components/test/testassets/Components.TestServer/RazorComponents/App.razor b/src/Components/test/testassets/Components.TestServer/RazorComponents/App.razor index 3ea1cecf8c84..e6edce82500a 100644 --- a/src/Components/test/testassets/Components.TestServer/RazorComponents/App.razor +++ b/src/Components/test/testassets/Components.TestServer/RazorComponents/App.razor @@ -25,6 +25,7 @@ +