kbendick commented on code in PR #4716:
URL: https://github.com/apache/iceberg/pull/4716#discussion_r876267361


##########
core/src/test/java/org/apache/iceberg/TestMetadataUpdateParser.java:
##########
@@ -251,11 +274,138 @@ public void testAddSortOrderFromJson() {
     assertEquals(action, expected, MetadataUpdateParser.fromJson(json));
   }
 
+  @Test
+  public void testSetDefaultSortOrderToJson() {
+    String action = MetadataUpdateParser.SET_DEFAULT_SORT_ORDER;
+    int sortOrderId = 2;
+    String expected = 
String.format("{\"action\":\"%s\",\"sort-order-id\":%d}", action, sortOrderId);
+    MetadataUpdate update = new 
MetadataUpdate.SetDefaultSortOrder(sortOrderId);
+    String actual = MetadataUpdateParser.toJson(update);
+    Assert.assertEquals("Set default sort order should serialize to the 
correct JSON value", expected, actual);
+  }
+
+  @Test
+  public void testSetDefaultSortOrderFromJson() {
+    String action = MetadataUpdateParser.SET_DEFAULT_SORT_ORDER;
+    int sortOrderId = 2;
+    String json = String.format("{\"action\":\"%s\",\"sort-order-id\":%d}", 
action, sortOrderId);
+    MetadataUpdate expected = new 
MetadataUpdate.SetDefaultSortOrder(sortOrderId);
+    assertEquals(action, expected, MetadataUpdateParser.fromJson(json));
+  }
+
+  // TODO - AddSnapshot tests.
+
+  // TODO - Tests that handle multiple snapshot ids.
+  @Test
+  public void testRemoveSnapshotsFromJson() {
+    String action = MetadataUpdateParser.REMOVE_SNAPSHOTS;
+    long snapshotId = 2L;
+    String json = String.format("{\"action\":\"%s\",\"snapshot-ids\":[2]}", 
action);
+    MetadataUpdate expected = new MetadataUpdate.RemoveSnapshot(snapshotId);
+    assertEquals(action, expected, MetadataUpdateParser.fromJson(json));
+  }
+
+  // TODO - Tests that handle multiple snapshot ids.
+  @Test
+  public void testRemoveSnapshotsToJson() {
+    String action = MetadataUpdateParser.REMOVE_SNAPSHOTS;
+    long snapshotId = 2L;
+    String expected = 
String.format("{\"action\":\"%s\",\"snapshot-ids\":[2]}", action);
+    MetadataUpdate update = new MetadataUpdate.RemoveSnapshot(snapshotId);
+    String actual = MetadataUpdateParser.toJson(update);
+    Assert.assertEquals("Remove snapshots should serialize to the correct JSON 
value", expected, actual);
+  }
+
+
+  // TODO - SetSnapshotRef tests.
+
+  @Test
+  public void testSetPropertiesFromJson() {
+    String action = MetadataUpdateParser.SET_PROPERTIES;
+    Map<String, String> props = ImmutableMap.of(
+        "prop1", "val1",
+        "prop2", "val2"
+    );
+    String propsMap = "{\"prop1\":\"val1\",\"prop2\":\"val2\"}";
+    String json = String.format("{\"action\":\"%s\",\"updated\":%s}", action, 
propsMap);
+    MetadataUpdate expected = new MetadataUpdate.SetProperties(props);
+    assertEquals(action, expected, MetadataUpdateParser.fromJson(json));
+  }
+
+  @Test
+  public void testSetPropertiesFromJson_FailsDeserializingNullValue() {
+    String action = MetadataUpdateParser.SET_PROPERTIES;
+    Map<String, String> props = Maps.newHashMap();
+    props.put("prop1", "val1");
+    props.put("prop2", null);
+    String propsMap = "{\"prop1\":\"val1\",\"prop2\":null}";
+    String json = String.format("{\"action\":\"%s\",\"updated\":%s}", action, 
propsMap);
+    AssertHelpers.assertThrows(
+        "Parsing updates from SetProperties with a property set to null should 
throw",
+        IllegalArgumentException.class,
+        "Cannot parse prop2 to a string value: null",

Review Comment:
   This is the error message thrown, although combined with the full stack 
trace I think it should be clear as we'll have `MetadataUpdateParser.fromJson` 
in it.
   
   We might want to move some of the validation logic into 
`MetadataUpdate.SetProperties` though, particularly when the Java object is 
being created (so when the client would be sending the payload using `toJson` 
instead).



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to