@@ -175,6 +175,29 @@ TEST(JsonInternalTest, PartitionSpec) {
175175 EXPECT_EQ (*spec, *parsed_spec_result.value ());
176176}
177177
178+ TEST (JsonInternalTest, SortOrderFromJson) {
179+ auto identity_transform = Transform::Identity ();
180+ SortField st1 (5 , identity_transform, SortDirection::kAscending , NullOrder::kFirst );
181+ SortField st2 (7 , identity_transform, SortDirection::kDescending , NullOrder::kLast );
182+ ICEBERG_UNWRAP_OR_FAIL (auto sort_order, SortOrder::Make (100 , {st1, st2}));
183+
184+ auto json = ToJson (*sort_order);
185+ ICEBERG_UNWRAP_OR_FAIL (auto parsed, SortOrderFromJson (json));
186+ EXPECT_EQ (*sort_order, *parsed);
187+ }
188+
189+ TEST (JsonInternalTest, PartitionSpecFromJson) {
190+ auto identity_transform = Transform::Identity ();
191+ ICEBERG_UNWRAP_OR_FAIL (
192+ auto spec,
193+ PartitionSpec::Make (1 , {PartitionField (3 , 101 , " region" , identity_transform),
194+ PartitionField (5 , 102 , " ts" , identity_transform)}));
195+
196+ auto json = ToJson (*spec);
197+ ICEBERG_UNWRAP_OR_FAIL (auto parsed, PartitionSpecFromJson (json));
198+ EXPECT_EQ (*spec, *parsed);
199+ }
200+
178201TEST (JsonInternalTest, SnapshotRefBranch) {
179202 SnapshotRef ref (1234567890 , SnapshotRef::Branch{.min_snapshots_to_keep = 10 ,
180203 .max_snapshot_age_ms = 123456789 ,
@@ -349,6 +372,23 @@ TEST(JsonInternalTest, TableUpdateSetCurrentSchema) {
349372 update);
350373}
351374
375+ TEST (JsonInternalTest, TableUpdateAddPartitionSpec) {
376+ auto identity_transform = Transform::Identity ();
377+ ICEBERG_UNWRAP_OR_FAIL (
378+ auto spec,
379+ PartitionSpec::Make (1 , {PartitionField (3 , 101 , " region" , identity_transform)}));
380+ table::AddPartitionSpec update (std::move (spec));
381+
382+ auto json = ToJson (update);
383+ EXPECT_EQ (json[" action" ], " add-spec" );
384+ EXPECT_TRUE (json.contains (" spec" ));
385+
386+ auto parsed = TableUpdateFromJson (json);
387+ ASSERT_THAT (parsed, IsOk ());
388+ auto * actual = internal::checked_cast<table::AddPartitionSpec*>(parsed.value ().get ());
389+ EXPECT_EQ (*actual->spec (), *update.spec ());
390+ }
391+
352392TEST (JsonInternalTest, TableUpdateSetDefaultPartitionSpec) {
353393 table::SetDefaultPartitionSpec update (2 );
354394 nlohmann::json expected = R"( {"action":"set-default-spec","spec-id":2})" _json;
@@ -386,6 +426,22 @@ TEST(JsonInternalTest, TableUpdateRemoveSchemas) {
386426 EXPECT_EQ (*internal::checked_cast<table::RemoveSchemas*>(parsed.value ().get ()), update);
387427}
388428
429+ TEST (JsonInternalTest, TableUpdateAddSortOrder) {
430+ auto identity_transform = Transform::Identity ();
431+ SortField st (5 , identity_transform, SortDirection::kAscending , NullOrder::kFirst );
432+ ICEBERG_UNWRAP_OR_FAIL (auto sort_order, SortOrder::Make (1 , {st}));
433+ table::AddSortOrder update (std::move (sort_order));
434+
435+ auto json = ToJson (update);
436+ EXPECT_EQ (json[" action" ], " add-sort-order" );
437+ EXPECT_TRUE (json.contains (" sort-order" ));
438+
439+ auto parsed = TableUpdateFromJson (json);
440+ ASSERT_THAT (parsed, IsOk ());
441+ auto * actual = internal::checked_cast<table::AddSortOrder*>(parsed.value ().get ());
442+ EXPECT_EQ (*actual->sort_order (), *update.sort_order ());
443+ }
444+
389445TEST (JsonInternalTest, TableUpdateSetDefaultSortOrder) {
390446 table::SetDefaultSortOrder update (1 );
391447 nlohmann::json expected =
0 commit comments