Skip to content

Commit 8c2d103

Browse files
MetaurFylmTM
authored andcommitted
Catching neo4j related exceptions while executing explain query in ins… (#21)
* Catching neo4j related exeptions while executing explain query in inspection * Removed explicit data source setup
1 parent 0d52b3c commit 8c2d103

File tree

4 files changed

+48
-20
lines changed

4 files changed

+48
-20
lines changed

testing/integration-neo4j/src/test/java/com/neueda/jetbrains/plugin/graphdb/test/integration/neo4j/tests/cypher/inspection/CypherExplainWarningInspectionTest.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,4 +52,9 @@ public void testDataSourceFile_UserCreatedDSLikeFile() {
5252
addFileAndCheck(GraphConstants.BOUND_DATA_SOURCE_PREFIX + "ds-uuid-with-23-symbols.cypher",
5353
"MATCH (a:Turbo)-->() RETURN *;");
5454
}
55+
56+
public void testDataSourceFile_DBIsUnavailable() {
57+
//no highlight and no exception
58+
addUnavailableDataSourceFileAndCheck("MATCH (a:Turbo)-->() RETURN *;");
59+
}
5560
}

testing/integration-neo4j/src/test/java/com/neueda/jetbrains/plugin/graphdb/test/integration/neo4j/tests/cypher/util/BaseInspectionTest.java

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,13 @@
66
import com.neueda.jetbrains.plugin.graphdb.jetbrains.util.NameUtil;
77
import com.neueda.jetbrains.plugin.graphdb.test.integration.neo4j.util.base.BaseIntegrationTest;
88

9-
import java.util.Optional;
109
import java.util.Set;
1110

1211
public abstract class BaseInspectionTest extends BaseIntegrationTest {
13-
private String dsApiUUID;
1412

1513
@Override
1614
public void setUp() throws Exception {
1715
super.setUp();
18-
this.dsApiUUID = dataSource().neo4j31().getUUID();
1916
myFixture.enableInspections(provideInspectionClasses());
2017
}
2118

@@ -27,11 +24,12 @@ protected void addFileAndCheck(String filePath, String fileContent) {
2724
}
2825

2926
protected void addDataSourceFileAndCheck(String fileContent) {
30-
String fileName = Optional.of(dsApiUUID)
31-
.flatMap(uuid -> component().dataSources().getDataSourceContainer().findDataSource(uuid))
32-
.map(NameUtil::createDataSourceFileName)
33-
.orElseThrow(IllegalStateException::new);
27+
String fileName = NameUtil.createDataSourceFileName(dataSource().neo4j31());
28+
addFileAndCheck(fileName, fileContent);
29+
}
3430

31+
protected void addUnavailableDataSourceFileAndCheck(String fileContent) {
32+
String fileName = NameUtil.createDataSourceFileName(dataSource().unavailable());
3533
addFileAndCheck(fileName, fileContent);
3634
}
3735

testing/integration-neo4j/src/test/java/com/neueda/jetbrains/plugin/graphdb/test/integration/neo4j/util/base/BaseIntegrationTest.java

Lines changed: 36 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package com.neueda.jetbrains.plugin.graphdb.test.integration.neo4j.util.base;
22

3-
import java.util.*;
4-
53
import com.intellij.openapi.components.ServiceManager;
64
import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase;
75
import com.neueda.jetbrains.plugin.graphdb.database.neo4j.bolt.Neo4jBoltConfiguration;
@@ -14,10 +12,16 @@
1412
import com.neueda.jetbrains.plugin.graphdb.test.integration.neo4j.util.server.Neo4j30ServerLoader;
1513
import com.neueda.jetbrains.plugin.graphdb.test.integration.neo4j.util.server.Neo4j31ServerLoader;
1614

15+
import java.util.ArrayList;
16+
import java.util.HashMap;
17+
import java.util.List;
18+
import java.util.Map;
19+
1720
public abstract class BaseIntegrationTest extends LightCodeInsightFixtureTestCase {
1821

1922
private static final String NEO4J30 = "neo4j30";
2023
private static final String NEO4J31 = "neo4j31";
24+
private static final String UNAVAILABLE_DS = "unavailable";
2125

2226
private Components components;
2327
private DataSources dataSources;
@@ -48,21 +52,25 @@ public DataSources dataSource() {
4852
return dataSources;
4953
}
5054

51-
private DataSourceApi createDataSource(String name, Neo4jServer neo4jServer) {
55+
private DataSourceApi createDataSource(String name, String host, String port, String user, String password) {
5256
Map<String, String> configuration = new HashMap<>();
53-
configuration.put(Neo4jBoltConfiguration.HOST, neo4jServer.getBoltHost());
54-
configuration.put(Neo4jBoltConfiguration.PORT, neo4jServer.getBoltPort());
55-
configuration.put(Neo4jBoltConfiguration.USER, null);
56-
configuration.put(Neo4jBoltConfiguration.PASSWORD, null);
57+
configuration.put(Neo4jBoltConfiguration.HOST, host);
58+
configuration.put(Neo4jBoltConfiguration.PORT, port);
59+
configuration.put(Neo4jBoltConfiguration.USER, user);
60+
configuration.put(Neo4jBoltConfiguration.PASSWORD, password);
5761

5862
return component().dataSources().getDataSourceContainer().createDataSource(
59-
null,
60-
DataSourceType.NEO4J_BOLT,
61-
name,
62-
configuration
63+
null,
64+
DataSourceType.NEO4J_BOLT,
65+
name,
66+
configuration
6367
);
6468
}
6569

70+
private DataSourceApi createDataSource(String name, Neo4jServer neo4jServer) {
71+
return createDataSource(name, neo4jServer.getBoltHost(), neo4jServer.getBoltPort(), null, null);
72+
}
73+
6674
public final class Services {
6775
public CypherMetadataProviderService cypherMetadataProvider() {
6876
return ServiceManager.getService(getProject(), CypherMetadataProviderService.class);
@@ -86,6 +94,7 @@ public DataSourcesComponentMetadata dataSourcesMetadata() {
8694
public final class DataSources {
8795
private DataSourceApi neo4j30DataSource;
8896
private DataSourceApi neo4j31DataSource;
97+
private DataSourceApi unavalableDataSource;
8998

9099
public DataSourceApi neo4j30() {
91100
if (neo4j30DataSource == null) {
@@ -116,5 +125,21 @@ public DataSourceApi neo4j31() {
116125
}
117126
return neo4j31DataSource;
118127
}
128+
129+
public DataSourceApi unavailable() {
130+
if (unavalableDataSource == null) {
131+
unavalableDataSource = component().dataSources()
132+
.getDataSourceContainer()
133+
.getDataSource(UNAVAILABLE_DS)
134+
.orElseGet(() -> {
135+
DataSourceApi dataSource = createDataSource(UNAVAILABLE_DS, "unexisting.domain.dev",
136+
"7474", null, null);
137+
component().dataSources().getDataSourceContainer().addDataSource(dataSource);
138+
component().dataSources().refreshAllMetadata();
139+
return dataSource;
140+
});
141+
}
142+
return unavalableDataSource;
143+
}
119144
}
120145
}

ui/jetbrains/src/main/java/com/neueda/jetbrains/plugin/graphdb/jetbrains/inspection/CypherExplainWarningInspection.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
import com.neueda.jetbrains.plugin.graphdb.language.cypher.psi.CypherTypes;
1515
import com.neueda.jetbrains.plugin.graphdb.platform.GraphConstants;
1616
import org.jetbrains.annotations.NotNull;
17-
import org.neo4j.driver.v1.exceptions.ClientException;
17+
import org.neo4j.driver.v1.exceptions.Neo4jException;
1818

1919
import java.util.Objects;
2020
import java.util.Optional;
@@ -78,7 +78,7 @@ private void checkStatement(@NotNull PsiElement statement, @NotNull ProblemsHold
7878
private GraphQueryResult executeExplainQuery(GraphDatabaseApi api, String query) {
7979
try {
8080
return api.execute("EXPLAIN " + query);
81-
} catch (ClientException ex) {
81+
} catch (Neo4jException ex) {
8282
return null;
8383
}
8484
}

0 commit comments

Comments
 (0)