diff --git a/json-unit-assertj/src/main/java/net/javacrumbs/jsonunit/assertj/JsonMapAssert.java b/json-unit-assertj/src/main/java/net/javacrumbs/jsonunit/assertj/JsonMapAssert.java index 021933550..a3480b52c 100644 --- a/json-unit-assertj/src/main/java/net/javacrumbs/jsonunit/assertj/JsonMapAssert.java +++ b/json-unit-assertj/src/main/java/net/javacrumbs/jsonunit/assertj/JsonMapAssert.java @@ -32,6 +32,7 @@ import static java.util.Objects.deepEquals; import static java.util.stream.Collectors.toList; import static net.javacrumbs.jsonunit.assertj.JsonAssertions.json; +import static net.javacrumbs.jsonunit.core.internal.JsonUtils.getNode; import static net.javacrumbs.jsonunit.core.internal.JsonUtils.wrapDeserializedObject; import static org.assertj.core.api.Assertions.entry; import static org.assertj.core.error.ShouldContain.shouldContain; @@ -57,6 +58,14 @@ public JsonMapAssert isEqualTo(@Nullable Object expected) { return compare(expected, configuration); } + /** + * Moves comparison to given node. Second call navigates from the last position in the JSON. + */ + @NotNull + public JsonAssert node(@NotNull String node) { + return new JsonAssert(path.to(node), configuration, getNode(actual, node)); + } + @Override @NotNull public JsonMapAssert containsValue(@Nullable Object expected) { diff --git a/tests/test-base/src/main/java/net/javacrumbs/jsonunit/test/base/AbstractAssertJTest.java b/tests/test-base/src/main/java/net/javacrumbs/jsonunit/test/base/AbstractAssertJTest.java index 6c0e2dc9f..536ad505c 100644 --- a/tests/test-base/src/main/java/net/javacrumbs/jsonunit/test/base/AbstractAssertJTest.java +++ b/tests/test-base/src/main/java/net/javacrumbs/jsonunit/test/base/AbstractAssertJTest.java @@ -736,6 +736,18 @@ void shouldAssertInteger() { assertThatJson("{\"a\":-10}").node("a").isIntegralNumber(); } + @Test + void shouldAllowNodeInJsonMapAssert() { + assertThatThrownBy(() -> + assertThatJson("{\"data\":{\"id\": \"1234\", \"relationships\": false}}") + .inPath("$.data") + .isObject() + .containsEntry("id", "1234") + .node("relationships") + .isObject() + ).hasMessage("Node \"$.data.relationships\" has invalid type, expected: but was: ."); + } + @Test void shouldAssertIntegerFailure() { assertThatThrownBy(() -> assertThatJson("{\"a\":1.0}").node("a").isIntegralNumber())