Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
changes:
- section: "Other Changes"
description: "Policy: Improve testability by removing dependency on CommandContext.ServiceProvider in ExecuteAsync"
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,12 @@

namespace Azure.Mcp.Tools.Policy.Commands.Assignment;

public sealed class PolicyAssignmentListCommand(ILogger<PolicyAssignmentListCommand> logger)
public sealed class PolicyAssignmentListCommand(ILogger<PolicyAssignmentListCommand> logger, IPolicyService policyService)
: SubscriptionCommand<PolicyAssignmentListOptions>
{
private const string CommandTitle = "List Policy Assignments";
private readonly ILogger<PolicyAssignmentListCommand> _logger = logger;
private readonly IPolicyService _policyService = policyService;

public override string Id => "b7c4d3e2-0f1a-4b8c-9d6e-5a7b8c9d0e1f";

Expand Down Expand Up @@ -69,8 +70,7 @@ public override async Task<CommandResponse> ExecuteAsync(CommandContext context,

try
{
var policyService = context.GetService<IPolicyService>();
var assignments = await policyService.ListPolicyAssignmentsAsync(
var assignments = await _policyService.ListPolicyAssignmentsAsync(
options.Subscription!,
options.Scope,
options.Tenant,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,15 +29,14 @@ public PolicyAssignmentListCommandTests()
_logger = Substitute.For<ILogger<PolicyAssignmentListCommand>>();

var services = new ServiceCollection();
services.AddSingleton(_service);
_serviceProvider = services.BuildServiceProvider();
}

[Fact]
public void Constructor_InitializesCommandCorrectly()
{
// Arrange & Act
var command = new PolicyAssignmentListCommand(_logger);
var command = new PolicyAssignmentListCommand(_logger, _service);

// Assert
Assert.NotNull(command);
Expand All @@ -63,7 +62,7 @@ public async Task ExecuteAsync_ValidatesInputCorrectly(
string? expectedErrorContext)
{
// Arrange
var command = new PolicyAssignmentListCommand(_logger);
var command = new PolicyAssignmentListCommand(_logger, _service);
var args = new List<string>();

if (!string.IsNullOrEmpty(subscription))
Expand Down Expand Up @@ -107,7 +106,7 @@ public async Task ExecuteAsync_ValidatesInputCorrectly(
public async Task ExecuteAsync_DeserializationValidation()
{
// Arrange
var command = new PolicyAssignmentListCommand(_logger);
var command = new PolicyAssignmentListCommand(_logger, _service);

var assignments = new List<PolicyAssignment>
{
Expand Down Expand Up @@ -151,7 +150,7 @@ public async Task ExecuteAsync_DeserializationValidation()
public async Task ExecuteAsync_HandlesServiceErrors()
{
// Arrange
var command = new PolicyAssignmentListCommand(_logger);
var command = new PolicyAssignmentListCommand(_logger, _service);

_service.ListPolicyAssignmentsAsync(
Arg.Any<string>(),
Expand All @@ -176,7 +175,7 @@ public async Task ExecuteAsync_HandlesServiceErrors()
public async Task ExecuteAsync_WithScope_PassesScopeToService()
{
// Arrange
var command = new PolicyAssignmentListCommand(_logger);
var command = new PolicyAssignmentListCommand(_logger, _service);

var assignments = new List<PolicyAssignment>();
_service.ListPolicyAssignmentsAsync(
Expand Down Expand Up @@ -207,7 +206,7 @@ await _service.Received(1).ListPolicyAssignmentsAsync(
public async Task ExecuteAsync_WithoutScope_PassesNullScope()
{
// Arrange
var command = new PolicyAssignmentListCommand(_logger);
var command = new PolicyAssignmentListCommand(_logger, _service);

var assignments = new List<PolicyAssignment>();
_service.ListPolicyAssignmentsAsync(
Expand Down Expand Up @@ -237,7 +236,7 @@ await _service.Received(1).ListPolicyAssignmentsAsync(
public async Task ExecuteAsync_ReturnsEmptyList_WhenNoAssignments()
{
// Arrange
var command = new PolicyAssignmentListCommand(_logger);
var command = new PolicyAssignmentListCommand(_logger, _service);

var assignments = new List<PolicyAssignment>();
_service.ListPolicyAssignmentsAsync(
Expand Down Expand Up @@ -269,7 +268,7 @@ public async Task ExecuteAsync_ReturnsEmptyList_WhenNoAssignments()
public void GetCommand_ReturnsValidCommand()
{
// Arrange
var command = new PolicyAssignmentListCommand(_logger);
var command = new PolicyAssignmentListCommand(_logger, _service);

// Act
var systemCommand = command.GetCommand();
Expand Down