File: JsonExtensionsTests.cs
Web Access
Project: src\tests\Aspire.Hosting.Azure.Tests\Aspire.Hosting.Azure.Tests.csproj (Aspire.Hosting.Azure.Tests)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System.Text.Json.Nodes;
 
namespace Aspire.Hosting.Azure.Tests;
 
public class JsonExtensionsTests
{
    [Fact]
    public void Prop_ReturnsExistingNode_WhenNodeAlreadyExists()
    {
        // Arrange
        var rootJson = new JsonObject();
        var azureNode = rootJson.Prop("Azure");
        azureNode.AsObject()["TestProperty"] = "TestValue";
 
        // Act
        var retrievedNode = rootJson.Prop("Azure");
 
        // Assert
        Assert.Same(azureNode, retrievedNode);
        Assert.Equal("TestValue", retrievedNode["TestProperty"]!.GetValue<string>());
    }
 
    [Fact]
    public void Prop_CreatesNewNode_WhenNodeDoesNotExist()
    {
        // Arrange
        var rootJson = new JsonObject();
 
        // Act
        var newNode = rootJson.Prop("NewProperty");
 
        // Assert
        Assert.NotNull(newNode);
        Assert.Same(rootJson["NewProperty"], newNode);
    }
 
    [Fact]
    public void Prop_NestedAccess_CreatesHierarchy()
    {
        // Arrange
        var rootJson = new JsonObject();
 
        // Act
        var deeply = rootJson.Prop("Level1")
                              .Prop("Level2")
                              .Prop("Level3")
                              .Prop("Level4");
 
        // Assert
        Assert.NotNull(rootJson["Level1"]);
        Assert.NotNull(rootJson["Level1"]!["Level2"]);
        Assert.NotNull(rootJson["Level1"]!["Level2"]!["Level3"]);
        Assert.NotNull(rootJson["Level1"]!["Level2"]!["Level3"]!["Level4"]);
        Assert.Same(deeply, rootJson["Level1"]!["Level2"]!["Level3"]!["Level4"]);
    }
}