From 48e50322240515c9056fffad575a352357c69ff1 Mon Sep 17 00:00:00 2001 From: John Korsnes Date: Sun, 13 Sep 2026 12:03:50 +0200 Subject: [PATCH] Simplify Uninstall to fire-and-forget, drop unused Workspace return value Uninstall no longer needs the removed Workspace, so the interface, middleware, and its test/noop implementations are updated to match. Co-Authored-By: Claude Sonnet 5 --- .../IWorkspaceInstallationHandler.cs | 3 +-- .../Middlewares/Uninstall.cs | 19 ++++--------------- .../WorkspaceInstallationHandlerTests.cs | 7 +++---- 3 files changed, 8 insertions(+), 21 deletions(-) diff --git a/source/src/Slackbot.Net.Endpoints/Configurations/IWorkspaceInstallationHandler.cs b/source/src/Slackbot.Net.Endpoints/Configurations/IWorkspaceInstallationHandler.cs index 1b6ff63..30835c6 100644 --- a/source/src/Slackbot.Net.Endpoints/Configurations/IWorkspaceInstallationHandler.cs +++ b/source/src/Slackbot.Net.Endpoints/Configurations/IWorkspaceInstallationHandler.cs @@ -12,9 +12,8 @@ public interface IWorkspaceInstallationHandler /// /// Called when a workspace uninstalls your app or revokes its tokens. - /// Return the removed , or null if none was found for . /// - Task Uninstall(string teamId); + Task Uninstall(string teamId); } public record Workspace(string TeamId, string TeamName, string Token); diff --git a/source/src/Slackbot.Net.Endpoints/Middlewares/Uninstall.cs b/source/src/Slackbot.Net.Endpoints/Middlewares/Uninstall.cs index daa62a8..fc5f160 100644 --- a/source/src/Slackbot.Net.Endpoints/Middlewares/Uninstall.cs +++ b/source/src/Slackbot.Net.Endpoints/Middlewares/Uninstall.cs @@ -23,18 +23,7 @@ public async Task Invoke(HttpContext context) NullLogger.Instance); var metadata = context.Items[HttpItemKeys.EventMetadataKey] as EventMetaData; _logger.LogInformation($"Uninstalling team with TeamId: `{metadata.Team_Id}`"); - var deleted = await installationHandler.Uninstall(metadata.Team_Id); - if (deleted is null) - { - _logger.LogWarning( - "Workspace installation handler returned null for '{TeamId}'.", - metadata.Team_Id); - } - else - { - _logger.LogInformation($"Uninstalled team with TeamId: `{metadata.Team_Id}`"); - } - + await installationHandler.Uninstall(metadata.Team_Id); context.Response.StatusCode = 200; } @@ -48,10 +37,10 @@ public static bool ShouldRun(HttpContext ctx) public class NoopWorkspaceInstallationHandler(ILogger logger) : IWorkspaceInstallationHandler { - public Task Uninstall(string teamId) + public Task Uninstall(string teamId) { - logger.LogDebug("No-op. Returning null for uninstalling workspace!"); - return Task.FromResult(null); + logger.LogDebug("No-op. Not removing workspace!"); + return Task.CompletedTask; } public Task Install(Workspace workspace) diff --git a/source/test/Slackbot.Net.SlackClients.Http.Tests/WorkspaceInstallationHandlerTests.cs b/source/test/Slackbot.Net.SlackClients.Http.Tests/WorkspaceInstallationHandlerTests.cs index cf23f06..a48c03d 100644 --- a/source/test/Slackbot.Net.SlackClients.Http.Tests/WorkspaceInstallationHandlerTests.cs +++ b/source/test/Slackbot.Net.SlackClients.Http.Tests/WorkspaceInstallationHandlerTests.cs @@ -18,13 +18,12 @@ public async Task FreshImplementerOfIWorkspaceInstallationHandlerWorks() var freshHandler = Assert.IsType(handler); await handler.Install(new Workspace("T1", "Team", "tok")); - var deleted = await handler.Uninstall("T1"); + await handler.Uninstall("T1"); Assert.Single(freshHandler.Installed); Assert.Equal("T1", freshHandler.Installed[0].TeamId); Assert.Single(freshHandler.Uninstalled); Assert.Equal("T1", freshHandler.Uninstalled[0]); - Assert.Equal("T1", deleted.TeamId); } private sealed class FreshHandler : IWorkspaceInstallationHandler @@ -38,10 +37,10 @@ public Task Install(Workspace slackTeam) return Task.CompletedTask; } - public Task Uninstall(string teamId) + public Task Uninstall(string teamId) { Uninstalled.Add(teamId); - return Task.FromResult(new Workspace(teamId, "Team", "tok")); + return Task.CompletedTask; } } }