### Question:
JsonUtil { public static OptionalInt getInt(final ObjectNode node, final String key) { return getValue(node, key) .filter(jsonNode -> validateType(jsonNode, JsonNodeType.NUMBER)) .filter(JsonUtil::validateInt) .map(JsonNode::asInt) .map(OptionalInt::of) .orElse(OptionalInt.empty()); }  static ObjectNode normalizeKeys(final ObjectNode objectNode); static Optional<String> getValueAsString(final ObjectNode node, final String key); static String getValueAsString(
      final ObjectNode node, final String key, final String defaultValue); static Optional<String> getString(final ObjectNode node, final String key); static String getString(
      final ObjectNode node, final String key, final String defaultValue); static OptionalInt getInt(final ObjectNode node, final String key); static int getInt(final ObjectNode node, final String key, final int defaultValue); static OptionalLong getLong(final ObjectNode json, final String key); static long getLong(final ObjectNode json, final String key, final long defaultValue); static Optional<Boolean> getBoolean(final ObjectNode node, final String key); static boolean getBoolean(
      final ObjectNode node, final String key, final boolean defaultValue); static ObjectNode createEmptyObjectNode(); static ObjectNode objectNodeFromMap(final Map<String, Object> map); static ObjectNode objectNodeFromString(final String jsonData); static ObjectNode objectNodeFromString(
      final String jsonData, final boolean allowComments); static String getJson(final Object objectNode); static String getJson(final Object objectNode, final boolean prettyPrint); static ObjectMapper getObjectMapper(); static Optional<ObjectNode> getObjectNode(final ObjectNode json, final String fieldKey); static Optional<ObjectNode> getObjectNode(
      final ObjectNode json, final String fieldKey, final boolean strict); static Optional<ArrayNode> getArrayNode(final ObjectNode json, final String fieldKey); static Optional<ArrayNode> getArrayNode(
      final ObjectNode json, final String fieldKey, final boolean strict);  }### Answer:
@Test public void getInt_nonExistentKey() { final ObjectNode node = mapper.createObjectNode(); final OptionalInt result = JsonUtil.getInt(node, "test"); assertThat(result).isEmpty(); }
@Test public void getInt_nullValue() { final ObjectNode node = mapper.createObjectNode(); node.set("test", null); final OptionalInt result = JsonUtil.getInt(node, "test"); assertThat(result).isEmpty(); }
@Test public void getInt_validValue() { final ObjectNode node = mapper.createObjectNode(); node.put("test", Integer.MAX_VALUE); final OptionalInt result = JsonUtil.getInt(node, "test"); assertThat(result).hasValue(Integer.MAX_VALUE); }
@Test public void getInt_nullValue_withDefault() { final int defaultValue = 11; final ObjectNode node = mapper.createObjectNode(); node.set("test", null); final int result = JsonUtil.getInt(node, "test", defaultValue); assertThat(result).isEqualTo(defaultValue); }
@Test public void getInt_nonExistentKey_withDefault() { final int defaultValue = 11; final ObjectNode node = mapper.createObjectNode(); final int result = JsonUtil.getInt(node, "test", defaultValue); assertThat(result).isEqualTo(defaultValue); }
@Test public void getInt_validValue_withDefault() { final ObjectNode node = mapper.createObjectNode(); node.put("test", Integer.MAX_VALUE); final int result = JsonUtil.getInt(node, "test", 11); assertThat(result).isEqualTo(Integer.MAX_VALUE); }