using System.Text.Json.Nodes; using IdentityShroud.TestUtils.Asserts; using Xunit.Sdk; namespace IdentityShroud.TestUtils.Tests.Asserts; public class JsonObjectAssertTests { [Theory] [InlineData("foo", new string[] { "foo" })] [InlineData("foo.bar", new string[] { "foo", "bar" })] [InlineData("foo[1].bar", new string[] { "foo", "1", "bar" })] public void ParsePath(string path, string[] expected) { var result = JsonObjectAssert.ParsePath(path); Assert.Equal(expected, result); } [Fact] public void NavigateToPath_Success() { JsonObject foo = new(); foo["bar"] = 1; JsonObject obj = new(); obj["foo"] = foo; JsonNode? node = JsonObjectAssert.NavigateToPath(obj, ["foo", "bar"]); Assert.NotNull(node); } [Fact] public void NavigateToPath_PathDoesNotExist() { JsonObject obj = new(); Assert.Throws( () => JsonObjectAssert.NavigateToPath(obj, ["test"]), ex => ex.Message.StartsWith("Path 'test' does not exist") ? null : ex.Message); } [Fact] public void NavigateToPath_MemberOfNullObject() { JsonObject obj = new(); obj["foo"] = null; Assert.Throws( () => JsonObjectAssert.NavigateToPath(obj, ["foo", "bar"]), ex => ex.Message.StartsWith("Path 'foo.bar' does not exist") ? null : ex.Message); } [Fact] public void Equal_WrongType() { JsonObject obj = new(); obj["test"] = new JsonObject(); Assert.Throws( () => JsonObjectAssert.Equal("str", obj, ["test"]), ex => ex.Message.StartsWith("Type mismatch") ? null : ex.Message); } [Fact] public void Equal_Match() { JsonObject obj = new(); obj["test"] = "str"; JsonObjectAssert.Equal("str", obj, ["test"]); } }