// Copyright (c) Microsoft. All rights reserved. using System; using System.Text.Json; namespace Microsoft.Agents.AI.Abstractions.UnitTests; /// /// Tests for . /// public class ServiceIdAgentSessionTests { #region Constructor and Property Tests [Fact] public void Constructor_SetsDefaults() { // Arrange & Act var session = new TestServiceIdAgentSession(); // Assert Assert.Null(session.GetServiceSessionId()); } [Fact] public void Constructor_WithServiceSessionId_SetsProperty() { // Arrange & Act var session = new TestServiceIdAgentSession("service-id-123"); // Assert Assert.Equal("service-id-123", session.GetServiceSessionId()); } [Fact] public void Constructor_WithSerializedId_SetsProperty() { // Arrange var serviceSessionWrapper = new ServiceIdAgentSession.ServiceIdAgentSessionState { ServiceSessionId = "service-id-456" }; var json = JsonSerializer.SerializeToElement(serviceSessionWrapper, TestJsonSerializerContext.Default.ServiceIdAgentSessionState); // Act var session = new TestServiceIdAgentSession(json); // Assert Assert.Equal("service-id-456", session.GetServiceSessionId()); } [Fact] public void Constructor_WithSerializedUndefinedId_SetsProperty() { // Arrange var emptyObject = new EmptyObject(); var json = JsonSerializer.SerializeToElement(emptyObject, TestJsonSerializerContext.Default.EmptyObject); // Act var session = new TestServiceIdAgentSession(json); // Assert Assert.Null(session.GetServiceSessionId()); } [Fact] public void Constructor_WithInvalidJson_ThrowsArgumentException() { // Arrange var invalidJson = JsonSerializer.SerializeToElement(42, TestJsonSerializerContext.Default.Int32); // Act & Assert Assert.Throws(() => new TestServiceIdAgentSession(invalidJson)); } #endregion #region SerializeAsync Tests [Fact] public void Serialize_ReturnsCorrectJson_WhenServiceSessionIdIsSet() { // Arrange var session = new TestServiceIdAgentSession("service-id-789"); // Act var json = session.Serialize(); // Assert Assert.Equal(JsonValueKind.Object, json.ValueKind); Assert.True(json.TryGetProperty("serviceSessionId", out var idProperty)); Assert.Equal("service-id-789", idProperty.GetString()); } [Fact] public void Serialize_ReturnsUndefinedServiceSessionId_WhenNotSet() { // Arrange var session = new TestServiceIdAgentSession(); // Act var json = session.Serialize(); // Assert Assert.Equal(JsonValueKind.Object, json.ValueKind); Assert.False(json.TryGetProperty("serviceSessionId", out _)); } #endregion // Sealed test subclass to expose protected members for testing private sealed class TestServiceIdAgentSession : ServiceIdAgentSession { public TestServiceIdAgentSession() { } public TestServiceIdAgentSession(string serviceSessionId) : base(serviceSessionId) { } public TestServiceIdAgentSession(JsonElement serializedSessionState) : base(serializedSessionState) { } public string? GetServiceSessionId() => this.ServiceSessionId; } // Helper class to represent empty objects internal sealed class EmptyObject; }