// Copyright (c) Microsoft. All rights reserved.
using System;
using System.Text.Json;
using Moq;
namespace Microsoft.Agents.AI.UnitTests;
///
/// Unit tests for the class.
///
public class ToolApprovalAgentBuilderExtensionsTests
{
///
/// Verify that UseToolApproval throws ArgumentNullException when builder is null.
///
[Fact]
public void UseToolApproval_WithNullBuilder_ThrowsArgumentNullException()
{
// Act & Assert
Assert.Throws("builder", () => ((AIAgentBuilder)null!).UseToolApproval());
}
///
/// Verify that UseToolApproval returns a ToolApprovalAgent.
///
[Fact]
public void UseToolApproval_WithValidBuilder_ReturnsToolApprovalAgent()
{
// Arrange
var mockAgent = new Mock();
var builder = new AIAgentBuilder(mockAgent.Object);
// Act
var result = builder.UseToolApproval().Build();
// Assert
Assert.IsType(result);
}
///
/// Verify that UseToolApproval returns the same builder instance for chaining.
///
[Fact]
public void UseToolApproval_ReturnsBuilderForChaining()
{
// Arrange
var mockAgent = new Mock();
var builder = new AIAgentBuilder(mockAgent.Object);
// Act
var result = builder.UseToolApproval();
// Assert
Assert.Same(builder, result);
}
///
/// Verify that UseToolApproval with custom JsonSerializerOptions works correctly.
///
[Fact]
public void UseToolApproval_WithCustomJsonSerializerOptions_ReturnsToolApprovalAgent()
{
// Arrange
var mockAgent = new Mock();
var builder = new AIAgentBuilder(mockAgent.Object);
var options = new JsonSerializerOptions();
// Act
var result = builder.UseToolApproval(jsonSerializerOptions: options).Build();
// Assert
Assert.IsType(result);
}
}