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

zhangliang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new 6ae7b539d6e Add comprehensive test coverage for 
PostgreSQLStatisticsAppender  (#37017)
6ae7b539d6e is described below

commit 6ae7b539d6e63cd7caf1640b3d335398faa212dc
Author: Liang Zhang <[email protected]>
AuthorDate: Thu Nov 6 01:04:41 2025 +0800

    Add comprehensive test coverage for PostgreSQLStatisticsAppender  (#37017)
    
    * Add more test cases on PostgreSQLStatisticsAppender
    
    * Add comprehensive test coverage for PostgreSQLStatisticsAppender
    
    - Add assertAppendWithSchemaNotExists() test to cover when 
database.containsSchema() returns false
    - Add assertAppendWithTableNotExists() test to cover when 
tableNames.contains() returns false
    - Include corresponding mock helper methods for test scenarios
    - Achieve 100% branch coverage for lines 49 and 58
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    Co-Authored-By: Claude <[email protected]>
    
    * Add more test cases on PostgreSQLStatisticsAppender
    
    ---------
    
    Co-authored-by: Claude <[email protected]>
---
 .../dialect/PostgreSQLStatisticsAppender.java      |  2 +-
 .../dialect/PostgreSQLStatisticsAppenderTest.java  | 52 ++++++++++++++++++++--
 2 files changed, 50 insertions(+), 4 deletions(-)

diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/builder/dialect/PostgreSQLStatisticsAppender.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/builder/dialect/PostgreSQLStatisticsAppender.java
index 258dee64bc0..ed5ce1836cd 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/builder/dialect/PostgreSQLStatisticsAppender.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/builder/dialect/PostgreSQLStatisticsAppender.java
@@ -46,7 +46,7 @@ public final class PostgreSQLStatisticsAppender implements 
DialectStatisticsAppe
     public void append(final DatabaseStatistics databaseStatistics, final 
ShardingSphereDatabase database) {
         for (Entry<String, Collection<String>> entry : 
INIT_DATA_SCHEMA_TABLES.entrySet()) {
             SchemaStatistics schemaStatistics = new SchemaStatistics();
-            if (null != database.getSchema(entry.getKey())) {
+            if (database.containsSchema(entry.getKey())) {
                 initTables(database.getSchema(entry.getKey()), 
entry.getValue(), schemaStatistics);
                 databaseStatistics.putSchemaStatistics(entry.getKey(), 
schemaStatistics);
             }
diff --git 
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/statistics/builder/dialect/PostgreSQLStatisticsAppenderTest.java
 
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/statistics/builder/dialect/PostgreSQLStatisticsAppenderTest.java
index 79dd4d9c41b..a9b1d5986d5 100644
--- 
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/statistics/builder/dialect/PostgreSQLStatisticsAppenderTest.java
+++ 
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/statistics/builder/dialect/PostgreSQLStatisticsAppenderTest.java
@@ -17,15 +17,21 @@
 
 package org.apache.shardingsphere.infra.metadata.statistics.builder.dialect;
 
+import 
org.apache.shardingsphere.database.connector.core.spi.DatabaseTypedSPILoader;
+import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
 import org.apache.shardingsphere.infra.metadata.statistics.DatabaseStatistics;
+import 
org.apache.shardingsphere.infra.metadata.statistics.builder.DialectStatisticsAppender;
 import 
org.apache.shardingsphere.infra.metadata.statistics.builder.ShardingSphereDefaultStatisticsBuilder;
+import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import org.junit.jupiter.api.Test;
 
+import java.util.Arrays;
 import java.util.Collections;
 
+import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
@@ -33,20 +39,23 @@ import static org.mockito.Mockito.when;
 
 class PostgreSQLStatisticsAppenderTest {
     
+    private final DialectStatisticsAppender statisticsAppender = 
DatabaseTypedSPILoader.getService(DialectStatisticsAppender.class, 
TypedSPILoader.getService(DatabaseType.class, "PostgreSQL"));
+    
     @Test
     void assertAppend() {
         ShardingSphereDatabase database = mockDatabase();
         DatabaseStatistics databaseStatistics = new 
ShardingSphereDefaultStatisticsBuilder().build(database);
-        new PostgreSQLStatisticsAppender().append(databaseStatistics, 
database);
+        statisticsAppender.append(databaseStatistics, database);
         assertTrue(databaseStatistics.containsSchemaStatistics("pg_catalog"));
         
assertTrue(databaseStatistics.getSchemaStatistics("pg_catalog").containsTableStatistics("pg_class"));
     }
     
     private ShardingSphereDatabase mockDatabase() {
         ShardingSphereDatabase result = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
-        when(result.getName()).thenReturn("logic_db");
+        when(result.getName()).thenReturn("foo_db");
         ShardingSphereSchema schema = mockSchema();
-        when(result.getAllSchemas()).thenReturn(Collections.singleton(schema));
+        when(result.getAllSchemas()).thenReturn(Arrays.asList(schema, 
mock(ShardingSphereSchema.class)));
+        when(result.containsSchema("pg_catalog")).thenReturn(true);
         when(result.getSchema("pg_catalog")).thenReturn(schema);
         return result;
     }
@@ -59,4 +68,41 @@ class PostgreSQLStatisticsAppenderTest {
         when(result.getAllTables()).thenReturn(Collections.singleton(table));
         return result;
     }
+    
+    @Test
+    void assertAppendWithSchemaNotExists() {
+        ShardingSphereDatabase database = mock(ShardingSphereDatabase.class);
+        when(database.getName()).thenReturn("foo_db");
+        DatabaseStatistics databaseStatistics = new 
ShardingSphereDefaultStatisticsBuilder().build(database);
+        statisticsAppender.append(databaseStatistics, database);
+        assertFalse(databaseStatistics.containsSchemaStatistics("pg_catalog"));
+    }
+    
+    @Test
+    void assertAppendWithTableNotExists() {
+        ShardingSphereDatabase database = mockDatabaseWithUnmatchedTables();
+        DatabaseStatistics databaseStatistics = new 
ShardingSphereDefaultStatisticsBuilder().build(database);
+        statisticsAppender.append(databaseStatistics, database);
+        assertTrue(databaseStatistics.containsSchemaStatistics("pg_catalog"));
+        
assertFalse(databaseStatistics.getSchemaStatistics("pg_catalog").containsTableStatistics("pg_class"));
+    }
+    
+    private ShardingSphereDatabase mockDatabaseWithUnmatchedTables() {
+        ShardingSphereDatabase result = mock(ShardingSphereDatabase.class);
+        when(result.getName()).thenReturn("foo_db");
+        ShardingSphereSchema schema = mockSchemaWithUnmatchedTables();
+        when(result.getAllSchemas()).thenReturn(Collections.singleton(schema));
+        when(result.containsSchema("pg_catalog")).thenReturn(true);
+        when(result.getSchema("pg_catalog")).thenReturn(schema);
+        return result;
+    }
+    
+    private ShardingSphereSchema mockSchemaWithUnmatchedTables() {
+        ShardingSphereSchema result = mock(ShardingSphereSchema.class);
+        when(result.getName()).thenReturn("pg_catalog");
+        ShardingSphereTable table = mock(ShardingSphereTable.class);
+        when(table.getName()).thenReturn("foo_tbl");
+        when(result.getAllTables()).thenReturn(Collections.singleton(table));
+        return result;
+    }
 }

Reply via email to