This is an automated email from the ASF dual-hosted git repository.

diqiu50 pushed a commit to branch glue-pr04
in repository https://gitbox.apache.org/repos/asf/gravitino.git


The following commit(s) were added to refs/heads/glue-pr04 by this push:
     new 3f86880106 fix(catalog-glue): merge TestGlueCatalogSchema and 
TestGlueCatalogTable into TestGlueCatalogOperations
3f86880106 is described below

commit 3f86880106c531288fe553a04213941e0701a8a1
Author: diqiu50 <[email protected]>
AuthorDate: Thu Apr 23 20:28:09 2026 +0800

    fix(catalog-glue): merge TestGlueCatalogSchema and TestGlueCatalogTable 
into TestGlueCatalogOperations
---
 ...ogTable.java => TestGlueCatalogOperations.java} | 257 ++++++++++++++++-
 .../catalog/glue/TestGlueCatalogSchema.java        | 314 ---------------------
 2 files changed, 253 insertions(+), 318 deletions(-)

diff --git 
a/catalogs/catalog-glue/src/test/java/org/apache/gravitino/catalog/glue/TestGlueCatalogTable.java
 
b/catalogs/catalog-glue/src/test/java/org/apache/gravitino/catalog/glue/TestGlueCatalogOperations.java
similarity index 60%
rename from 
catalogs/catalog-glue/src/test/java/org/apache/gravitino/catalog/glue/TestGlueCatalogTable.java
rename to 
catalogs/catalog-glue/src/test/java/org/apache/gravitino/catalog/glue/TestGlueCatalogOperations.java
index 3b1ca8f812..1e804a08d4 100644
--- 
a/catalogs/catalog-glue/src/test/java/org/apache/gravitino/catalog/glue/TestGlueCatalogTable.java
+++ 
b/catalogs/catalog-glue/src/test/java/org/apache/gravitino/catalog/glue/TestGlueCatalogOperations.java
@@ -24,6 +24,7 @@ import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
@@ -33,8 +34,11 @@ import java.util.List;
 import java.util.Map;
 import org.apache.gravitino.NameIdentifier;
 import org.apache.gravitino.Namespace;
+import org.apache.gravitino.SchemaChange;
 import org.apache.gravitino.exceptions.NoSuchSchemaException;
 import org.apache.gravitino.exceptions.NoSuchTableException;
+import org.apache.gravitino.exceptions.NonEmptySchemaException;
+import org.apache.gravitino.exceptions.SchemaAlreadyExistsException;
 import org.apache.gravitino.exceptions.TableAlreadyExistsException;
 import org.apache.gravitino.rel.Column;
 import org.apache.gravitino.rel.TableChange;
@@ -48,19 +52,28 @@ import org.junit.jupiter.api.Test;
 import org.mockito.ArgumentCaptor;
 import software.amazon.awssdk.services.glue.GlueClient;
 import software.amazon.awssdk.services.glue.model.AlreadyExistsException;
+import software.amazon.awssdk.services.glue.model.CreateDatabaseRequest;
 import software.amazon.awssdk.services.glue.model.CreateTableRequest;
+import software.amazon.awssdk.services.glue.model.Database;
+import software.amazon.awssdk.services.glue.model.DeleteDatabaseRequest;
 import software.amazon.awssdk.services.glue.model.DeleteTableRequest;
 import software.amazon.awssdk.services.glue.model.EntityNotFoundException;
+import software.amazon.awssdk.services.glue.model.GetDatabaseRequest;
+import software.amazon.awssdk.services.glue.model.GetDatabaseResponse;
+import software.amazon.awssdk.services.glue.model.GetDatabasesRequest;
+import software.amazon.awssdk.services.glue.model.GetDatabasesResponse;
 import software.amazon.awssdk.services.glue.model.GetTableRequest;
 import software.amazon.awssdk.services.glue.model.GetTableResponse;
 import software.amazon.awssdk.services.glue.model.GetTablesRequest;
 import software.amazon.awssdk.services.glue.model.GetTablesResponse;
 import software.amazon.awssdk.services.glue.model.StorageDescriptor;
 import software.amazon.awssdk.services.glue.model.Table;
+import software.amazon.awssdk.services.glue.model.UpdateDatabaseRequest;
+import software.amazon.awssdk.services.glue.model.UpdateDatabaseResponse;
 import software.amazon.awssdk.services.glue.model.UpdateTableRequest;
 import software.amazon.awssdk.services.glue.model.UpdateTableResponse;
 
-class TestGlueCatalogTable {
+class TestGlueCatalogOperations {
 
   private GlueCatalogOperations ops;
   private GlueClient mockClient;
@@ -72,6 +85,244 @@ class TestGlueCatalogTable {
     ops.glueClient = mockClient;
   }
 
+  // -------------------------------------------------------------------------
+  // listSchemas
+  // -------------------------------------------------------------------------
+
+  @Test
+  void testListSchemas() {
+    Namespace ns = Namespace.of("metalake", "catalog");
+    Database db1 = Database.builder().name("db1").build();
+    Database db2 = Database.builder().name("db2").build();
+    Database db3 = Database.builder().name("db3").build();
+    Database db4 = Database.builder().name("db4").build();
+
+    when(mockClient.getDatabases(any(GetDatabasesRequest.class)))
+        .thenReturn(
+            GetDatabasesResponse.builder().databaseList(db1, 
db2).nextToken("token1").build())
+        .thenReturn(GetDatabasesResponse.builder().databaseList(db3, 
db4).nextToken(null).build());
+
+    NameIdentifier[] result = ops.listSchemas(ns);
+
+    assertEquals(4, result.length);
+    assertEquals("db1", result[0].name());
+    assertEquals("db4", result[3].name());
+  }
+
+  @Test
+  void testListSchemasReturnsEmptyArray() {
+    Namespace ns = Namespace.of("metalake", "catalog");
+    when(mockClient.getDatabases(any(GetDatabasesRequest.class)))
+        .thenReturn(
+            GetDatabasesResponse.builder()
+                .databaseList(Collections.emptyList())
+                .nextToken(null)
+                .build());
+
+    assertEquals(0, ops.listSchemas(ns).length);
+  }
+
+  // -------------------------------------------------------------------------
+  // createSchema
+  // -------------------------------------------------------------------------
+
+  @Test
+  void testCreateSchema() {
+    NameIdentifier ident = NameIdentifier.of("metalake", "catalog", "mydb");
+    Map<String, String> props = Map.of("k", "v");
+
+    GlueSchema schema = ops.createSchema(ident, "my comment", props);
+
+    verify(mockClient).createDatabase(any(CreateDatabaseRequest.class));
+    assertEquals("mydb", schema.name());
+    assertEquals("my comment", schema.comment());
+    assertEquals(props, schema.properties());
+  }
+
+  @Test
+  void testCreateSchemaAlreadyExists() {
+    NameIdentifier ident = NameIdentifier.of("metalake", "catalog", "mydb");
+    when(mockClient.createDatabase(any(CreateDatabaseRequest.class)))
+        .thenThrow(AlreadyExistsException.builder().message("exists").build());
+
+    assertThrows(
+        SchemaAlreadyExistsException.class,
+        () -> ops.createSchema(ident, null, Collections.emptyMap()));
+  }
+
+  // -------------------------------------------------------------------------
+  // loadSchema
+  // -------------------------------------------------------------------------
+
+  @Test
+  void testLoadSchema() {
+    NameIdentifier ident = NameIdentifier.of("metalake", "catalog", "mydb");
+    Database db =
+        Database.builder()
+            .name("mydb")
+            .description("desc")
+            .parameters(Map.of("k", "v"))
+            .createTime(Instant.now())
+            .build();
+    when(mockClient.getDatabase(any(GetDatabaseRequest.class)))
+        .thenReturn(GetDatabaseResponse.builder().database(db).build());
+
+    GlueSchema schema = ops.loadSchema(ident);
+
+    assertEquals("mydb", schema.name());
+    assertEquals("desc", schema.comment());
+    assertEquals(Map.of("k", "v"), schema.properties());
+  }
+
+  @Test
+  void testLoadSchemaNotFound() {
+    NameIdentifier ident = NameIdentifier.of("metalake", "catalog", "missing");
+    when(mockClient.getDatabase(any(GetDatabaseRequest.class)))
+        .thenThrow(EntityNotFoundException.builder().message("not 
found").build());
+
+    assertThrows(NoSuchSchemaException.class, () -> ops.loadSchema(ident));
+  }
+
+  // -------------------------------------------------------------------------
+  // alterSchema
+  // -------------------------------------------------------------------------
+
+  @Test
+  void testAlterSchemaSetProperty() {
+    NameIdentifier ident = NameIdentifier.of("metalake", "catalog", "mydb");
+    Database db =
+        Database.builder()
+            .name("mydb")
+            .parameters(Map.of("existing", "val"))
+            .createTime(Instant.now())
+            .build();
+    when(mockClient.getDatabase(any(GetDatabaseRequest.class)))
+        .thenReturn(GetDatabaseResponse.builder().database(db).build());
+    when(mockClient.updateDatabase(any(UpdateDatabaseRequest.class)))
+        .thenReturn(UpdateDatabaseResponse.builder().build());
+
+    ArgumentCaptor<UpdateDatabaseRequest> captor =
+        ArgumentCaptor.forClass(UpdateDatabaseRequest.class);
+
+    GlueSchema result = ops.alterSchema(ident, 
SchemaChange.setProperty("newKey", "newVal"));
+
+    verify(mockClient).updateDatabase(captor.capture());
+    Map<String, String> sentParams = 
captor.getValue().databaseInput().parameters();
+    assertEquals("val", sentParams.get("existing"));
+    assertEquals("newVal", sentParams.get("newKey"));
+    assertEquals("newVal", result.properties().get("newKey"));
+  }
+
+  @Test
+  void testAlterSchemaRemoveProperty() {
+    NameIdentifier ident = NameIdentifier.of("metalake", "catalog", "mydb");
+    Database db =
+        Database.builder()
+            .name("mydb")
+            .parameters(Map.of("toRemove", "v"))
+            .createTime(Instant.now())
+            .build();
+    when(mockClient.getDatabase(any(GetDatabaseRequest.class)))
+        .thenReturn(GetDatabaseResponse.builder().database(db).build());
+    when(mockClient.updateDatabase(any(UpdateDatabaseRequest.class)))
+        .thenReturn(UpdateDatabaseResponse.builder().build());
+
+    ArgumentCaptor<UpdateDatabaseRequest> captor =
+        ArgumentCaptor.forClass(UpdateDatabaseRequest.class);
+
+    ops.alterSchema(ident, SchemaChange.removeProperty("toRemove"));
+
+    verify(mockClient).updateDatabase(captor.capture());
+    
assertFalse(captor.getValue().databaseInput().parameters().containsKey("toRemove"));
+  }
+
+  @Test
+  void testAlterSchemaUnsupportedChange() {
+    NameIdentifier ident = NameIdentifier.of("metalake", "catalog", "mydb");
+    Database db =
+        
Database.builder().name("mydb").parameters(Map.of()).createTime(Instant.now()).build();
+    when(mockClient.getDatabase(any(GetDatabaseRequest.class)))
+        .thenReturn(GetDatabaseResponse.builder().database(db).build());
+
+    SchemaChange unsupported = mock(SchemaChange.class);
+
+    assertThrows(IllegalArgumentException.class, () -> ops.alterSchema(ident, 
unsupported));
+  }
+
+  @Test
+  void testAlterSchemaNotFound() {
+    NameIdentifier ident = NameIdentifier.of("metalake", "catalog", "missing");
+    when(mockClient.getDatabase(any(GetDatabaseRequest.class)))
+        .thenThrow(EntityNotFoundException.builder().message("not 
found").build());
+
+    assertThrows(
+        NoSuchSchemaException.class,
+        () -> ops.alterSchema(ident, SchemaChange.setProperty("k", "v")));
+  }
+
+  // -------------------------------------------------------------------------
+  // dropSchema
+  // -------------------------------------------------------------------------
+
+  @Test
+  void testDropSchema() {
+    NameIdentifier ident = NameIdentifier.of("metalake", "catalog", "mydb");
+    when(mockClient.getTables(any(GetTablesRequest.class)))
+        .thenReturn(GetTablesResponse.builder().tableList(List.of()).build());
+
+    boolean dropped = ops.dropSchema(ident, false);
+
+    verify(mockClient).deleteDatabase(any(DeleteDatabaseRequest.class));
+    assertTrue(dropped);
+  }
+
+  @Test
+  void testDropSchemaNonEmpty() {
+    NameIdentifier ident = NameIdentifier.of("metalake", "catalog", "mydb");
+    Table t = Table.builder().name("t1").build();
+    when(mockClient.getTables(any(GetTablesRequest.class)))
+        .thenReturn(GetTablesResponse.builder().tableList(t).build());
+
+    assertThrows(NonEmptySchemaException.class, () -> ops.dropSchema(ident, 
false));
+    verify(mockClient, 
never()).deleteDatabase(any(DeleteDatabaseRequest.class));
+  }
+
+  @Test
+  void testDropSchemaCascadeTrue() {
+    NameIdentifier ident = NameIdentifier.of("metalake", "catalog", "mydb");
+
+    boolean dropped = ops.dropSchema(ident, true);
+
+    verify(mockClient, never()).getTables(any(GetTablesRequest.class));
+    verify(mockClient).deleteDatabase(any(DeleteDatabaseRequest.class));
+    assertTrue(dropped);
+  }
+
+  @Test
+  void testDropSchemaNotFound() {
+    NameIdentifier ident = NameIdentifier.of("metalake", "catalog", "missing");
+    when(mockClient.deleteDatabase(any(DeleteDatabaseRequest.class)))
+        .thenThrow(EntityNotFoundException.builder().message("not 
found").build());
+
+    assertFalse(ops.dropSchema(ident, true));
+  }
+
+  @Test
+  void testDropSchemaWithCatalogId() {
+    ops.catalogId = "123456789012";
+    NameIdentifier ident = NameIdentifier.of("metalake", "catalog", "mydb");
+    when(mockClient.getTables(any(GetTablesRequest.class)))
+        .thenReturn(GetTablesResponse.builder().tableList(List.of()).build());
+
+    ArgumentCaptor<DeleteDatabaseRequest> captor =
+        ArgumentCaptor.forClass(DeleteDatabaseRequest.class);
+
+    ops.dropSchema(ident, false);
+
+    verify(mockClient).deleteDatabase(captor.capture());
+    assertEquals("123456789012", captor.getValue().catalogId());
+  }
+
   // -------------------------------------------------------------------------
   // listTables
   // -------------------------------------------------------------------------
@@ -368,10 +619,8 @@ class TestGlueCatalogTable {
   void testDropTable() {
     NameIdentifier ident = NameIdentifier.of("metalake", "catalog", "mydb", 
"t");
 
-    boolean result = ops.dropTable(ident);
-
+    assertTrue(ops.dropTable(ident));
     verify(mockClient).deleteTable(any(DeleteTableRequest.class));
-    assertTrue(result);
   }
 
   @Test
diff --git 
a/catalogs/catalog-glue/src/test/java/org/apache/gravitino/catalog/glue/TestGlueCatalogSchema.java
 
b/catalogs/catalog-glue/src/test/java/org/apache/gravitino/catalog/glue/TestGlueCatalogSchema.java
deleted file mode 100644
index dfe715484d..0000000000
--- 
a/catalogs/catalog-glue/src/test/java/org/apache/gravitino/catalog/glue/TestGlueCatalogSchema.java
+++ /dev/null
@@ -1,314 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.gravitino.catalog.glue;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertThrows;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import java.time.Instant;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import org.apache.gravitino.NameIdentifier;
-import org.apache.gravitino.Namespace;
-import org.apache.gravitino.SchemaChange;
-import org.apache.gravitino.exceptions.NoSuchSchemaException;
-import org.apache.gravitino.exceptions.NonEmptySchemaException;
-import org.apache.gravitino.exceptions.SchemaAlreadyExistsException;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.mockito.ArgumentCaptor;
-import software.amazon.awssdk.services.glue.GlueClient;
-import software.amazon.awssdk.services.glue.model.AlreadyExistsException;
-import software.amazon.awssdk.services.glue.model.CreateDatabaseRequest;
-import software.amazon.awssdk.services.glue.model.Database;
-import software.amazon.awssdk.services.glue.model.DeleteDatabaseRequest;
-import software.amazon.awssdk.services.glue.model.EntityNotFoundException;
-import software.amazon.awssdk.services.glue.model.GetDatabaseRequest;
-import software.amazon.awssdk.services.glue.model.GetDatabaseResponse;
-import software.amazon.awssdk.services.glue.model.GetDatabasesRequest;
-import software.amazon.awssdk.services.glue.model.GetDatabasesResponse;
-import software.amazon.awssdk.services.glue.model.GetTablesRequest;
-import software.amazon.awssdk.services.glue.model.GetTablesResponse;
-import software.amazon.awssdk.services.glue.model.Table;
-import software.amazon.awssdk.services.glue.model.UpdateDatabaseRequest;
-import software.amazon.awssdk.services.glue.model.UpdateDatabaseResponse;
-
-class TestGlueCatalogSchema {
-
-  private GlueCatalogOperations ops;
-  private GlueClient mockClient;
-
-  @BeforeEach
-  void setup() {
-    mockClient = mock(GlueClient.class);
-    ops = new GlueCatalogOperations();
-    ops.glueClient = mockClient;
-    // catalogId is null by default (caller's AWS account)
-  }
-
-  // -------------------------------------------------------------------------
-  // listSchemas
-  // -------------------------------------------------------------------------
-
-  @Test
-  void testListSchemas() {
-    Namespace ns = Namespace.of("metalake", "catalog");
-    Database db1 = Database.builder().name("db1").build();
-    Database db2 = Database.builder().name("db2").build();
-    Database db3 = Database.builder().name("db3").build();
-    Database db4 = Database.builder().name("db4").build();
-
-    when(mockClient.getDatabases(any(GetDatabasesRequest.class)))
-        .thenReturn(
-            GetDatabasesResponse.builder().databaseList(db1, 
db2).nextToken("token1").build())
-        .thenReturn(GetDatabasesResponse.builder().databaseList(db3, 
db4).nextToken(null).build());
-
-    NameIdentifier[] result = ops.listSchemas(ns);
-
-    assertEquals(4, result.length);
-    assertEquals("db1", result[0].name());
-    assertEquals("db4", result[3].name());
-  }
-
-  @Test
-  void testListSchemasReturnsEmptyArray() {
-    Namespace ns = Namespace.of("metalake", "catalog");
-    when(mockClient.getDatabases(any(GetDatabasesRequest.class)))
-        .thenReturn(
-            GetDatabasesResponse.builder()
-                .databaseList(Collections.emptyList())
-                .nextToken(null)
-                .build());
-
-    NameIdentifier[] result = ops.listSchemas(ns);
-
-    assertEquals(0, result.length);
-  }
-
-  // -------------------------------------------------------------------------
-  // createSchema
-  // -------------------------------------------------------------------------
-
-  @Test
-  void testCreateSchema() {
-    NameIdentifier ident = NameIdentifier.of("metalake", "catalog", "mydb");
-    Map<String, String> props = Map.of("k", "v");
-
-    GlueSchema schema = ops.createSchema(ident, "my comment", props);
-
-    verify(mockClient).createDatabase(any(CreateDatabaseRequest.class));
-    assertEquals("mydb", schema.name());
-    assertEquals("my comment", schema.comment());
-    assertEquals(props, schema.properties());
-  }
-
-  @Test
-  void testCreateSchemaAlreadyExists() {
-    NameIdentifier ident = NameIdentifier.of("metalake", "catalog", "mydb");
-    when(mockClient.createDatabase(any(CreateDatabaseRequest.class)))
-        .thenThrow(AlreadyExistsException.builder().message("exists").build());
-
-    assertThrows(
-        SchemaAlreadyExistsException.class,
-        () -> ops.createSchema(ident, null, Collections.emptyMap()));
-  }
-
-  // -------------------------------------------------------------------------
-  // loadSchema
-  // -------------------------------------------------------------------------
-
-  @Test
-  void testLoadSchema() {
-    NameIdentifier ident = NameIdentifier.of("metalake", "catalog", "mydb");
-    Database db =
-        Database.builder()
-            .name("mydb")
-            .description("desc")
-            .parameters(Map.of("k", "v"))
-            .createTime(Instant.now())
-            .build();
-    when(mockClient.getDatabase(any(GetDatabaseRequest.class)))
-        .thenReturn(GetDatabaseResponse.builder().database(db).build());
-
-    GlueSchema schema = ops.loadSchema(ident);
-
-    assertEquals("mydb", schema.name());
-    assertEquals("desc", schema.comment());
-    assertEquals(Map.of("k", "v"), schema.properties());
-  }
-
-  @Test
-  void testLoadSchemaNotFound() {
-    NameIdentifier ident = NameIdentifier.of("metalake", "catalog", "missing");
-    when(mockClient.getDatabase(any(GetDatabaseRequest.class)))
-        .thenThrow(EntityNotFoundException.builder().message("not 
found").build());
-
-    assertThrows(NoSuchSchemaException.class, () -> ops.loadSchema(ident));
-  }
-
-  // -------------------------------------------------------------------------
-  // alterSchema
-  // -------------------------------------------------------------------------
-
-  @Test
-  void testAlterSchemaSetProperty() {
-    NameIdentifier ident = NameIdentifier.of("metalake", "catalog", "mydb");
-    Database db =
-        Database.builder()
-            .name("mydb")
-            .parameters(Map.of("existing", "val"))
-            .createTime(Instant.now())
-            .build();
-    when(mockClient.getDatabase(any(GetDatabaseRequest.class)))
-        .thenReturn(GetDatabaseResponse.builder().database(db).build());
-    when(mockClient.updateDatabase(any(UpdateDatabaseRequest.class)))
-        .thenReturn(UpdateDatabaseResponse.builder().build());
-
-    ArgumentCaptor<UpdateDatabaseRequest> captor =
-        ArgumentCaptor.forClass(UpdateDatabaseRequest.class);
-
-    GlueSchema result = ops.alterSchema(ident, 
SchemaChange.setProperty("newKey", "newVal"));
-
-    verify(mockClient).updateDatabase(captor.capture());
-    Map<String, String> sentParams = 
captor.getValue().databaseInput().parameters();
-    assertEquals("val", sentParams.get("existing"));
-    assertEquals("newVal", sentParams.get("newKey"));
-    assertEquals("newVal", result.properties().get("newKey"));
-  }
-
-  @Test
-  void testAlterSchemaRemoveProperty() {
-    NameIdentifier ident = NameIdentifier.of("metalake", "catalog", "mydb");
-    Database db =
-        Database.builder()
-            .name("mydb")
-            .parameters(Map.of("toRemove", "v"))
-            .createTime(Instant.now())
-            .build();
-    when(mockClient.getDatabase(any(GetDatabaseRequest.class)))
-        .thenReturn(GetDatabaseResponse.builder().database(db).build());
-    when(mockClient.updateDatabase(any(UpdateDatabaseRequest.class)))
-        .thenReturn(UpdateDatabaseResponse.builder().build());
-
-    ArgumentCaptor<UpdateDatabaseRequest> captor =
-        ArgumentCaptor.forClass(UpdateDatabaseRequest.class);
-
-    ops.alterSchema(ident, SchemaChange.removeProperty("toRemove"));
-
-    verify(mockClient).updateDatabase(captor.capture());
-    
assertFalse(captor.getValue().databaseInput().parameters().containsKey("toRemove"));
-  }
-
-  @Test
-  void testAlterSchemaUnsupportedChange() {
-    NameIdentifier ident = NameIdentifier.of("metalake", "catalog", "mydb");
-    Database db =
-        
Database.builder().name("mydb").parameters(Map.of()).createTime(Instant.now()).build();
-    when(mockClient.getDatabase(any(GetDatabaseRequest.class)))
-        .thenReturn(GetDatabaseResponse.builder().database(db).build());
-
-    SchemaChange unsupported = mock(SchemaChange.class);
-
-    assertThrows(IllegalArgumentException.class, () -> ops.alterSchema(ident, 
unsupported));
-  }
-
-  @Test
-  void testAlterSchemaNotFound() {
-    NameIdentifier ident = NameIdentifier.of("metalake", "catalog", "missing");
-    when(mockClient.getDatabase(any(GetDatabaseRequest.class)))
-        .thenThrow(EntityNotFoundException.builder().message("not 
found").build());
-
-    assertThrows(
-        NoSuchSchemaException.class,
-        () -> ops.alterSchema(ident, SchemaChange.setProperty("k", "v")));
-  }
-
-  // -------------------------------------------------------------------------
-  // dropSchema
-  // -------------------------------------------------------------------------
-
-  @Test
-  void testDropSchema() {
-    NameIdentifier ident = NameIdentifier.of("metalake", "catalog", "mydb");
-    when(mockClient.getTables(any(GetTablesRequest.class)))
-        .thenReturn(GetTablesResponse.builder().tableList(List.of()).build());
-
-    boolean dropped = ops.dropSchema(ident, false);
-
-    verify(mockClient).deleteDatabase(any(DeleteDatabaseRequest.class));
-    assertTrue(dropped);
-  }
-
-  @Test
-  void testDropSchemaNonEmpty() {
-    NameIdentifier ident = NameIdentifier.of("metalake", "catalog", "mydb");
-    Table t = Table.builder().name("t1").build();
-    when(mockClient.getTables(any(GetTablesRequest.class)))
-        .thenReturn(GetTablesResponse.builder().tableList(t).build());
-
-    assertThrows(NonEmptySchemaException.class, () -> ops.dropSchema(ident, 
false));
-    verify(mockClient, 
never()).deleteDatabase(any(DeleteDatabaseRequest.class));
-  }
-
-  @Test
-  void testDropSchemaCascadeTrue() {
-    NameIdentifier ident = NameIdentifier.of("metalake", "catalog", "mydb");
-
-    boolean dropped = ops.dropSchema(ident, true);
-
-    verify(mockClient, never()).getTables(any(GetTablesRequest.class));
-    verify(mockClient).deleteDatabase(any(DeleteDatabaseRequest.class));
-    assertTrue(dropped);
-  }
-
-  @Test
-  void testDropSchemaNotFound() {
-    NameIdentifier ident = NameIdentifier.of("metalake", "catalog", "missing");
-    when(mockClient.deleteDatabase(any(DeleteDatabaseRequest.class)))
-        .thenThrow(EntityNotFoundException.builder().message("not 
found").build());
-
-    boolean dropped = ops.dropSchema(ident, true);
-
-    assertFalse(dropped);
-  }
-
-  @Test
-  void testDropSchemaWithCatalogId() {
-    ops.catalogId = "123456789012";
-    NameIdentifier ident = NameIdentifier.of("metalake", "catalog", "mydb");
-    when(mockClient.getTables(any(GetTablesRequest.class)))
-        .thenReturn(GetTablesResponse.builder().tableList(List.of()).build());
-
-    ArgumentCaptor<DeleteDatabaseRequest> captor =
-        ArgumentCaptor.forClass(DeleteDatabaseRequest.class);
-
-    ops.dropSchema(ident, false);
-
-    verify(mockClient).deleteDatabase(captor.capture());
-    assertEquals("123456789012", captor.getValue().catalogId());
-  }
-}

Reply via email to