public static UpdateTableRequest fromJson(String json) {
    return JsonUtil.parse(json, UpdateTableRequestParser::fromJson);
  }
@Test
  public void invalidMetadataUpdates() {
    assertThatThrownBy(
            () ->
                UpdateTableRequestParser.fromJson(
                    "{\"identifier\":{\"namespace\":[\"ns1\"],\"name\":\"table1\"},"
                        + "\"requirements\":[],\"updates\":[23]}"))
        .isInstanceOf(IllegalArgumentException.class)
        .hasMessage("Cannot parse metadata update from non-object value: 23");

    assertThatThrownBy(
            () ->
                UpdateTableRequestParser.fromJson(
                    "{\"identifier\":{\"namespace\":[\"ns1\"],\"name\":\"table1\"},"
                        + "\"requirements\":[],\"updates\":[{}]}"))
        .isInstanceOf(IllegalArgumentException.class)
        .hasMessage("Cannot parse metadata update. Missing field: action");

    assertThatThrownBy(
            () ->
                UpdateTableRequestParser.fromJson(
                    "{\"identifier\":{\"namespace\":[\"ns1\"],\"name\":\"table1\"},"
                        + "\"requirements\":[],\"updates\":[{\"action\":\"assign-uuid\"}]}"))
        .isInstanceOf(IllegalArgumentException.class)
        .hasMessage("Cannot parse missing string: uuid");
  }