diff --git a/servers/Azure.Mcp.Server/changelog-entries/remove-retry-policy-options-part9.yaml b/servers/Azure.Mcp.Server/changelog-entries/remove-retry-policy-options-part9.yaml new file mode 100644 index 0000000000..166f1054fb --- /dev/null +++ b/servers/Azure.Mcp.Server/changelog-entries/remove-retry-policy-options-part9.yaml @@ -0,0 +1,3 @@ +changes: + - section: Breaking Changes + description: Removed custom retry policy options from Virtual Desktop and Workbooks tools. \ No newline at end of file diff --git a/tools/Azure.Mcp.Tools.VirtualDesktop/src/Commands/Hostpool/HostpoolListCommand.cs b/tools/Azure.Mcp.Tools.VirtualDesktop/src/Commands/Hostpool/HostpoolListCommand.cs index d13a996205..26d1ec6674 100644 --- a/tools/Azure.Mcp.Tools.VirtualDesktop/src/Commands/Hostpool/HostpoolListCommand.cs +++ b/tools/Azure.Mcp.Tools.VirtualDesktop/src/Commands/Hostpool/HostpoolListCommand.cs @@ -44,7 +44,6 @@ public override async Task ExecuteAsync(CommandContext context, options.Subscription!, options.ResourceGroup, options.Tenant, - options.RetryPolicy, cancellationToken); } else @@ -52,7 +51,6 @@ public override async Task ExecuteAsync(CommandContext context, hostpools = await _virtualDesktopService.ListHostpoolsAsync( options.Subscription!, options.Tenant, - options.RetryPolicy, cancellationToken); } diff --git a/tools/Azure.Mcp.Tools.VirtualDesktop/src/Commands/SessionHost/SessionHostListCommand.cs b/tools/Azure.Mcp.Tools.VirtualDesktop/src/Commands/SessionHost/SessionHostListCommand.cs index 11375f3bb7..00fd0e9832 100644 --- a/tools/Azure.Mcp.Tools.VirtualDesktop/src/Commands/SessionHost/SessionHostListCommand.cs +++ b/tools/Azure.Mcp.Tools.VirtualDesktop/src/Commands/SessionHost/SessionHostListCommand.cs @@ -45,7 +45,6 @@ public override async Task ExecuteAsync(CommandContext context, options.Subscription!, options.HostpoolResourceId, options.Tenant, - options.RetryPolicy, cancellationToken); } else if (!string.IsNullOrEmpty(options.ResourceGroup)) @@ -55,7 +54,6 @@ public override async Task ExecuteAsync(CommandContext context, options.ResourceGroup, options.Hostpool!, options.Tenant, - options.RetryPolicy, cancellationToken); } else @@ -64,7 +62,6 @@ public override async Task ExecuteAsync(CommandContext context, options.Subscription!, options.Hostpool!, options.Tenant, - options.RetryPolicy, cancellationToken); } diff --git a/tools/Azure.Mcp.Tools.VirtualDesktop/src/Commands/SessionHost/SessionHostUserSessionListCommand.cs b/tools/Azure.Mcp.Tools.VirtualDesktop/src/Commands/SessionHost/SessionHostUserSessionListCommand.cs index 0f07f8422d..9fb398fd7c 100644 --- a/tools/Azure.Mcp.Tools.VirtualDesktop/src/Commands/SessionHost/SessionHostUserSessionListCommand.cs +++ b/tools/Azure.Mcp.Tools.VirtualDesktop/src/Commands/SessionHost/SessionHostUserSessionListCommand.cs @@ -47,7 +47,6 @@ public override async Task ExecuteAsync(CommandContext context, options.HostpoolResourceId, options.Sessionhost, options.Tenant, - options.RetryPolicy, cancellationToken); } else if (!string.IsNullOrEmpty(options.ResourceGroup)) @@ -58,7 +57,6 @@ public override async Task ExecuteAsync(CommandContext context, options.Hostpool!, options.Sessionhost, options.Tenant, - options.RetryPolicy, cancellationToken); } else @@ -68,7 +66,6 @@ public override async Task ExecuteAsync(CommandContext context, options.Hostpool!, options.Sessionhost, options.Tenant, - options.RetryPolicy, cancellationToken); } diff --git a/tools/Azure.Mcp.Tools.VirtualDesktop/src/Options/Hostpool/BaseHostPoolOptions.cs b/tools/Azure.Mcp.Tools.VirtualDesktop/src/Options/Hostpool/BaseHostPoolOptions.cs index 56ac27b552..2f88b7279a 100644 --- a/tools/Azure.Mcp.Tools.VirtualDesktop/src/Options/Hostpool/BaseHostPoolOptions.cs +++ b/tools/Azure.Mcp.Tools.VirtualDesktop/src/Options/Hostpool/BaseHostPoolOptions.cs @@ -23,7 +23,4 @@ public class BaseHostPoolOptions : ISubscriptionOption [Option(Description = OptionDescriptions.Tenant)] public string? Tenant { get; set; } - - [OptionContainer(Prefix = "retry")] - public RetryPolicyOptions? RetryPolicy { get; set; } } diff --git a/tools/Azure.Mcp.Tools.VirtualDesktop/src/Options/Hostpool/HostpoolListOptions.cs b/tools/Azure.Mcp.Tools.VirtualDesktop/src/Options/Hostpool/HostpoolListOptions.cs index 5f0b5c0c9a..2438108646 100644 --- a/tools/Azure.Mcp.Tools.VirtualDesktop/src/Options/Hostpool/HostpoolListOptions.cs +++ b/tools/Azure.Mcp.Tools.VirtualDesktop/src/Options/Hostpool/HostpoolListOptions.cs @@ -16,7 +16,4 @@ public sealed class HostpoolListOptions : ISubscriptionOption [Option(Description = OptionDescriptions.Tenant)] public string? Tenant { get; set; } - - [OptionContainer(Prefix = "retry")] - public RetryPolicyOptions? RetryPolicy { get; set; } } diff --git a/tools/Azure.Mcp.Tools.VirtualDesktop/src/Services/IVirtualDesktopService.cs b/tools/Azure.Mcp.Tools.VirtualDesktop/src/Services/IVirtualDesktopService.cs index 9bb17e0d1f..d53bb599a0 100644 --- a/tools/Azure.Mcp.Tools.VirtualDesktop/src/Services/IVirtualDesktopService.cs +++ b/tools/Azure.Mcp.Tools.VirtualDesktop/src/Services/IVirtualDesktopService.cs @@ -2,7 +2,6 @@ // Licensed under the MIT License. using Azure.Mcp.Tools.VirtualDesktop.Models; -using Microsoft.Mcp.Core.Options; namespace Azure.Mcp.Tools.VirtualDesktop.Services; @@ -11,28 +10,24 @@ public interface IVirtualDesktopService Task> ListHostpoolsAsync( string subscription, string? tenant = null, - RetryPolicyOptions? retryPolicy = null, CancellationToken cancellationToken = default); Task> ListHostpoolsByResourceGroupAsync( string subscription, string resourceGroup, string? tenant = null, - RetryPolicyOptions? retryPolicy = null, CancellationToken cancellationToken = default); Task> ListSessionHostsAsync( string subscription, string hostPoolName, string? tenant = null, - RetryPolicyOptions? retryPolicy = null, CancellationToken cancellationToken = default); Task> ListSessionHostsByResourceIdAsync( string subscription, string hostPoolResourceId, string? tenant = null, - RetryPolicyOptions? retryPolicy = null, CancellationToken cancellationToken = default); Task> ListSessionHostsByResourceGroupAsync( @@ -40,7 +35,6 @@ Task> ListSessionHostsByResourceGroupAsync( string resourceGroup, string hostPoolName, string? tenant = null, - RetryPolicyOptions? retryPolicy = null, CancellationToken cancellationToken = default); Task> ListUserSessionsAsync( @@ -48,7 +42,6 @@ Task> ListUserSessionsAsync( string hostPoolName, string sessionHostName, string? tenant = null, - RetryPolicyOptions? retryPolicy = null, CancellationToken cancellationToken = default); Task> ListUserSessionsByResourceIdAsync( @@ -56,7 +49,6 @@ Task> ListUserSessionsByResourceIdAsync( string hostPoolResourceId, string sessionHostName, string? tenant = null, - RetryPolicyOptions? retryPolicy = null, CancellationToken cancellationToken = default); Task> ListUserSessionsByResourceGroupAsync( @@ -65,6 +57,5 @@ Task> ListUserSessionsByResourceGroupAsync( string hostPoolName, string sessionHostName, string? tenant = null, - RetryPolicyOptions? retryPolicy = null, CancellationToken cancellationToken = default); } diff --git a/tools/Azure.Mcp.Tools.VirtualDesktop/src/Services/VirtualDesktopService.cs b/tools/Azure.Mcp.Tools.VirtualDesktop/src/Services/VirtualDesktopService.cs index ef7b58c28b..81fb539be7 100644 --- a/tools/Azure.Mcp.Tools.VirtualDesktop/src/Services/VirtualDesktopService.cs +++ b/tools/Azure.Mcp.Tools.VirtualDesktop/src/Services/VirtualDesktopService.cs @@ -4,7 +4,6 @@ using Azure.Mcp.Core.Services.Azure; using Azure.Mcp.Tools.VirtualDesktop.Models; using Azure.ResourceManager.DesktopVirtualization; -using Microsoft.Mcp.Core.Options; namespace Azure.Mcp.Tools.VirtualDesktop.Services; @@ -15,10 +14,9 @@ public class VirtualDesktopService(IAzureService azureService) : IVirtualDesktop public async Task> ListHostpoolsAsync( string subscription, string? tenant = null, - RetryPolicyOptions? retryPolicy = null, CancellationToken cancellationToken = default) { - var sub = await _azureService.GetSubscription(subscription, tenant, retryPolicy, cancellationToken); + var sub = await _azureService.GetSubscription(subscription, tenant, cancellationToken: cancellationToken); var hostpools = new List(); await foreach (HostPoolResource resource in sub.GetHostPoolsAsync(cancellationToken)) { @@ -31,10 +29,9 @@ public async Task> ListHostpoolsByResourceGroupAsync( string subscription, string resourceGroup, string? tenant = null, - RetryPolicyOptions? retryPolicy = null, CancellationToken cancellationToken = default) { - var sub = await _azureService.GetSubscription(subscription, tenant, retryPolicy, cancellationToken); + var sub = await _azureService.GetSubscription(subscription, tenant, cancellationToken: cancellationToken); var hostpools = new List(); var resourceGroupResource = await sub.GetResourceGroupAsync(resourceGroup, cancellationToken); @@ -49,10 +46,9 @@ public async Task> ListSessionHostsAsync( string subscription, string hostPoolName, string? tenant = null, - RetryPolicyOptions? retryPolicy = null, CancellationToken cancellationToken = default) { - var sub = await _azureService.GetSubscription(subscription, tenant, retryPolicy, cancellationToken); + var sub = await _azureService.GetSubscription(subscription, tenant, cancellationToken: cancellationToken); var sessionHosts = new List(); await foreach (HostPoolResource resource in sub.GetHostPoolsAsync(cancellationToken)) @@ -77,10 +73,9 @@ public async Task> ListUserSessionsAsync( string hostPoolName, string sessionHostName, string? tenant = null, - RetryPolicyOptions? retryPolicy = null, CancellationToken cancellationToken = default) { - var sub = await _azureService.GetSubscription(subscription, tenant, retryPolicy, cancellationToken); + var sub = await _azureService.GetSubscription(subscription, tenant, cancellationToken: cancellationToken); var userSessions = new List(); await foreach (HostPoolResource resource in sub.GetHostPoolsAsync(cancellationToken)) @@ -111,10 +106,9 @@ public async Task> ListSessionHostsByResourceIdAsync( string subscription, string hostPoolResourceId, string? tenant = null, - RetryPolicyOptions? retryPolicy = null, CancellationToken cancellationToken = default) { - var sub = await _azureService.GetSubscription(subscription, tenant, retryPolicy, cancellationToken); + var sub = await _azureService.GetSubscription(subscription, tenant, cancellationToken: cancellationToken); var sessionHosts = new List(); var armClient = sub.GetCachedClient(client => client); @@ -132,10 +126,9 @@ public async Task> ListUserSessionsByResourceIdAsync( string hostPoolResourceId, string sessionHostName, string? tenant = null, - RetryPolicyOptions? retryPolicy = null, CancellationToken cancellationToken = default) { - var sub = await _azureService.GetSubscription(subscription, tenant, retryPolicy, cancellationToken); + var sub = await _azureService.GetSubscription(subscription, tenant, cancellationToken: cancellationToken); var userSessions = new List(); var armClient = sub.GetCachedClient(client => client); @@ -160,10 +153,9 @@ public async Task> ListSessionHostsByResourceGroupAsy string resourceGroup, string hostPoolName, string? tenant = null, - RetryPolicyOptions? retryPolicy = null, CancellationToken cancellationToken = default) { - var sub = await _azureService.GetSubscription(subscription, tenant, retryPolicy, cancellationToken); + var sub = await _azureService.GetSubscription(subscription, tenant, cancellationToken: cancellationToken); var sessionHosts = new List(); var resourceGroupResource = await sub.GetResourceGroupAsync(resourceGroup, cancellationToken); @@ -183,10 +175,9 @@ public async Task> ListUserSessionsByResourceGroupAsy string hostPoolName, string sessionHostName, string? tenant = null, - RetryPolicyOptions? retryPolicy = null, CancellationToken cancellationToken = default) { - var sub = await _azureService.GetSubscription(subscription, tenant, retryPolicy, cancellationToken); + var sub = await _azureService.GetSubscription(subscription, tenant, cancellationToken: cancellationToken); var userSessions = new List(); var resourceGroupResource = await sub.GetResourceGroupAsync(resourceGroup, cancellationToken); diff --git a/tools/Azure.Mcp.Tools.VirtualDesktop/tests/Azure.Mcp.Tools.VirtualDesktop.Tests/Hostpool/HostpoolListCommandTests.cs b/tools/Azure.Mcp.Tools.VirtualDesktop/tests/Azure.Mcp.Tools.VirtualDesktop.Tests/Hostpool/HostpoolListCommandTests.cs index b5cd3226fe..e59d140928 100644 --- a/tools/Azure.Mcp.Tools.VirtualDesktop/tests/Azure.Mcp.Tools.VirtualDesktop.Tests/Hostpool/HostpoolListCommandTests.cs +++ b/tools/Azure.Mcp.Tools.VirtualDesktop/tests/Azure.Mcp.Tools.VirtualDesktop.Tests/Hostpool/HostpoolListCommandTests.cs @@ -6,7 +6,6 @@ using Azure.Mcp.Tools.VirtualDesktop.Commands.Hostpool; using Azure.Mcp.Tools.VirtualDesktop.Models; using Azure.Mcp.Tools.VirtualDesktop.Services; -using Microsoft.Mcp.Core.Options; using NSubstitute; using NSubstitute.ExceptionExtensions; using Xunit; @@ -40,9 +39,9 @@ public async Task ExecuteAsync_ValidatesInputCorrectly(string args, bool shouldS new() { Name = "hostpool1" }, new() { Name = "hostpool2" } }.AsReadOnly(); - Service.ListHostpoolsAsync(Arg.Any(), Arg.Any(), Arg.Any(), Arg.Any()) + Service.ListHostpoolsAsync(Arg.Any(), Arg.Any(), Arg.Any()) .Returns(hostpools); - Service.ListHostpoolsByResourceGroupAsync(Arg.Any(), Arg.Any(), Arg.Any(), Arg.Any(), Arg.Any()) + Service.ListHostpoolsByResourceGroupAsync(Arg.Any(), Arg.Any(), Arg.Any(), Arg.Any()) .Returns(hostpools); } @@ -66,9 +65,9 @@ public async Task ExecuteAsync_ValidatesInputCorrectly(string args, bool shouldS public async Task ExecuteAsync_ReturnsEmptyResult_WhenNoHostpools() { // Arrange - Service.ListHostpoolsAsync(Arg.Any(), Arg.Any(), Arg.Any(), Arg.Any()) + Service.ListHostpoolsAsync(Arg.Any(), Arg.Any(), Arg.Any()) .Returns([]); - Service.ListHostpoolsByResourceGroupAsync(Arg.Any(), Arg.Any(), Arg.Any(), Arg.Any(), Arg.Any()) + Service.ListHostpoolsByResourceGroupAsync(Arg.Any(), Arg.Any(), Arg.Any(), Arg.Any()) .Returns([]); // Act @@ -83,7 +82,7 @@ public async Task ExecuteAsync_ReturnsEmptyResult_WhenNoHostpools() public async Task ExecuteAsync_HandlesServiceErrors() { // Arrange - Service.ListHostpoolsAsync(Arg.Any(), Arg.Any(), Arg.Any(), Arg.Any()) + Service.ListHostpoolsAsync(Arg.Any(), Arg.Any(), Arg.Any()) .ThrowsAsync(new Exception("Test error")); // Act @@ -104,7 +103,7 @@ public async Task ExecuteAsync_ReturnsHostpools_WhenSuccessful() new() { Name = "hostpool1" }, new() { Name = "hostpool2" } }.AsReadOnly(); - Service.ListHostpoolsAsync("test-sub", null, Arg.Any(), Arg.Any()) + Service.ListHostpoolsAsync("test-sub", null, Arg.Any()) .Returns(expectedHostpools); // Act @@ -114,7 +113,7 @@ public async Task ExecuteAsync_ReturnsHostpools_WhenSuccessful() Assert.Equal(HttpStatusCode.OK, response.Status); Assert.NotNull(response.Results); - await Service.Received(1).ListHostpoolsAsync("test-sub", null, Arg.Any(), Arg.Any()); + await Service.Received(1).ListHostpoolsAsync("test-sub", null, Arg.Any()); } [Fact] @@ -126,7 +125,7 @@ public async Task ExecuteAsync_CallsAzureService_WhenResourceGroupProvided() new() { Name = "hostpool1" }, new() { Name = "hostpool2" } }.AsReadOnly(); - Service.ListHostpoolsByResourceGroupAsync("test-sub", "test-rg", null, Arg.Any(), Arg.Any()) + Service.ListHostpoolsByResourceGroupAsync("test-sub", "test-rg", null, Arg.Any()) .Returns(expectedHostpools); // Act @@ -136,8 +135,8 @@ public async Task ExecuteAsync_CallsAzureService_WhenResourceGroupProvided() Assert.Equal(HttpStatusCode.OK, response.Status); Assert.NotNull(response.Results); - await Service.Received(1).ListHostpoolsByResourceGroupAsync("test-sub", "test-rg", null, Arg.Any(), Arg.Any()); - await Service.DidNotReceive().ListHostpoolsAsync(Arg.Any(), Arg.Any(), Arg.Any(), Arg.Any()); + await Service.Received(1).ListHostpoolsByResourceGroupAsync("test-sub", "test-rg", null, Arg.Any()); + await Service.DidNotReceive().ListHostpoolsAsync(Arg.Any(), Arg.Any(), Arg.Any()); } [Fact] @@ -149,7 +148,7 @@ public async Task ExecuteAsync_CallsAzureService_WhenNoResourceGroup() new() { Name = "hostpool1" }, new() { Name = "hostpool2" } }.AsReadOnly(); - Service.ListHostpoolsAsync("test-sub", null, Arg.Any(), Arg.Any()) + Service.ListHostpoolsAsync("test-sub", null, Arg.Any()) .Returns(expectedHostpools); // Act @@ -159,15 +158,15 @@ public async Task ExecuteAsync_CallsAzureService_WhenNoResourceGroup() Assert.Equal(HttpStatusCode.OK, response.Status); Assert.NotNull(response.Results); - await Service.Received(1).ListHostpoolsAsync("test-sub", null, Arg.Any(), Arg.Any()); - await Service.DidNotReceive().ListHostpoolsByResourceGroupAsync(Arg.Any(), Arg.Any(), Arg.Any(), Arg.Any(), Arg.Any()); + await Service.Received(1).ListHostpoolsAsync("test-sub", null, Arg.Any()); + await Service.DidNotReceive().ListHostpoolsByResourceGroupAsync(Arg.Any(), Arg.Any(), Arg.Any(), Arg.Any()); } [Fact] public async Task ExecuteAsync_ReturnsEmptyResult_WhenNoHostpoolsInResourceGroup() { // Arrange - Service.ListHostpoolsByResourceGroupAsync(Arg.Any(), Arg.Any(), Arg.Any(), Arg.Any(), Arg.Any()) + Service.ListHostpoolsByResourceGroupAsync(Arg.Any(), Arg.Any(), Arg.Any(), Arg.Any()) .Returns([]); // Act diff --git a/tools/Azure.Mcp.Tools.VirtualDesktop/tests/Azure.Mcp.Tools.VirtualDesktop.Tests/SessionHost/SessionHostListCommandTests.cs b/tools/Azure.Mcp.Tools.VirtualDesktop/tests/Azure.Mcp.Tools.VirtualDesktop.Tests/SessionHost/SessionHostListCommandTests.cs index 0ea806196a..319d658204 100644 --- a/tools/Azure.Mcp.Tools.VirtualDesktop/tests/Azure.Mcp.Tools.VirtualDesktop.Tests/SessionHost/SessionHostListCommandTests.cs +++ b/tools/Azure.Mcp.Tools.VirtualDesktop/tests/Azure.Mcp.Tools.VirtualDesktop.Tests/SessionHost/SessionHostListCommandTests.cs @@ -5,7 +5,6 @@ using Azure.Mcp.Tests.Commands; using Azure.Mcp.Tools.VirtualDesktop.Commands.SessionHost; using Azure.Mcp.Tools.VirtualDesktop.Services; -using Microsoft.Mcp.Core.Options; using NSubstitute; using NSubstitute.ExceptionExtensions; using Xunit; @@ -50,7 +49,6 @@ public async Task ExecuteAsync_ValidatesInputCorrectly(string args, bool shouldS Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any()) .Returns(mockSessionHosts); @@ -58,7 +56,6 @@ public async Task ExecuteAsync_ValidatesInputCorrectly(string args, bool shouldS Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any()) .Returns(mockSessionHosts); @@ -67,7 +64,6 @@ public async Task ExecuteAsync_ValidatesInputCorrectly(string args, bool shouldS Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any()) .Returns(mockSessionHosts); } @@ -103,7 +99,6 @@ public async Task ExecuteAsync_WithValidInput_CallsServiceCorrectly() "sub123", "pool1", null, - Arg.Any(), Arg.Any()) .Returns(expectedSessionHosts); @@ -119,7 +114,6 @@ await Service.Received(1).ListSessionHostsAsync( "sub123", "pool1", null, - Arg.Any(), Arg.Any()); } @@ -138,7 +132,6 @@ public async Task ExecuteAsync_WithResourceId_CallsServiceCorrectly() "sub123", resourceId, null, - Arg.Any(), Arg.Any()) .Returns(expectedSessionHosts); @@ -154,14 +147,12 @@ await Service.Received(1).ListSessionHostsByResourceIdAsync( "sub123", resourceId, null, - Arg.Any(), Arg.Any()); await Service.DidNotReceive().ListSessionHostsAsync( Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any()); } @@ -180,7 +171,6 @@ public async Task ExecuteAsync_WithResourceGroup_CallsServiceCorrectly() "rg1", "pool1", null, - Arg.Any(), Arg.Any()) .Returns(expectedSessionHosts); @@ -197,7 +187,6 @@ await Service.Received(1).ListSessionHostsByResourceGroupAsync( "rg1", "pool1", null, - Arg.Any(), Arg.Any()); } @@ -209,7 +198,6 @@ public async Task ExecuteAsync_WithEmptyResults_ReturnsNullResults() Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any()) .Returns([]); @@ -217,7 +205,6 @@ public async Task ExecuteAsync_WithEmptyResults_ReturnsNullResults() Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any()) .Returns([]); @@ -238,7 +225,6 @@ public async Task ExecuteAsync_HandlesServiceErrors() Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any()) .ThrowsAsync(new Exception("Test error")); @@ -246,7 +232,6 @@ public async Task ExecuteAsync_HandlesServiceErrors() Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any()) .ThrowsAsync(new Exception("Test error")); diff --git a/tools/Azure.Mcp.Tools.VirtualDesktop/tests/Azure.Mcp.Tools.VirtualDesktop.Tests/SessionHost/SessionHostUserSessionListCommandTests.cs b/tools/Azure.Mcp.Tools.VirtualDesktop/tests/Azure.Mcp.Tools.VirtualDesktop.Tests/SessionHost/SessionHostUserSessionListCommandTests.cs index 2241696913..7d0ef6915f 100644 --- a/tools/Azure.Mcp.Tools.VirtualDesktop/tests/Azure.Mcp.Tools.VirtualDesktop.Tests/SessionHost/SessionHostUserSessionListCommandTests.cs +++ b/tools/Azure.Mcp.Tools.VirtualDesktop/tests/Azure.Mcp.Tools.VirtualDesktop.Tests/SessionHost/SessionHostUserSessionListCommandTests.cs @@ -6,7 +6,6 @@ using Azure.Mcp.Tools.VirtualDesktop.Commands.SessionHost; using Azure.Mcp.Tools.VirtualDesktop.Models; using Azure.Mcp.Tools.VirtualDesktop.Services; -using Microsoft.Mcp.Core.Options; using NSubstitute; using NSubstitute.ExceptionExtensions; using Xunit; @@ -57,7 +56,6 @@ public async Task ExecuteAsync_ValidatesInputCorrectly(string args, bool shouldS Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any()) .Returns(userSessions.AsReadOnly()); @@ -66,7 +64,6 @@ public async Task ExecuteAsync_ValidatesInputCorrectly(string args, bool shouldS Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any()) .Returns(userSessions.AsReadOnly()); @@ -76,7 +73,6 @@ public async Task ExecuteAsync_ValidatesInputCorrectly(string args, bool shouldS Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any()) .Returns(userSessions.AsReadOnly()); } @@ -130,7 +126,6 @@ public async Task ExecuteAsync_ReturnsUserSessionsSuccessfully() "test-hostpool", "test-sessionhost", Arg.Any(), - Arg.Any(), Arg.Any()) .Returns(userSessions.AsReadOnly()); @@ -150,7 +145,6 @@ await Service.Received(1).ListUserSessionsAsync( "test-hostpool", "test-sessionhost", null, - Arg.Any(), Arg.Any()); } @@ -177,7 +171,6 @@ public async Task ExecuteAsync_WithResourceId_CallsServiceCorrectly() resourceId, "test-sessionhost", Arg.Any(), - Arg.Any(), Arg.Any()) .Returns(userSessions.AsReadOnly()); @@ -197,7 +190,6 @@ await Service.Received(1).ListUserSessionsByResourceIdAsync( resourceId, "test-sessionhost", null, - Arg.Any(), Arg.Any()); await Service.DidNotReceive().ListUserSessionsAsync( @@ -205,7 +197,6 @@ await Service.DidNotReceive().ListUserSessionsAsync( Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any()); } @@ -232,7 +223,6 @@ public async Task ExecuteAsync_WithResourceGroup_CallsServiceCorrectly() "test-hostpool", "test-sessionhost", Arg.Any(), - Arg.Any(), Arg.Any()) .Returns(userSessions.AsReadOnly()); @@ -254,7 +244,6 @@ await Service.Received(1).ListUserSessionsByResourceGroupAsync( "test-hostpool", "test-sessionhost", null, - Arg.Any(), Arg.Any()); await Service.DidNotReceive().ListUserSessionsAsync( @@ -262,7 +251,6 @@ await Service.DidNotReceive().ListUserSessionsAsync( Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any()); await Service.DidNotReceive().ListUserSessionsByResourceIdAsync( @@ -270,7 +258,6 @@ await Service.DidNotReceive().ListUserSessionsByResourceIdAsync( Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any()); } @@ -285,7 +272,6 @@ public async Task ExecuteAsync_ReturnsEmptyResultsWhenNoUserSessions() Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any()) .Returns(userSessions.AsReadOnly()); @@ -294,7 +280,6 @@ public async Task ExecuteAsync_ReturnsEmptyResultsWhenNoUserSessions() Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any()) .Returns(userSessions.AsReadOnly()); @@ -319,7 +304,6 @@ public async Task ExecuteAsync_HandlesServiceErrors() Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any()) .ThrowsAsync(new Exception("Test error")); @@ -328,7 +312,6 @@ public async Task ExecuteAsync_HandlesServiceErrors() Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any()) .ThrowsAsync(new Exception("Test error")); @@ -354,7 +337,6 @@ public async Task ExecuteAsync_HandlesRequestFailedException_NotFound() Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any()) .ThrowsAsync(exception); @@ -363,7 +345,6 @@ public async Task ExecuteAsync_HandlesRequestFailedException_NotFound() Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any()) .ThrowsAsync(exception); @@ -389,7 +370,6 @@ public async Task ExecuteAsync_HandlesRequestFailedException_Forbidden() Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any()) .ThrowsAsync(exception); @@ -398,7 +378,6 @@ public async Task ExecuteAsync_HandlesRequestFailedException_Forbidden() Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any()) .ThrowsAsync(exception); @@ -436,7 +415,6 @@ public async Task ExecuteAsync_WithTenantParameter() "test-hostpool", "test-sessionhost", "test-tenant", - Arg.Any(), Arg.Any()) .Returns(userSessions.AsReadOnly()); @@ -445,7 +423,6 @@ public async Task ExecuteAsync_WithTenantParameter() Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any()) .Returns(userSessions.AsReadOnly()); @@ -466,7 +443,6 @@ await Service.Received(1).ListUserSessionsAsync( "test-hostpool", "test-sessionhost", "test-tenant", - Arg.Any(), Arg.Any()); } } diff --git a/tools/Azure.Mcp.Tools.Workbooks/src/Commands/Workbooks/CreateWorkbooksCommand.cs b/tools/Azure.Mcp.Tools.Workbooks/src/Commands/Workbooks/CreateWorkbooksCommand.cs index b3013f4aae..d817c4da9c 100644 --- a/tools/Azure.Mcp.Tools.Workbooks/src/Commands/Workbooks/CreateWorkbooksCommand.cs +++ b/tools/Azure.Mcp.Tools.Workbooks/src/Commands/Workbooks/CreateWorkbooksCommand.cs @@ -48,7 +48,6 @@ public override async Task ExecuteAsync(CommandContext context, * otherwise the workbook will display an error when opening. */ options.SourceId ?? "azure monitor", - options.RetryPolicy, options.Tenant, cancellationToken) ?? throw new InvalidOperationException("Failed to create workbook"); diff --git a/tools/Azure.Mcp.Tools.Workbooks/src/Commands/Workbooks/DeleteWorkbooksCommand.cs b/tools/Azure.Mcp.Tools.Workbooks/src/Commands/Workbooks/DeleteWorkbooksCommand.cs index 59a292f5b4..5bb44f8816 100644 --- a/tools/Azure.Mcp.Tools.Workbooks/src/Commands/Workbooks/DeleteWorkbooksCommand.cs +++ b/tools/Azure.Mcp.Tools.Workbooks/src/Commands/Workbooks/DeleteWorkbooksCommand.cs @@ -51,7 +51,6 @@ public override async Task ExecuteAsync(CommandContext context, { var result = await _workbooksService.DeleteWorkbooksAsync( options.WorkbookIds, - options.RetryPolicy, options.Tenant, cancellationToken); diff --git a/tools/Azure.Mcp.Tools.Workbooks/src/Commands/Workbooks/ListWorkbooksCommand.cs b/tools/Azure.Mcp.Tools.Workbooks/src/Commands/Workbooks/ListWorkbooksCommand.cs index 4c18cfcedf..3feb65e744 100644 --- a/tools/Azure.Mcp.Tools.Workbooks/src/Commands/Workbooks/ListWorkbooksCommand.cs +++ b/tools/Azure.Mcp.Tools.Workbooks/src/Commands/Workbooks/ListWorkbooksCommand.cs @@ -64,7 +64,6 @@ public override async Task ExecuteAsync(CommandContext context, options.MaxResults == null || options.MaxResults.Value < 1 ? 50 : Math.Min(options.MaxResults.Value, 1000), options.IncludeTotalCount ?? true, ParseOutputFormat(options.OutputFormat), - options.RetryPolicy, options.Tenant, cancellationToken); diff --git a/tools/Azure.Mcp.Tools.Workbooks/src/Commands/Workbooks/ShowWorkbooksCommand.cs b/tools/Azure.Mcp.Tools.Workbooks/src/Commands/Workbooks/ShowWorkbooksCommand.cs index 7b13bedf8c..9f04c70d0e 100644 --- a/tools/Azure.Mcp.Tools.Workbooks/src/Commands/Workbooks/ShowWorkbooksCommand.cs +++ b/tools/Azure.Mcp.Tools.Workbooks/src/Commands/Workbooks/ShowWorkbooksCommand.cs @@ -50,7 +50,6 @@ public override async Task ExecuteAsync(CommandContext context, { var result = await _workbooksService.GetWorkbooksAsync( options.WorkbookIds, - options.RetryPolicy, options.Tenant, cancellationToken); diff --git a/tools/Azure.Mcp.Tools.Workbooks/src/Commands/Workbooks/UpdateWorkbooksCommand.cs b/tools/Azure.Mcp.Tools.Workbooks/src/Commands/Workbooks/UpdateWorkbooksCommand.cs index cf9c23e81e..8e011cc324 100644 --- a/tools/Azure.Mcp.Tools.Workbooks/src/Commands/Workbooks/UpdateWorkbooksCommand.cs +++ b/tools/Azure.Mcp.Tools.Workbooks/src/Commands/Workbooks/UpdateWorkbooksCommand.cs @@ -35,7 +35,6 @@ public override async Task ExecuteAsync(CommandContext context, options.WorkbookId, options.DisplayName, options.SerializedContent, - options.RetryPolicy, options.Tenant, cancellationToken) ?? throw new InvalidOperationException("Failed to update workbook"); diff --git a/tools/Azure.Mcp.Tools.Workbooks/src/Options/Workbook/CreateWorkbookOptions.cs b/tools/Azure.Mcp.Tools.Workbooks/src/Options/Workbook/CreateWorkbookOptions.cs index e7c40a7e39..f2f6757335 100644 --- a/tools/Azure.Mcp.Tools.Workbooks/src/Options/Workbook/CreateWorkbookOptions.cs +++ b/tools/Azure.Mcp.Tools.Workbooks/src/Options/Workbook/CreateWorkbookOptions.cs @@ -26,6 +26,4 @@ public sealed class CreateWorkbookOptions : ISubscriptionOption [Option(Description = OptionDescriptions.Tenant)] public string? Tenant { get; set; } - [OptionContainer(Prefix = "retry")] - public RetryPolicyOptions? RetryPolicy { get; set; } } diff --git a/tools/Azure.Mcp.Tools.Workbooks/src/Options/Workbook/DeleteWorkbookOptions.cs b/tools/Azure.Mcp.Tools.Workbooks/src/Options/Workbook/DeleteWorkbookOptions.cs index c9853ee70c..7a79ad7184 100644 --- a/tools/Azure.Mcp.Tools.Workbooks/src/Options/Workbook/DeleteWorkbookOptions.cs +++ b/tools/Azure.Mcp.Tools.Workbooks/src/Options/Workbook/DeleteWorkbookOptions.cs @@ -14,6 +14,4 @@ public sealed class DeleteWorkbookOptions [Option(Description = OptionDescriptions.Tenant)] public string? Tenant { get; set; } - [OptionContainer(Prefix = "retry")] - public RetryPolicyOptions? RetryPolicy { get; set; } } diff --git a/tools/Azure.Mcp.Tools.Workbooks/src/Options/Workbook/ListWorkbooksOptions.cs b/tools/Azure.Mcp.Tools.Workbooks/src/Options/Workbook/ListWorkbooksOptions.cs index e8d51ae093..b20c6ee1b7 100644 --- a/tools/Azure.Mcp.Tools.Workbooks/src/Options/Workbook/ListWorkbooksOptions.cs +++ b/tools/Azure.Mcp.Tools.Workbooks/src/Options/Workbook/ListWorkbooksOptions.cs @@ -43,8 +43,6 @@ public sealed class ListWorkbooksOptions : ISubscriptionOption [Option(Description = OptionDescriptions.Tenant)] public string? Tenant { get; set; } - [OptionContainer(Prefix = "retry")] - public RetryPolicyOptions? RetryPolicy { get; set; } /// /// Creates a WorkbookFilters object from the command options. diff --git a/tools/Azure.Mcp.Tools.Workbooks/src/Options/Workbook/ShowWorkbooksOptions.cs b/tools/Azure.Mcp.Tools.Workbooks/src/Options/Workbook/ShowWorkbooksOptions.cs index 9fbbc1820d..621727342c 100644 --- a/tools/Azure.Mcp.Tools.Workbooks/src/Options/Workbook/ShowWorkbooksOptions.cs +++ b/tools/Azure.Mcp.Tools.Workbooks/src/Options/Workbook/ShowWorkbooksOptions.cs @@ -14,6 +14,4 @@ public sealed class ShowWorkbooksOptions [Option(Description = OptionDescriptions.Tenant)] public string? Tenant { get; set; } - [OptionContainer(Prefix = "retry")] - public RetryPolicyOptions? RetryPolicy { get; set; } } diff --git a/tools/Azure.Mcp.Tools.Workbooks/src/Options/Workbook/UpdateWorkbooksOptions.cs b/tools/Azure.Mcp.Tools.Workbooks/src/Options/Workbook/UpdateWorkbooksOptions.cs index 378e86b07b..6ebf64bb7f 100644 --- a/tools/Azure.Mcp.Tools.Workbooks/src/Options/Workbook/UpdateWorkbooksOptions.cs +++ b/tools/Azure.Mcp.Tools.Workbooks/src/Options/Workbook/UpdateWorkbooksOptions.cs @@ -20,6 +20,4 @@ public sealed class UpdateWorkbooksOptions [Option(Description = OptionDescriptions.Tenant)] public string? Tenant { get; set; } - [OptionContainer(Prefix = "retry")] - public RetryPolicyOptions? RetryPolicy { get; set; } } diff --git a/tools/Azure.Mcp.Tools.Workbooks/src/Services/IWorkbooksService.cs b/tools/Azure.Mcp.Tools.Workbooks/src/Services/IWorkbooksService.cs index bae695cc0f..980f3684b3 100644 --- a/tools/Azure.Mcp.Tools.Workbooks/src/Services/IWorkbooksService.cs +++ b/tools/Azure.Mcp.Tools.Workbooks/src/Services/IWorkbooksService.cs @@ -2,7 +2,6 @@ // Licensed under the MIT License. using Azure.Mcp.Tools.Workbooks.Models; -using Microsoft.Mcp.Core.Options; namespace Azure.Mcp.Tools.Workbooks.Services; @@ -19,7 +18,6 @@ Task ListWorkbooksAsync( int maxResults = 50, bool includeTotalCount = true, OutputFormat outputFormat = OutputFormat.Standard, - RetryPolicyOptions? retryPolicy = null, string? tenant = null, CancellationToken cancellationToken = default); @@ -29,7 +27,6 @@ Task ListWorkbooksAsync( /// Task GetWorkbooksAsync( IReadOnlyList workbookIds, - RetryPolicyOptions? retryPolicy = null, string? tenant = null, CancellationToken cancellationToken = default); @@ -42,7 +39,6 @@ Task GetWorkbooksAsync( string displayName, string serializedData, string sourceId, - RetryPolicyOptions? retryPolicy = null, string? tenant = null, CancellationToken cancellationToken = default); @@ -53,7 +49,6 @@ Task GetWorkbooksAsync( string workbookId, string? displayName = null, string? serializedContent = null, - RetryPolicyOptions? retryPolicy = null, string? tenant = null, CancellationToken cancellationToken = default); @@ -62,7 +57,6 @@ Task GetWorkbooksAsync( /// Task DeleteWorkbooksAsync( IReadOnlyList workbookIds, - RetryPolicyOptions? retryPolicy = null, string? tenant = null, CancellationToken cancellationToken = default); } diff --git a/tools/Azure.Mcp.Tools.Workbooks/src/Services/WorkbooksService.cs b/tools/Azure.Mcp.Tools.Workbooks/src/Services/WorkbooksService.cs index 564f0fbc0a..26da561629 100644 --- a/tools/Azure.Mcp.Tools.Workbooks/src/Services/WorkbooksService.cs +++ b/tools/Azure.Mcp.Tools.Workbooks/src/Services/WorkbooksService.cs @@ -10,7 +10,6 @@ using Azure.ResourceManager.ResourceGraph; using Azure.ResourceManager.ResourceGraph.Models; using Microsoft.Extensions.Logging; -using Microsoft.Mcp.Core.Options; namespace Azure.Mcp.Tools.Workbooks.Services; @@ -33,7 +32,6 @@ public async Task ListWorkbooksAsync( int maxResults = 50, bool includeTotalCount = true, OutputFormat outputFormat = OutputFormat.Standard, - RetryPolicyOptions? retryPolicy = null, string? tenant = null, CancellationToken cancellationToken = default) { @@ -52,7 +50,7 @@ public async Task ListWorkbooksAsync( foreach (var sub in subscriptions) { // Resolve subscription name to ID if needed - var subscriptionResource = await AzureService.GetSubscription(sub, tenant, retryPolicy, cancellationToken); + var subscriptionResource = await AzureService.GetSubscription(sub, tenant, cancellationToken: cancellationToken); query.Subscriptions.Add(subscriptionResource.Data.SubscriptionId); } } @@ -79,7 +77,7 @@ public async Task ListWorkbooksAsync( int? totalCount = null; if (includeTotalCount) { - totalCount = await GetTotalCountAsync(subscriptions, resourceGroups, filters, tenant, retryPolicy, cancellationToken); + totalCount = await GetTotalCountAsync(subscriptions, resourceGroups, filters, tenant, cancellationToken); } return new(workbooks, totalCount, ContinuationToken: null); @@ -87,7 +85,6 @@ public async Task ListWorkbooksAsync( public async Task GetWorkbooksAsync( IReadOnlyList workbookIds, - RetryPolicyOptions? retryPolicy = null, string? tenant = null, CancellationToken cancellationToken = default) { @@ -104,7 +101,7 @@ public async Task GetWorkbooksAsync( await _throttle.WaitAsync(cancellationToken); try { - var workbook = await GetSingleWorkbookAsync(id, retryPolicy, tenant, cancellationToken); + var workbook = await GetSingleWorkbookAsync(id, tenant, cancellationToken); if (workbook is null) { throw new InvalidOperationException($"Workbook with ID '{id}' was not found or returned null."); @@ -144,7 +141,6 @@ public async Task GetWorkbooksAsync( string displayName, string serializedData, string sourceId, - RetryPolicyOptions? retryPolicy = null, string? tenant = null, CancellationToken cancellationToken = default) { @@ -157,7 +153,7 @@ public async Task GetWorkbooksAsync( ValidateSerializedData(serializedData); - var subscriptionResource = await AzureService.GetSubscription(subscription, tenant, retryPolicy, cancellationToken) + var subscriptionResource = await AzureService.GetSubscription(subscription, tenant, cancellationToken: cancellationToken) ?? throw new InvalidOperationException($"Subscription '{subscription}' not found"); var resourceGroupResource = await subscriptionResource.GetResourceGroups().GetAsync(resourceGroupName, cancellationToken); @@ -191,7 +187,6 @@ public async Task GetWorkbooksAsync( string workbookId, string? displayName = null, string? serializedContent = null, - RetryPolicyOptions? retryPolicy = null, string? tenant = null, CancellationToken cancellationToken = default) { @@ -202,7 +197,7 @@ public async Task GetWorkbooksAsync( ValidateSerializedData(serializedContent); } - var armClient = await CreateArmClientAsync(tenant, retryPolicy, cancellationToken: cancellationToken); + var armClient = await CreateArmClientAsync(tenantIdOrName: tenant, cancellationToken: cancellationToken); var workbookResourceId = new ResourceIdentifier(workbookId); var workbookResource = armClient.GetApplicationInsightsWorkbookResource(workbookResourceId) @@ -239,7 +234,6 @@ public async Task GetWorkbooksAsync( public async Task DeleteWorkbooksAsync( IReadOnlyList workbookIds, - RetryPolicyOptions? retryPolicy = null, string? tenant = null, CancellationToken cancellationToken = default) { @@ -256,7 +250,7 @@ public async Task DeleteWorkbooksAsync( await _throttle.WaitAsync(cancellationToken); try { - await DeleteSingleWorkbookAsync(id, retryPolicy, tenant, cancellationToken); + await DeleteSingleWorkbookAsync(id, tenant, cancellationToken); return (Id: id, Error: (WorkbookError?)null); } catch (Exception ex) @@ -289,13 +283,12 @@ public async Task DeleteWorkbooksAsync( private async Task GetSingleWorkbookAsync( string workbookId, - RetryPolicyOptions? retryPolicy, string? tenant, CancellationToken cancellationToken) { ValidateWorkbookId(workbookId); - var armClient = await CreateArmClientAsync(tenant, retryPolicy, cancellationToken: cancellationToken); + var armClient = await CreateArmClientAsync(tenantIdOrName: tenant, cancellationToken: cancellationToken); var workbookResourceId = new ResourceIdentifier(workbookId); var workbookResource = armClient.GetApplicationInsightsWorkbookResource(workbookResourceId) @@ -316,13 +309,12 @@ public async Task DeleteWorkbooksAsync( private async Task DeleteSingleWorkbookAsync( string workbookId, - RetryPolicyOptions? retryPolicy, string? tenant, CancellationToken cancellationToken) { ValidateWorkbookId(workbookId); - var armClient = await CreateArmClientAsync(tenant, retryPolicy, cancellationToken: cancellationToken); + var armClient = await CreateArmClientAsync(tenantIdOrName: tenant, cancellationToken: cancellationToken); var workbookResourceId = new ResourceIdentifier(workbookId); var workbookResource = armClient.GetApplicationInsightsWorkbookResource(workbookResourceId) @@ -338,7 +330,6 @@ private async Task DeleteSingleWorkbookAsync( IReadOnlyList? resourceGroups, WorkbookFilters? filters, string? tenant, - RetryPolicyOptions? retryPolicy, CancellationToken cancellationToken) { try @@ -357,7 +348,7 @@ private async Task DeleteSingleWorkbookAsync( { foreach (var sub in subscriptions) { - var subscriptionResource = await AzureService.GetSubscription(sub, tenant, retryPolicy, cancellationToken); + var subscriptionResource = await AzureService.GetSubscription(sub, tenant, cancellationToken: cancellationToken); query.Subscriptions.Add(subscriptionResource.Data.SubscriptionId); } } diff --git a/tools/Azure.Mcp.Tools.Workbooks/tests/Azure.Mcp.Tools.Workbooks.Tests/CreateWorkbooksCommandTests.cs b/tools/Azure.Mcp.Tools.Workbooks/tests/Azure.Mcp.Tools.Workbooks.Tests/CreateWorkbooksCommandTests.cs index 3442330bbf..707d593eed 100644 --- a/tools/Azure.Mcp.Tools.Workbooks/tests/Azure.Mcp.Tools.Workbooks.Tests/CreateWorkbooksCommandTests.cs +++ b/tools/Azure.Mcp.Tools.Workbooks/tests/Azure.Mcp.Tools.Workbooks.Tests/CreateWorkbooksCommandTests.cs @@ -6,7 +6,6 @@ using Azure.Mcp.Tools.Workbooks.Commands.Workbooks; using Azure.Mcp.Tools.Workbooks.Models; using Azure.Mcp.Tools.Workbooks.Services; -using Microsoft.Mcp.Core.Options; using NSubstitute; using NSubstitute.ExceptionExtensions; using Xunit; @@ -69,7 +68,6 @@ public async Task ExecuteAsync_CreatesWorkbook_WhenValidParametersProvided() Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any(), Arg.Any()) .Returns(workbook); @@ -91,7 +89,6 @@ await Service.Received(1).CreateWorkbookAsync( "Test Workbook", """{"items":[{"type":"text","content":"Test content"}]}""", "azure monitor", - Arg.Any(), Arg.Any(), Arg.Any()); } @@ -121,7 +118,6 @@ public async Task ExecuteAsync_UsesProvidedSourceId_WhenSpecified() Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any(), Arg.Any()) .Returns(workbook); @@ -141,7 +137,6 @@ await Service.Received(1).CreateWorkbookAsync( "Test Workbook", """{"items":[{"type":"text","content":"Test content"}]}""", "custom-source", - Arg.Any(), Arg.Any(), Arg.Any()); } @@ -156,7 +151,6 @@ public async Task ExecuteAsync_ReturnsError_WhenServiceReturnsNull() Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any(), Arg.Any()) .Returns((WorkbookInfo?)null); @@ -182,7 +176,6 @@ public async Task ExecuteAsync_HandlesServiceErrors() Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any(), Arg.Any()) .ThrowsAsync(new InvalidOperationException("Service error")); @@ -223,7 +216,6 @@ public async Task ExecuteAsync_PassesCorrectParameters_ToService() Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any(), Arg.Any()) .Returns(workbook); @@ -242,7 +234,6 @@ await Service.Received(1).CreateWorkbookAsync( "My Test Workbook", """{"version": "Notebook/1.0","items": [{"type": "1","content": "Hello World"}]}""", "azure monitor", - Arg.Any(), Arg.Any(), Arg.Any()); } @@ -258,7 +249,6 @@ public async Task ExecuteAsync_PassesNullTenant_WhenTenantNotProvided() Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any(), Arg.Any()) .Returns(workbook); @@ -277,7 +267,6 @@ await Service.Received(1).CreateWorkbookAsync( "Test Workbook", """{"items":[]}""", "azure monitor", - Arg.Any(), Arg.Is(t => t == null), Arg.Any()); } @@ -371,7 +360,6 @@ public async Task ExecuteAsync_WithComplexSerializedContent_HandlesCorrectly() Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any(), Arg.Any()) .Returns(workbook); @@ -388,49 +376,6 @@ public async Task ExecuteAsync_WithComplexSerializedContent_HandlesCorrectly() Assert.NotNull(result.Results); } - [Fact] - public async Task ExecuteAsync_WithRetryOptions_PassesCorrectParameters() - { - // Arrange - var workbook = new WorkbookInfo("test-id", null, null, null, null, null, null, null, null, null, null, null); - Service.CreateWorkbookAsync( - Arg.Any(), - Arg.Any(), - Arg.Any(), - Arg.Any(), - Arg.Any(), - Arg.Any(), - Arg.Any(), - Arg.Any()) - .Returns(workbook); - - // Act - await ExecuteCommandAsync( - "--subscription", "test-sub", - "--resource-group", "test-rg", - "--display-name", "Test Workbook", - "--serialized-content", """{"items":[]}""", - "--retry-max-retries", "5", - "--retry-delay", "2.5", - "--retry-max-delay", "30", - "--retry-mode", "Exponential"); - - // Assert - await Service.Received(1).CreateWorkbookAsync( - "test-sub", - "test-rg", - "Test Workbook", - """{"items":[]}""", - "azure monitor", - Arg.Is(opts => - opts != null && - opts.MaxRetries == 5 && - opts.DelaySeconds == 2.5 && - opts.MaxDelaySeconds == 30), - Arg.Any(), - Arg.Any()); - } - [Fact] public async Task ExecuteAsync_HandlesExceptionCorrectly_WhenExceptionOccurs() { @@ -441,7 +386,6 @@ public async Task ExecuteAsync_HandlesExceptionCorrectly_WhenExceptionOccurs() Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any(), Arg.Any()) .ThrowsAsync(new ArgumentException("Invalid workbook data")); diff --git a/tools/Azure.Mcp.Tools.Workbooks/tests/Azure.Mcp.Tools.Workbooks.Tests/DeleteWorkbooksCommandTests.cs b/tools/Azure.Mcp.Tools.Workbooks/tests/Azure.Mcp.Tools.Workbooks.Tests/DeleteWorkbooksCommandTests.cs index 2da07d376f..f5a1b138d3 100644 --- a/tools/Azure.Mcp.Tools.Workbooks/tests/Azure.Mcp.Tools.Workbooks.Tests/DeleteWorkbooksCommandTests.cs +++ b/tools/Azure.Mcp.Tools.Workbooks/tests/Azure.Mcp.Tools.Workbooks.Tests/DeleteWorkbooksCommandTests.cs @@ -6,7 +6,6 @@ using Azure.Mcp.Tools.Workbooks.Commands.Workbooks; using Azure.Mcp.Tools.Workbooks.Models; using Azure.Mcp.Tools.Workbooks.Services; -using Microsoft.Mcp.Core.Options; using Microsoft.Mcp.Tests.Client; using NSubstitute; using NSubstitute.ExceptionExtensions; @@ -46,7 +45,6 @@ public async Task ExecuteAsync_ReturnsSuccess_WhenWorkbookDeletedSuccessfully() Service.DeleteWorkbooksAsync( Arg.Any>(), - Arg.Any(), Arg.Any(), Arg.Any()) .Returns(batchResult); @@ -73,7 +71,6 @@ public async Task ExecuteAsync_ReturnsBatchResults_WhenMultipleWorkbooksDeleted( Service.DeleteWorkbooksAsync( Arg.Any>(), - Arg.Any(), Arg.Any(), Arg.Any()) .Returns(batchResult); @@ -100,7 +97,6 @@ public async Task ExecuteAsync_ReturnsPartialResults_WhenSomeDeletionsFail() Service.DeleteWorkbooksAsync( Arg.Any>(), - Arg.Any(), Arg.Any(), Arg.Any()) .Returns(batchResult); @@ -129,7 +125,6 @@ public async Task ExecuteAsync_ReturnsError_WhenAllDeletionsFail() Service.DeleteWorkbooksAsync( Arg.Any>(), - Arg.Any(), Arg.Any(), Arg.Any()) .Returns(batchResult); @@ -152,7 +147,6 @@ public async Task ExecuteAsync_HandlesServiceErrors() Service.DeleteWorkbooksAsync( Arg.Any>(), - Arg.Any(), Arg.Any(), Arg.Any()) .ThrowsAsync(new Exception("Service error")); @@ -176,7 +170,6 @@ public async Task ExecuteAsync_PassesCorrectParameters_ToService() Service.DeleteWorkbooksAsync( Arg.Any>(), - Arg.Any(), Arg.Any(), Arg.Any()) .Returns(batchResult); @@ -187,7 +180,6 @@ public async Task ExecuteAsync_PassesCorrectParameters_ToService() // Assert await Service.Received(1).DeleteWorkbooksAsync( Arg.Is>(ids => ids.Contains(workbookId)), - Arg.Any(), Arg.Is("test-tenant"), Arg.Any()); } @@ -202,7 +194,6 @@ public async Task ExecuteAsync_PassesNullTenant_WhenTenantNotProvided() Service.DeleteWorkbooksAsync( Arg.Any>(), - Arg.Any(), Arg.Any(), Arg.Any()) .Returns(batchResult); @@ -213,7 +204,6 @@ public async Task ExecuteAsync_PassesNullTenant_WhenTenantNotProvided() // Assert await Service.Received(1).DeleteWorkbooksAsync( Arg.Is>(ids => ids.Contains(workbookId)), - Arg.Any(), Arg.Is(t => t == null), Arg.Any()); } @@ -239,7 +229,6 @@ public async Task ExecuteAsync_WithValidResourceId_ProcessesCorrectly() Service.DeleteWorkbooksAsync( Arg.Any>(), - Arg.Any(), Arg.Any(), Arg.Any()) .Returns(batchResult); @@ -254,32 +243,4 @@ public async Task ExecuteAsync_WithValidResourceId_ProcessesCorrectly() Assert.Contains(validWorkbookId, result.Succeeded); } - [Fact] - public async Task ExecuteAsync_WithRetryPolicy_PassesRetryOptions() - { - // Arrange - var workbookId = "/subscriptions/sub1/resourceGroups/rg1/providers/microsoft.insights/workbooks/workbook1"; - - var batchResult = new WorkbookDeleteBatchResult([workbookId], []); - - Service.DeleteWorkbooksAsync( - Arg.Any>(), - Arg.Any(), - Arg.Any(), - Arg.Any()) - .Returns(batchResult); - - // Act - await ExecuteCommandAsync("--workbook-ids", workbookId, "--retry-max-retries", "5", "--retry-delay", "2"); - - // Assert - await Service.Received(1).DeleteWorkbooksAsync( - Arg.Is>(ids => ids.Contains(workbookId)), - Arg.Is(options => - options != null && - options.MaxRetries == 5 && - options.DelaySeconds == 2), - Arg.Any(), - Arg.Any()); - } } diff --git a/tools/Azure.Mcp.Tools.Workbooks/tests/Azure.Mcp.Tools.Workbooks.Tests/ListWorkbooksCommandTests.cs b/tools/Azure.Mcp.Tools.Workbooks/tests/Azure.Mcp.Tools.Workbooks.Tests/ListWorkbooksCommandTests.cs index dc4b049502..b13ca963bc 100644 --- a/tools/Azure.Mcp.Tools.Workbooks/tests/Azure.Mcp.Tools.Workbooks.Tests/ListWorkbooksCommandTests.cs +++ b/tools/Azure.Mcp.Tools.Workbooks/tests/Azure.Mcp.Tools.Workbooks.Tests/ListWorkbooksCommandTests.cs @@ -7,7 +7,6 @@ using Azure.Mcp.Tools.Workbooks.Commands.Workbooks; using Azure.Mcp.Tools.Workbooks.Models; using Azure.Mcp.Tools.Workbooks.Services; -using Microsoft.Mcp.Core.Options; using NSubstitute; using NSubstitute.ExceptionExtensions; using Xunit; @@ -90,7 +89,6 @@ public async Task ExecuteAsync_ReturnsWorkbooks_WhenWorkbooksExist() Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any(), Arg.Any()) .Returns(listResult); @@ -131,7 +129,6 @@ public async Task ExecuteAsync_ReturnsEmptyResults_WhenNoWorkbooksExist() Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any(), Arg.Any()) .Returns(listResult); @@ -159,7 +156,6 @@ public async Task ExecuteAsync_HandlesServiceErrors() Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any(), Arg.Any()) .ThrowsAsync(new Exception("Service error")); @@ -188,7 +184,6 @@ public async Task ExecuteAsync_PassesCorrectParameters_ToService() Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any(), Arg.Any()) .Returns(listResult); @@ -207,7 +202,6 @@ await Service.Received(1).ListWorkbooksAsync( Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Is("test-tenant"), Arg.Any()); } @@ -224,7 +218,6 @@ public async Task ExecuteAsync_PassesNullTenant_WhenTenantNotProvided() Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any(), Arg.Any()) .Returns(listResult); @@ -242,7 +235,6 @@ await Service.Received(1).ListWorkbooksAsync( Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Is(t => t == null), Arg.Any()); } @@ -301,7 +293,6 @@ public async Task ExecuteAsync_WithComplexWorkbookData_SerializesCorrectly() Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any(), Arg.Any()) .Returns(listResult); @@ -354,7 +345,6 @@ public async Task ExecuteAsync_WithKindFilter_PassesCorrectFilter() Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any(), Arg.Any()) .Returns(listResult); @@ -377,7 +367,6 @@ await Service.Received(1).ListWorkbooksAsync( Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any(), Arg.Any()); } @@ -413,7 +402,6 @@ public async Task ExecuteAsync_WithCategoryFilter_PassesCorrectFilter() Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any(), Arg.Any()) .Returns(listResult); @@ -436,7 +424,6 @@ await Service.Received(1).ListWorkbooksAsync( Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any(), Arg.Any()); } @@ -473,7 +460,6 @@ public async Task ExecuteAsync_WithSourceIdFilter_PassesCorrectFilter() Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any(), Arg.Any()) .Returns(listResult); @@ -496,7 +482,6 @@ await Service.Received(1).ListWorkbooksAsync( Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any(), Arg.Any()); } @@ -533,7 +518,6 @@ public async Task ExecuteAsync_WithMultipleFilters_PassesCorrectFilters() Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any(), Arg.Any()) .Returns(listResult); @@ -558,7 +542,6 @@ await Service.Received(1).ListWorkbooksAsync( Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any(), Arg.Any()); } @@ -594,7 +577,6 @@ public async Task ExecuteAsync_WithoutFilters_PassesEmptyFilters() Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any(), Arg.Any()) .Returns(listResult); @@ -616,7 +598,6 @@ await Service.Received(1).ListWorkbooksAsync( Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any(), Arg.Any()); } @@ -635,7 +616,6 @@ public async Task ExecuteAsync_WithValidKind_AcceptsKindValue(string kind) Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any(), Arg.Any()) .Returns(listResult); @@ -657,7 +637,6 @@ await Service.Received(1).ListWorkbooksAsync( Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any(), Arg.Any()); } @@ -678,7 +657,6 @@ public async Task ExecuteAsync_WithValidCategory_AcceptsCategoryValue(string cat Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any(), Arg.Any()) .Returns(listResult); @@ -700,7 +678,6 @@ await Service.Received(1).ListWorkbooksAsync( Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any(), Arg.Any()); } @@ -736,7 +713,6 @@ public async Task ExecuteAsync_ReturnsTotalCount_WhenIncludeTotalCountTrue() Arg.Any(), Arg.Is(true), // includeTotalCount Arg.Any(), - Arg.Any(), Arg.Any(), Arg.Any()) .Returns(listResult); @@ -764,7 +740,6 @@ public async Task ExecuteAsync_WithMaxResults_PassesMaxResultsToService() Arg.Is(25), // maxResults Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any(), Arg.Any()) .Returns(listResult); @@ -782,7 +757,6 @@ await Service.Received(1).ListWorkbooksAsync( Arg.Is(25), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any(), Arg.Any()); } @@ -803,7 +777,6 @@ public async Task ExecuteAsync_WithOutputFormat_PassesCorrectFormat(string forma Arg.Any(), Arg.Any(), Arg.Is(expectedFormat), - Arg.Any(), Arg.Any(), Arg.Any()) .Returns(listResult); @@ -821,7 +794,6 @@ await Service.Received(1).ListWorkbooksAsync( Arg.Any(), Arg.Any(), Arg.Is(expectedFormat), - Arg.Any(), Arg.Any(), Arg.Any()); } @@ -839,7 +811,6 @@ public async Task ExecuteAsync_WithNameContainsFilter_PassesCorrectFilter() Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any(), Arg.Any()) .Returns(listResult); @@ -857,7 +828,6 @@ await Service.Received(1).ListWorkbooksAsync( Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any(), Arg.Any()); } @@ -876,7 +846,6 @@ public async Task ExecuteAsync_WithModifiedAfterFilter_PassesCorrectFilter() Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any(), Arg.Any()) .Returns(listResult); @@ -894,7 +863,6 @@ await Service.Received(1).ListWorkbooksAsync( Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any(), Arg.Any()); } @@ -915,7 +883,6 @@ public async Task ExecuteAsync_WithVariousDateFormats_ParsesModifiedAfterCorrect Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any(), Arg.Any()) .Returns(listResult); @@ -934,7 +901,6 @@ await Service.Received(1).ListWorkbooksAsync( Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any(), Arg.Any()); } @@ -952,7 +918,6 @@ public async Task ExecuteAsync_WithInvalidDateFormat_IgnoresModifiedAfterFilter( Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any(), Arg.Any()) .Returns(listResult); @@ -971,7 +936,6 @@ await Service.Received(1).ListWorkbooksAsync( Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any(), Arg.Any()); } @@ -992,7 +956,6 @@ public async Task ExecuteAsync_WithMaxResultsOverLimit_CapsAtMaximum(int request Arg.Is(expectedMaxResults), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any(), Arg.Any()) .Returns(listResult); @@ -1010,7 +973,6 @@ await Service.Received(1).ListWorkbooksAsync( Arg.Is(expectedMaxResults), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any(), Arg.Any()); } @@ -1030,7 +992,6 @@ public async Task ExecuteAsync_WithZeroOrNegativeMaxResults_UsesDefaultValue(int Arg.Is(expectedMaxResults), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any(), Arg.Any()) .Returns(listResult); @@ -1048,7 +1009,6 @@ await Service.Received(1).ListWorkbooksAsync( Arg.Is(expectedMaxResults), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any(), Arg.Any()); } @@ -1067,7 +1027,6 @@ public async Task ExecuteAsync_IncludeTotalCountDefaultsToTrue_WhenNotSpecified( Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any(), Arg.Any()) .Returns(listResult); @@ -1085,7 +1044,6 @@ await Service.Received(1).ListWorkbooksAsync( Arg.Any(), Arg.Is(true), // Default should be true Arg.Any(), - Arg.Any(), Arg.Any(), Arg.Any()); } @@ -1128,7 +1086,6 @@ public async Task ExecuteAsync_WithAllSemanticFilters_PassesAllFiltersCorrectly( Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any(), Arg.Any()) .Returns(listResult); @@ -1157,7 +1114,6 @@ await Service.Received(1).ListWorkbooksAsync( Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any(), Arg.Any()); } @@ -1181,7 +1137,6 @@ public async Task ExecuteAsync_WithOutputFormatCaseInsensitive_ParsesCorrectly(s Arg.Any(), Arg.Any(), Arg.Is(expectedFormat), - Arg.Any(), Arg.Any(), Arg.Any()) .Returns(listResult); @@ -1199,7 +1154,6 @@ await Service.Received(1).ListWorkbooksAsync( Arg.Any(), Arg.Any(), Arg.Is(expectedFormat), - Arg.Any(), Arg.Any(), Arg.Any()); } @@ -1217,7 +1171,6 @@ public async Task ExecuteAsync_WithUnknownOutputFormat_DefaultsToStandard() Arg.Any(), Arg.Any(), Arg.Is(OutputFormat.Standard), - Arg.Any(), Arg.Any(), Arg.Any()) .Returns(listResult); @@ -1235,7 +1188,6 @@ await Service.Received(1).ListWorkbooksAsync( Arg.Any(), Arg.Any(), Arg.Is(OutputFormat.Standard), - Arg.Any(), Arg.Any(), Arg.Any()); } @@ -1253,7 +1205,6 @@ public async Task ExecuteAsync_DefaultsToIncludeTotalCountTrue() Arg.Any(), Arg.Is(true), // should default to true Arg.Any(), - Arg.Any(), Arg.Any(), Arg.Any()) .Returns(listResult); @@ -1269,7 +1220,6 @@ await Service.Received(1).ListWorkbooksAsync( Arg.Any(), Arg.Is(true), Arg.Any(), - Arg.Any(), Arg.Any(), Arg.Any()); } @@ -1289,7 +1239,6 @@ public async Task ExecuteAsync_ReturnsEmptyResults_WhenServiceReturnsNullTotalCo Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any(), Arg.Any()) .Returns(listResult); diff --git a/tools/Azure.Mcp.Tools.Workbooks/tests/Azure.Mcp.Tools.Workbooks.Tests/ShowWorkbooksCommandTests.cs b/tools/Azure.Mcp.Tools.Workbooks/tests/Azure.Mcp.Tools.Workbooks.Tests/ShowWorkbooksCommandTests.cs index c0cef7c1a8..f214a03cfa 100644 --- a/tools/Azure.Mcp.Tools.Workbooks/tests/Azure.Mcp.Tools.Workbooks.Tests/ShowWorkbooksCommandTests.cs +++ b/tools/Azure.Mcp.Tools.Workbooks/tests/Azure.Mcp.Tools.Workbooks.Tests/ShowWorkbooksCommandTests.cs @@ -6,7 +6,6 @@ using Azure.Mcp.Tools.Workbooks.Commands.Workbooks; using Azure.Mcp.Tools.Workbooks.Models; using Azure.Mcp.Tools.Workbooks.Services; -using Microsoft.Mcp.Core.Options; using Microsoft.Mcp.Tests.Client; using NSubstitute; using NSubstitute.ExceptionExtensions; @@ -69,7 +68,6 @@ public async Task ExecuteAsync_ReturnsWorkbook_WhenWorkbookExists() Service.GetWorkbooksAsync( Arg.Any>(), - Arg.Any(), Arg.Any(), Arg.Any()) .Returns(batchResult); @@ -129,7 +127,6 @@ public async Task ExecuteAsync_ReturnsBatchResults_WhenMultipleWorkbooksRequeste Service.GetWorkbooksAsync( Arg.Any>(), - Arg.Any(), Arg.Any(), Arg.Any()) .Returns(batchResult); @@ -172,7 +169,6 @@ public async Task ExecuteAsync_ReturnsPartialResults_WhenSomeWorkbooksNotFound() Service.GetWorkbooksAsync( Arg.Any>(), - Arg.Any(), Arg.Any(), Arg.Any()) .Returns(batchResult); @@ -197,7 +193,6 @@ public async Task ExecuteAsync_HandlesServiceErrors() Service.GetWorkbooksAsync( Arg.Any>(), - Arg.Any(), Arg.Any(), Arg.Any()) .ThrowsAsync(new Exception("Service error")); @@ -220,7 +215,6 @@ public async Task ExecuteAsync_PassesCorrectParameters_ToService() Service.GetWorkbooksAsync( Arg.Any>(), - Arg.Any(), Arg.Any(), Arg.Any()) .Returns(batchResult); @@ -231,7 +225,6 @@ public async Task ExecuteAsync_PassesCorrectParameters_ToService() // Assert await Service.Received(1).GetWorkbooksAsync( Arg.Is>(ids => ids.Contains(workbookId)), - Arg.Any(), Arg.Is("test-tenant"), Arg.Any()); } @@ -245,7 +238,6 @@ public async Task ExecuteAsync_PassesNullTenant_WhenTenantNotProvided() Service.GetWorkbooksAsync( Arg.Any>(), - Arg.Any(), Arg.Any(), Arg.Any()) .Returns(batchResult); @@ -256,7 +248,6 @@ public async Task ExecuteAsync_PassesNullTenant_WhenTenantNotProvided() // Assert await Service.Received(1).GetWorkbooksAsync( Arg.Is>(ids => ids.Contains(workbookId)), - Arg.Any(), Arg.Is(t => t == null), Arg.Any()); } @@ -332,7 +323,6 @@ public async Task ExecuteAsync_WithComplexWorkbookData_SerializesCorrectly() Service.GetWorkbooksAsync( Arg.Any>(), - Arg.Any(), Arg.Any(), Arg.Any()) .Returns(batchResult); diff --git a/tools/Azure.Mcp.Tools.Workbooks/tests/Azure.Mcp.Tools.Workbooks.Tests/UpdateWorkbooksCommandTests.cs b/tools/Azure.Mcp.Tools.Workbooks/tests/Azure.Mcp.Tools.Workbooks.Tests/UpdateWorkbooksCommandTests.cs index a87b5c4993..d8f7466dc4 100644 --- a/tools/Azure.Mcp.Tools.Workbooks/tests/Azure.Mcp.Tools.Workbooks.Tests/UpdateWorkbooksCommandTests.cs +++ b/tools/Azure.Mcp.Tools.Workbooks/tests/Azure.Mcp.Tools.Workbooks.Tests/UpdateWorkbooksCommandTests.cs @@ -6,7 +6,6 @@ using Azure.Mcp.Tools.Workbooks.Commands.Workbooks; using Azure.Mcp.Tools.Workbooks.Models; using Azure.Mcp.Tools.Workbooks.Services; -using Microsoft.Mcp.Core.Options; using Microsoft.Mcp.Tests.Client; using NSubstitute; using NSubstitute.ExceptionExtensions; @@ -69,7 +68,6 @@ public async Task ExecuteAsync_UpdatesWorkbook_WhenValidParametersProvided() Arg.Is(workbookId), Arg.Is("Updated Test Workbook"), Arg.Is("{\"version\":\"Notebook/1.0\",\"updated\":true}"), - Arg.Any(), Arg.Any(), Arg.Any()) .Returns(updatedWorkbook); @@ -112,7 +110,6 @@ public async Task ExecuteAsync_UpdatesOnlyDisplayName_WhenOnlyDisplayNameProvide Arg.Is(workbookId), Arg.Is("New Display Name Only"), Arg.Is((string?)null), - Arg.Any(), Arg.Any(), Arg.Any()) .Returns(updatedWorkbook); @@ -153,7 +150,6 @@ public async Task ExecuteAsync_UpdatesOnlySerializedContent_WhenOnlySerializedCo Arg.Is(workbookId), Arg.Is((string?)null), Arg.Is(newSerializedContent), - Arg.Any(), Arg.Any(), Arg.Any()) .Returns(updatedWorkbook); @@ -197,7 +193,6 @@ public async Task ExecuteAsync_PassesCorrectParameters_ToService() Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any(), Arg.Any()) .Returns(updatedWorkbook); @@ -213,7 +208,6 @@ await Service.Received(1).UpdateWorkbookAsync( Arg.Is(workbookId), Arg.Is(displayName), Arg.Is(serializedContent), - Arg.Any(), Arg.Is(t => t == null), Arg.Any()); } @@ -228,7 +222,6 @@ public async Task ExecuteAsync_ReturnsError_WhenServiceReturnsNull() Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any(), Arg.Any()) .Returns(Task.FromResult(null)); @@ -251,7 +244,6 @@ public async Task ExecuteAsync_HandlesServiceErrors() Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any(), Arg.Any()) .ThrowsAsync(new Exception("Service error")); @@ -331,7 +323,6 @@ public async Task ExecuteAsync_WithComplexSerializedContent_HandlesCorrectly() Arg.Is(workbookId), Arg.Is("Updated Complex Workbook"), Arg.Is(complexSerializedData), - Arg.Any(), Arg.Any(), Arg.Any()) .Returns(updatedWorkbook); @@ -378,7 +369,6 @@ public async Task ExecuteAsync_WithTenant_PassesCorrectParameters() Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any(), Arg.Any()) .Returns(updatedWorkbook); @@ -394,58 +384,10 @@ await Service.Received(1).UpdateWorkbookAsync( Arg.Is(workbookId), Arg.Is("Test Workbook"), Arg.Is((string?)null), - Arg.Any(), Arg.Is(tenantId), Arg.Any()); } - [Fact] - public async Task ExecuteAsync_WithRetryOptions_PassesCorrectParameters() - { - // Arrange - var workbookId = "/subscriptions/sub1/resourceGroups/rg1/providers/microsoft.insights/workbooks/workbook1"; - - var updatedWorkbook = new WorkbookInfo( - WorkbookId: workbookId, - DisplayName: "Test Workbook", - Description: "Test Description", - Category: "workbook", - Location: "eastus", - Kind: "shared", - Tags: "{}", - SerializedData: "{\"version\":\"Notebook/1.0\"}", - Version: "1.0", - TimeModified: DateTimeOffset.UtcNow, - UserId: "user1", - SourceId: "azure monitor" - ); - - Service.UpdateWorkbookAsync( - Arg.Any(), - Arg.Any(), - Arg.Any(), - Arg.Any(), - Arg.Any(), - Arg.Any()) - .Returns(updatedWorkbook); - - // Act - await ExecuteCommandAsync( - "--workbook-id", workbookId, - "--display-name", "Test Workbook", - "--retry-max-retries", "5", - "--retry-delay", "2.5"); - - // Assert - await Service.Received(1).UpdateWorkbookAsync( - Arg.Is(workbookId), - Arg.Is("Test Workbook"), - Arg.Is((string?)null), - Arg.Is(x => x != null && x.MaxRetries == 5 && System.Math.Abs(x.DelaySeconds.GetValueOrDefault() - 2.5) < 1e-6), - Arg.Any(), - Arg.Any()); - } - [Fact] public async Task ExecuteAsync_HandlesExceptionCorrectly_WhenExceptionOccurs() { @@ -457,7 +399,6 @@ public async Task ExecuteAsync_HandlesExceptionCorrectly_WhenExceptionOccurs() Arg.Any(), Arg.Any(), Arg.Any(), - Arg.Any(), Arg.Any(), Arg.Any()) .ThrowsAsync(exception);