From 0c4f2cd94c7a4e6171589a5ab7b7751c5e335171 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 cd2f861846f0..e21db1a06c9e 100644 --- a/src/Components/Server/src/Circuits/CircuitHost.cs +++ b/src/Components/Server/src/Circuits/CircuitHost.cs @@ -103,7 +103,7 @@ public Task InitializeAsync(ProtectedPrerenderComponentApplicationStore store, C { Log.InitializationStarted(_logger); - return Renderer.Dispatcher.InvokeAsync(async () => + return HandleInboundActivityAsync(() => Renderer.Dispatcher.InvokeAsync(async () => { if (_initialized) { @@ -164,7 +164,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 d14759152303..20d4d63500a8 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, noReload: false); 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 240876cf53fa..59d6dcd420be 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 Microsoft.AspNetCore.Testing; using OpenQA.Selenium; @@ -1168,8 +1169,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 fabbf037e349..a896ac1b9dfc 100644 --- a/src/Components/test/testassets/BasicTestApp/Index.razor +++ b/src/Components/test/testassets/BasicTestApp/Index.razor @@ -135,6 +135,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 befd36e52a53..83130db497b4 100644 --- a/src/Components/test/testassets/Components.TestServer/RazorComponents/App.razor +++ b/src/Components/test/testassets/Components.TestServer/RazorComponents/App.razor @@ -17,6 +17,7 @@ +