diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/DatasourceStructureSolutionCEImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/DatasourceStructureSolutionCEImpl.java index 9ca09a3ff3..e680a0b1d4 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/DatasourceStructureSolutionCEImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/DatasourceStructureSolutionCEImpl.java @@ -80,7 +80,9 @@ public class DatasourceStructureSolutionCEImpl implements DatasourceStructureSol boolean ignoreCache) { if (Boolean.FALSE.equals(datasourceStorage.getIsValid())) { - return Mono.empty(); + return analyticsService.sendObjectEvent(AnalyticsEvents.DS_SCHEMA_FETCH_EVENT_FAILED, + datasourceStorage, getAnalyticsPropertiesForTestEventStatus(datasourceStorage, false)) + .then(Mono.just(new DatasourceStructure())); } Mono configurationStructureMono = datasourceStructureService diff --git a/app/server/appsmith-server/src/test/java/com/appsmith/server/solutions/DatasourceStructureSolutionTest.java b/app/server/appsmith-server/src/test/java/com/appsmith/server/solutions/DatasourceStructureSolutionTest.java index 74100a27e3..482e71b7eb 100644 --- a/app/server/appsmith-server/src/test/java/com/appsmith/server/solutions/DatasourceStructureSolutionTest.java +++ b/app/server/appsmith-server/src/test/java/com/appsmith/server/solutions/DatasourceStructureSolutionTest.java @@ -4,6 +4,7 @@ package com.appsmith.server.solutions; import com.appsmith.external.models.DBAuth; import com.appsmith.external.models.Datasource; import com.appsmith.external.models.DatasourceConfiguration; +import com.appsmith.external.models.DatasourceStorage; import com.appsmith.external.models.DatasourceStorageDTO; import com.appsmith.external.models.DatasourceStorageStructure; import com.appsmith.external.models.DatasourceStructure; @@ -38,6 +39,7 @@ import org.springframework.util.StringUtils; import reactor.core.publisher.Mono; import reactor.test.StepVerifier; +import java.util.HashSet; import java.util.List; import static com.appsmith.external.models.DatasourceStructure.TableType.TABLE; @@ -403,4 +405,30 @@ public class DatasourceStructureSolutionTest { }); } + + @Test + @WithUserDetails(value = "api_user") + public void verifyEmptyDatasourceStructureObjectIfDatasourceIsInvalid() { + DatasourceStorage datasourceStorage = new DatasourceStorage(); + datasourceStorage.setDatasourceId(datasourceId); + datasourceStorage.setEnvironmentId(defaultEnvironmentId); + datasourceStorage.setInvalids(new HashSet<>()); + datasourceStorage.getInvalids().add("random invalid"); + + doReturn(Mono.just(datasourceStorage)) + .when(datasourceStorageService).findByDatasourceAndEnvironmentId(any(), any()); + + Mono datasourceStructureMono = + datasourceStructureSolution.getStructure(datasourceId, Boolean.FALSE, defaultEnvironmentId); + + StepVerifier + .create(datasourceStructureMono) + .assertNext(datasourceStructure -> { + assertThat(datasourceStructure.getTables()).isNull(); + assertThat(datasourceStructure.getError()).isNull(); + }) + .verifyComplete(); + + } + }