diff --git a/jnosql-tinkerpop/pom.xml b/jnosql-tinkerpop/pom.xml index d9128c0aa..fac780ba8 100644 --- a/jnosql-tinkerpop/pom.xml +++ b/jnosql-tinkerpop/pom.xml @@ -64,11 +64,48 @@ neo4j-tinkerpop-api-impl ${neo4j.connector.version} test + + + org.slf4j + slf4j-nop + + + + + org.apache.tinkerpop + tinkergraph-gremlin + ${tinkerpop.version} + test + + + com.arangodb + arangodb-tinkerpop-provider + 3.2.1 + test + + + org.slf4j + slf4j-simple + 1.7.25 + test + + org.apache.maven.plugins + maven-surefire-plugin + + + + + + + org.antlr antlr4-maven-plugin diff --git a/jnosql-tinkerpop/src/main/java/org/eclipse/jnosql/databases/tinkerpop/communication/CommunicationEntityConverter.java b/jnosql-tinkerpop/src/main/java/org/eclipse/jnosql/databases/tinkerpop/communication/CommunicationEntityConverter.java index 0396463db..d5e22b3c3 100644 --- a/jnosql-tinkerpop/src/main/java/org/eclipse/jnosql/databases/tinkerpop/communication/CommunicationEntityConverter.java +++ b/jnosql-tinkerpop/src/main/java/org/eclipse/jnosql/databases/tinkerpop/communication/CommunicationEntityConverter.java @@ -19,15 +19,16 @@ import java.util.function.Function; -public enum CommunicationEntityConverter implements Function{ - INSTANCE; +import static org.eclipse.jnosql.databases.tinkerpop.communication.TinkerpopGraphDatabaseManager.ID; +public enum CommunicationEntityConverter implements Function { + INSTANCE; @Override public CommunicationEntity apply(Vertex vertex) { var entity = CommunicationEntity.of(vertex.label()); vertex.properties().forEachRemaining(p -> entity.add(p.key(), p.value())); - entity.add(DefaultTinkerpopGraphDatabaseManager.ID_PROPERTY, vertex.id()); + entity.add(ID, vertex.id()); return entity; } } diff --git a/jnosql-tinkerpop/src/main/java/org/eclipse/jnosql/databases/tinkerpop/communication/DefaultTinkerpopGraphDatabaseManager.java b/jnosql-tinkerpop/src/main/java/org/eclipse/jnosql/databases/tinkerpop/communication/DefaultTinkerpopGraphDatabaseManager.java index 9a309e664..ceb6a828c 100644 --- a/jnosql-tinkerpop/src/main/java/org/eclipse/jnosql/databases/tinkerpop/communication/DefaultTinkerpopGraphDatabaseManager.java +++ b/jnosql-tinkerpop/src/main/java/org/eclipse/jnosql/databases/tinkerpop/communication/DefaultTinkerpopGraphDatabaseManager.java @@ -19,12 +19,14 @@ import org.apache.tinkerpop.gremlin.structure.Direction; import org.apache.tinkerpop.gremlin.structure.Edge; import org.apache.tinkerpop.gremlin.structure.Graph; +import org.apache.tinkerpop.gremlin.structure.T; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.eclipse.jnosql.communication.CommunicationException; import org.eclipse.jnosql.communication.ValueUtil; import org.eclipse.jnosql.communication.graph.CommunicationEdge; import org.eclipse.jnosql.communication.semistructured.CommunicationEntity; import org.eclipse.jnosql.communication.semistructured.DeleteQuery; +import org.eclipse.jnosql.communication.semistructured.Element; import org.eclipse.jnosql.communication.semistructured.SelectQuery; import java.time.Duration; @@ -52,7 +54,6 @@ */ public class DefaultTinkerpopGraphDatabaseManager implements TinkerpopGraphDatabaseManager { - public static final String ID_PROPERTY = "_id"; private final Graph graph; DefaultTinkerpopGraphDatabaseManager(Graph graph) { @@ -71,13 +72,8 @@ public String name() { @Override public CommunicationEntity insert(CommunicationEntity entity) { - Objects.requireNonNull(entity, "entity is required"); - Vertex vertex = graph.addVertex(entity.name()); - entity.elements().forEach(e -> vertex.property(e.name(), ValueUtil.convert(e.value()))); - entity.add(ID_PROPERTY, vertex.id()); - vertex.property(ID_PROPERTY, vertex.id()); - GraphTransactionUtil.transaction(graph); + addVertex(entity); return entity; } @@ -101,14 +97,16 @@ public Iterable insert(Iterable iterab @Override public CommunicationEntity update(CommunicationEntity entity) { Objects.requireNonNull(entity, "entity is required"); - entity.find(ID_PROPERTY).ifPresent(id -> { - Iterator vertices = graph.vertices(id.get()); - if(!vertices.hasNext()) { - throw new EmptyResultException("The entity does not exist with the id: " + id); - } - Vertex vertex = vertices.next(); - entity.elements().forEach(e -> vertex.property(e.name(), ValueUtil.convert(e.value()))); - }); + Object id = entity.find(ID).map(Element::get) + .orElseThrow(() -> new IllegalArgumentException("Entity must have an ID")); + Iterator vertices = graph.vertices(id); + if (!vertices.hasNext()) { + throw new EmptyResultException("The entity does not exist with the id: " + id); + } + Vertex vertex = vertices.next(); + entity.elements().stream() + .filter(it -> !ID.equals(it.name())) + .forEach(e -> vertex.property(e.name(), ValueUtil.convert(e.value()))); GraphTransactionUtil.transaction(graph); return entity; } @@ -198,11 +196,11 @@ public void remove(CommunicationEntity source, String label, CommunicationEntity Objects.requireNonNull(target, "target is required"); Objects.requireNonNull(label, "label is required"); - Vertex sourceVertex = findVertexById(source.find(ID_PROPERTY) + Vertex sourceVertex = findVertexById(source.find(ID) .orElseThrow(() -> new CommunicationException("Source entity must have an ID")).get()) .orElseThrow(() -> new EmptyResultException("Source entity not found")); - Vertex targetVertex = findVertexById(target.find(ID_PROPERTY) + Vertex targetVertex = findVertexById(target.find(ID) .orElseThrow(() -> new CommunicationException("Target entity must have an ID")).get()) .orElseThrow(() -> new EmptyResultException("Target entity not found")); @@ -241,10 +239,10 @@ public Optional findEdgeById(K id) { var edge = traversal.next(); var source = CommunicationEntity.of(edge.outVertex().label()); - source.add(ID_PROPERTY, edge.outVertex().id()); + source.add(ID, edge.outVertex().id()); var target = CommunicationEntity.of(edge.inVertex().label()); - target.add(ID_PROPERTY, edge.inVertex().id()); + target.add(ID, edge.inVertex().id()); Map properties = new HashMap<>(); edge.properties().forEachRemaining(p -> properties.put(p.key(), p.value())); @@ -252,16 +250,23 @@ public Optional findEdgeById(K id) { return Optional.of(new TinkerpopCommunicationEdge(id, source, target, edge.label(), properties)); } + private Vertex addVertex(CommunicationEntity entity) { + Object[] args = Stream.concat( + Stream.of(T.label, entity.name()), + entity.elements().stream().flatMap(it -> ID.equals(it.name()) ? + Stream.of(T.id, it.get()) : + Stream.of(it.name(), ValueUtil.convert(it.value()))) + ).toArray(); + Vertex vertex = graph.addVertex(args); + entity.add(ID, vertex.id()); + GraphTransactionUtil.transaction(graph); + return vertex; + } + private Vertex findOrCreateVertex(CommunicationEntity entity) { - return entity.find(ID_PROPERTY) + return entity.find(ID) .flatMap(id -> findVertexById(id.get())) - .orElseGet(() -> { - var newVertex = graph.addVertex(entity.name()); - entity.elements().forEach(e -> newVertex.property(e.name(), ValueUtil.convert(e.value()))); - newVertex.property(ID_PROPERTY, newVertex.id()); - entity.add(ID_PROPERTY, newVertex.id()); - return newVertex; - }); + .orElseGet(() -> addVertex(entity)); } private Optional findVertexById(Object id) { diff --git a/jnosql-tinkerpop/src/main/java/org/eclipse/jnosql/databases/tinkerpop/communication/TinkerpopGraphDatabaseManager.java b/jnosql-tinkerpop/src/main/java/org/eclipse/jnosql/databases/tinkerpop/communication/TinkerpopGraphDatabaseManager.java index ddaf5d175..5007ee681 100644 --- a/jnosql-tinkerpop/src/main/java/org/eclipse/jnosql/databases/tinkerpop/communication/TinkerpopGraphDatabaseManager.java +++ b/jnosql-tinkerpop/src/main/java/org/eclipse/jnosql/databases/tinkerpop/communication/TinkerpopGraphDatabaseManager.java @@ -15,6 +15,7 @@ package org.eclipse.jnosql.databases.tinkerpop.communication; import org.apache.tinkerpop.gremlin.structure.Graph; +import org.apache.tinkerpop.gremlin.structure.T; import org.eclipse.jnosql.communication.graph.GraphDatabaseManager; import org.eclipse.jnosql.communication.semistructured.DatabaseManager; @@ -35,6 +36,8 @@ */ public interface TinkerpopGraphDatabaseManager extends GraphDatabaseManager, Supplier { + String ID = T.id.getAccessor(); + /** * Creates a new instance of DefaultGraphDatabaseManager with the specified TinkerPop Graph. * diff --git a/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/cdi/ArangoDeployment.java b/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/cdi/ArangoDeployment.java new file mode 100644 index 000000000..4b7affb65 --- /dev/null +++ b/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/cdi/ArangoDeployment.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2022 Contributors to the Eclipse Foundation + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * and Apache License v2.0 which accompanies this distribution. + * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html + * and the Apache License v2.0 is available at http://www.opensource.org/licenses/apache2.0.php. + * + * You may elect to redistribute this code under either of these licenses. + * + * Contributors: + * + * Otavio Santana + */ +package org.eclipse.jnosql.databases.tinkerpop.cdi; + +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.containers.wait.strategy.Wait; + +enum ArangoDeployment { + INSTANCE; + + private final GenericContainer arangodb = + new GenericContainer<>("arangodb/arangodb:latest") + .withExposedPorts(8529) + .withEnv("ARANGO_NO_AUTH", "1") + .waitingFor(Wait.forHttp("/") + .forStatusCode(200)); + + { + arangodb.start(); + } + + public GenericContainer getContainer() { + return arangodb; + } +} diff --git a/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/cdi/TestGraphSupplier.java b/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/cdi/TestGraphSupplier.java new file mode 100644 index 000000000..598b1f81b --- /dev/null +++ b/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/cdi/TestGraphSupplier.java @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2022 Contributors to the Eclipse Foundation + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * and Apache License v2.0 which accompanies this distribution. + * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html + * and the Apache License v2.0 is available at http://www.opensource.org/licenses/apache2.0.php. + * + * You may elect to redistribute this code under either of these licenses. + * + * Contributors: + * + * Otavio Santana + * Michele Rastelli + */ +package org.eclipse.jnosql.databases.tinkerpop.cdi; + +import com.arangodb.tinkerpop.gremlin.structure.ArangoDBGraph; +import com.arangodb.tinkerpop.gremlin.structure.ArangoDBGraphConfig; +import org.apache.commons.configuration2.BaseConfiguration; +import org.apache.commons.configuration2.Configuration; +import org.apache.tinkerpop.gremlin.neo4j.structure.Neo4jGraph; +import org.apache.tinkerpop.gremlin.structure.Graph; +import org.apache.tinkerpop.gremlin.structure.util.GraphFactory; +import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph; +import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerTransactionGraph; +import org.testcontainers.containers.GenericContainer; + +import java.io.File; +import java.util.List; +import java.util.function.Supplier; +import java.util.logging.Logger; + +import static java.lang.System.currentTimeMillis; + +public enum TestGraphSupplier implements Supplier { + + NEO4J { + private static final Logger LOGGER = Logger.getLogger(TestGraphSupplier.class.getName()); + + @Override + public Graph get() { + String directory = new File("").getAbsolutePath() + "/target/neo4j-graph/" + currentTimeMillis(); + LOGGER.info("Starting Neo4j at directory: " + directory); + return Neo4jGraph.open(directory); + } + }, + + ARANGODB { + @Override + public Graph get() { + GenericContainer container = ArangoDeployment.INSTANCE.getContainer(); + Configuration configuration = new BaseConfiguration(); + configuration.addProperty("gremlin.graph", ArangoDBGraph.class.getName()); + configuration.addProperty("gremlin.arangodb.conf.graph.enableDataDefinition", true); + configuration.addProperty("gremlin.arangodb.conf.graph.type", ArangoDBGraphConfig.GraphType.COMPLEX.name()); + configuration.addProperty("gremlin.arangodb.conf.graph.edgeDefinitions", List.of( + "reads:[Human]->[Magazine]", + "knows:[Person]->[Person]", + "eats:[Creature]->[Creature]", + "loves:[Human]->[Human]", + "likes:[Human]->[Creature]", + "friend:[Person]->[Person]" + )); + configuration.addProperty("gremlin.arangodb.conf.driver.hosts", container.getHost() + ":" + container.getFirstMappedPort()); + return GraphFactory.open(configuration); + } + }, + + TINKER_GRAPH { + @Override + public Graph get() { + Configuration configuration = new BaseConfiguration(); + configuration.setProperty(TinkerGraph.GREMLIN_TINKERGRAPH_VERTEX_ID_MANAGER, TinkerGraph.DefaultIdManager.STRING.name()); + configuration.setProperty(TinkerGraph.GREMLIN_TINKERGRAPH_EDGE_ID_MANAGER, TinkerGraph.DefaultIdManager.STRING.name()); + configuration.setProperty(TinkerGraph.GREMLIN_TINKERGRAPH_VERTEX_PROPERTY_ID_MANAGER, TinkerGraph.DefaultIdManager.STRING.name()); + return TinkerTransactionGraph.open(configuration); + } + } + +} diff --git a/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/cdi/arangodb/ArangoDBGraphProducer.java b/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/cdi/arangodb/ArangoDBGraphProducer.java new file mode 100644 index 000000000..6919f1a34 --- /dev/null +++ b/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/cdi/arangodb/ArangoDBGraphProducer.java @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2022 Contributors to the Eclipse Foundation + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * and Apache License v2.0 which accompanies this distribution. + * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html + * and the Apache License v2.0 is available at http://www.opensource.org/licenses/apache2.0.php. + * + * You may elect to redistribute this code under either of these licenses. + * + * Contributors: + * + * Otavio Santana + * Michele Rastelli + */ +package org.eclipse.jnosql.databases.tinkerpop.cdi.arangodb; + +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Priority; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.enterprise.inject.Alternative; +import jakarta.enterprise.inject.Disposes; +import jakarta.enterprise.inject.Produces; +import jakarta.interceptor.Interceptor; +import org.apache.tinkerpop.gremlin.structure.Graph; +import org.eclipse.jnosql.databases.tinkerpop.cdi.TestGraphSupplier; + +import java.util.function.Supplier; +import java.util.logging.Logger; + +@ApplicationScoped +@Alternative +@Priority(Interceptor.Priority.APPLICATION) +public class ArangoDBGraphProducer implements Supplier { + + private static final Logger LOGGER = Logger.getLogger(ArangoDBGraphProducer.class.getName()); + + private Graph graph; + + @PostConstruct + public void init() { + graph = TestGraphSupplier.ARANGODB.get(); + LOGGER.info("Graph database created"); + } + + @Produces + @ApplicationScoped + @Override + public Graph get() { + return graph; + } + + public void dispose(@Disposes Graph graph) throws Exception { + LOGGER.info("Graph database closing"); + graph.close(); + LOGGER.info("Graph Database closed"); + } + +} diff --git a/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/GraphProducer.java b/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/cdi/mock/MockGraphProducer.java similarity index 50% rename from jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/GraphProducer.java rename to jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/cdi/mock/MockGraphProducer.java index e93101c3f..97099c958 100644 --- a/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/GraphProducer.java +++ b/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/cdi/mock/MockGraphProducer.java @@ -12,32 +12,21 @@ * * Otavio Santana */ -package org.eclipse.jnosql.databases.tinkerpop.mapping; +package org.eclipse.jnosql.databases.tinkerpop.cdi.mock; -import jakarta.annotation.PostConstruct; import jakarta.annotation.Priority; import jakarta.enterprise.context.ApplicationScoped; import jakarta.enterprise.inject.Alternative; -import jakarta.enterprise.inject.Disposes; import jakarta.enterprise.inject.Produces; import jakarta.interceptor.Interceptor; -import org.apache.tinkerpop.gremlin.neo4j.structure.Neo4jGraph; import org.apache.tinkerpop.gremlin.structure.Graph; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.eclipse.jnosql.mapping.Database; import org.eclipse.jnosql.mapping.DatabaseType; import org.mockito.Mockito; -import java.io.File; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; import java.util.Collections; -import java.util.Comparator; -import java.util.function.Supplier; -import java.util.logging.Logger; -import static java.lang.System.currentTimeMillis; import static java.util.Collections.singleton; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -45,40 +34,17 @@ @ApplicationScoped @Alternative @Priority(Interceptor.Priority.APPLICATION) -public class GraphProducer implements Supplier { - - private static final Logger LOGGER = Logger.getLogger(GraphProducer.class.getName()); - - private Graph graph; - - private String directory; - - @PostConstruct - public void init() { - this.directory = new File("").getAbsolutePath() + "/target/jnosql-graph/" + currentTimeMillis() + "/"; - LOGGER.info("Starting Graph database at directory: " + directory); - this.graph = Neo4jGraph.open(directory); - LOGGER.info("Graph database created"); - } - - @Produces - @ApplicationScoped - @Override - public Graph get() { - return graph; - } - +public class MockGraphProducer { @Produces @ApplicationScoped @Database(value = DatabaseType.GRAPH, provider = "graphRepositoryMock") public Graph getGraphMock() { - Graph graphMock = mock(Graph.class); Vertex vertex = mock(Vertex.class); when(vertex.label()).thenReturn("Person"); - when(vertex.id()).thenReturn(10L); - when(graphMock.vertices(10L)).thenReturn(Collections.emptyIterator()); + when(vertex.id()).thenReturn("10"); + when(graphMock.vertices("10")).thenReturn(Collections.emptyIterator()); when(vertex.keys()).thenReturn(singleton("name")); when(vertex.value("name")).thenReturn("nameMock"); when(graphMock.addVertex(Mockito.anyString())).thenReturn(vertex); @@ -86,18 +52,4 @@ public Graph getGraphMock() { return graphMock; } - public void dispose(@Disposes Graph graph) throws Exception { - LOGGER.info("Graph database closing"); - graph.close(); - final Path path = Paths.get(directory); - if (Files.exists(path)) { - LOGGER.info("Removing directory graph database: " + directory); - Files.walk(path) - .sorted(Comparator.reverseOrder()) - .map(Path::toFile) - .forEach(File::delete); - LOGGER.info("Graph directory exists?: " + Files.exists(path)); - } - LOGGER.info("Graph Database closed"); - } } diff --git a/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/cdi/neo4j/Neo4jGraphProducer.java b/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/cdi/neo4j/Neo4jGraphProducer.java new file mode 100644 index 000000000..19904faf1 --- /dev/null +++ b/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/cdi/neo4j/Neo4jGraphProducer.java @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2022 Contributors to the Eclipse Foundation + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * and Apache License v2.0 which accompanies this distribution. + * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html + * and the Apache License v2.0 is available at http://www.opensource.org/licenses/apache2.0.php. + * + * You may elect to redistribute this code under either of these licenses. + * + * Contributors: + * + * Otavio Santana + * Michele Rastelli + */ +package org.eclipse.jnosql.databases.tinkerpop.cdi.neo4j; + +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Priority; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.enterprise.inject.Alternative; +import jakarta.enterprise.inject.Disposes; +import jakarta.enterprise.inject.Produces; +import jakarta.interceptor.Interceptor; +import org.apache.tinkerpop.gremlin.structure.Graph; +import org.eclipse.jnosql.databases.tinkerpop.cdi.TestGraphSupplier; + +import java.util.function.Supplier; +import java.util.logging.Logger; + +@ApplicationScoped +@Alternative +@Priority(Interceptor.Priority.APPLICATION) +public class Neo4jGraphProducer implements Supplier { + + private static final Logger LOGGER = Logger.getLogger(Neo4jGraphProducer.class.getName()); + + private Graph graph; + + @PostConstruct + public void init() { + graph = TestGraphSupplier.NEO4J.get(); + LOGGER.info("Graph database created"); + } + + @Produces + @ApplicationScoped + @Override + public Graph get() { + return graph; + } + + public void dispose(@Disposes Graph graph) throws Exception { + LOGGER.info("Graph database closing"); + graph.close(); + LOGGER.info("Graph Database closed"); + } + +} diff --git a/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/communication/GraphSupplier.java b/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/cdi/tinkergraph/TinkerGraphProducer.java similarity index 50% rename from jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/communication/GraphSupplier.java rename to jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/cdi/tinkergraph/TinkerGraphProducer.java index dcf55743b..7a135ae3c 100644 --- a/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/communication/GraphSupplier.java +++ b/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/cdi/tinkergraph/TinkerGraphProducer.java @@ -11,35 +11,36 @@ * Contributors: * * Otavio Santana + * Michele Rastelli */ -package org.eclipse.jnosql.databases.tinkerpop.communication; - -import org.apache.tinkerpop.gremlin.neo4j.structure.Neo4jGraph; +package org.eclipse.jnosql.databases.tinkerpop.cdi.tinkergraph; + +import jakarta.annotation.Priority; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.enterprise.inject.Alternative; +import jakarta.enterprise.inject.Disposes; +import jakarta.enterprise.inject.Produces; +import jakarta.interceptor.Interceptor; import org.apache.tinkerpop.gremlin.structure.Graph; +import org.eclipse.jnosql.databases.tinkerpop.cdi.TestGraphSupplier; -import java.io.File; import java.util.function.Supplier; -import java.util.logging.Logger; - -import static java.lang.System.currentTimeMillis; - -public enum GraphSupplier implements Supplier { - INSTANCE; - private static final Logger LOGGER = Logger.getLogger(GraphSupplier.class.getName()); - private final String directory; - - private final Graph graph; - - { - this.directory = new File("").getAbsolutePath() + "/target/jnosql-communication-graph/" + currentTimeMillis() + "/"; - graph = Neo4jGraph.open(directory); - } +@ApplicationScoped +@Alternative +@Priority(Interceptor.Priority.APPLICATION) +public class TinkerGraphProducer implements Supplier { + @Produces + @ApplicationScoped @Override public Graph get() { - LOGGER.info("Starting Graph database at directory: " + directory); - return graph; + return TestGraphSupplier.TINKER_GRAPH.get(); + } + + public void dispose(@Disposes Graph graph) throws Exception { + graph.close(); } + } diff --git a/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/communication/DefaultTinkerpopGraphDatabaseManagerTest.java b/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/communication/DefaultTinkerpopGraphDatabaseManagerTest.java index 0e62930c7..d91b42362 100644 --- a/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/communication/DefaultTinkerpopGraphDatabaseManagerTest.java +++ b/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/communication/DefaultTinkerpopGraphDatabaseManagerTest.java @@ -25,7 +25,9 @@ import org.eclipse.jnosql.communication.semistructured.Element; import org.eclipse.jnosql.communication.semistructured.Elements; import org.eclipse.jnosql.communication.semistructured.SelectQuery; +import org.eclipse.jnosql.databases.tinkerpop.cdi.TestGraphSupplier; import org.eclipse.jnosql.mapping.semistructured.MappingQuery; +import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -42,24 +44,47 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.eclipse.jnosql.communication.semistructured.DeleteQuery.delete; import static org.eclipse.jnosql.communication.semistructured.SelectQuery.select; +import static org.eclipse.jnosql.databases.tinkerpop.communication.TinkerpopGraphDatabaseManager.ID; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; -class DefaultTinkerpopGraphDatabaseManagerTest { +abstract class DefaultTinkerpopGraphDatabaseManagerTest { - public static final String COLLECTION_NAME = "person"; + static class ArangoDBTest extends DefaultTinkerpopGraphDatabaseManagerTest { + @Override + Graph graph() { + return TestGraphSupplier.ARANGODB.get(); + } + } + + static class Neo4jTest extends DefaultTinkerpopGraphDatabaseManagerTest { + @Override + Graph graph() { + return TestGraphSupplier.NEO4J.get(); + } + } + + static class TinkerGraphTest extends DefaultTinkerpopGraphDatabaseManagerTest { + @Override + Graph graph() { + return TestGraphSupplier.TINKER_GRAPH.get(); + } + } + + static final String COLLECTION_NAME = "Person"; private TinkerpopGraphDatabaseManager entityManager; private final Faker faker = new Faker(); + abstract Graph graph(); + @BeforeEach - void setUp(){ - Graph graph = GraphSupplier.INSTANCE.get(); - this.entityManager = TinkerpopGraphDatabaseManager.of(graph); + void setUp() { + this.entityManager = TinkerpopGraphDatabaseManager.of(graph()); } @BeforeEach @@ -67,8 +92,13 @@ void beforeEach() { delete().from(COLLECTION_NAME).delete(entityManager); } + @AfterEach + void close() { + entityManager.close(); + } + @Test - void shouldInsertEntity(){ + void shouldInsertEntity() { String name = faker.name().fullName(); var age = faker.number().randomDigit(); var entity = CommunicationEntity.of("Person"); @@ -80,12 +110,12 @@ void shouldInsertEntity(){ SoftAssertions.assertSoftly(softly -> { softly.assertThat(communicationEntity.find("name", String.class)).get().isEqualTo(name); softly.assertThat(communicationEntity.find("age", int.class)).get().isEqualTo(age); - softly.assertThat(communicationEntity.find(DefaultTinkerpopGraphDatabaseManager.ID_PROPERTY)).isPresent(); + softly.assertThat(communicationEntity.find(ID)).isPresent(); }); } @Test - void shouldInsertEntities(){ + void shouldInsertEntities() { String name = faker.name().fullName(); var age = faker.number().randomDigit(); var entity = CommunicationEntity.of("Person"); @@ -106,11 +136,11 @@ void shouldInsertEntities(){ softly.assertThat(communicationEntities).hasSize(2); softly.assertThat(communicationEntities.get(0).find("name", String.class)).get().isEqualTo(name); softly.assertThat(communicationEntities.get(0).find("age", int.class)).get().isEqualTo(age); - softly.assertThat(communicationEntities.get(0).find(DefaultTinkerpopGraphDatabaseManager.ID_PROPERTY)).isPresent(); + softly.assertThat(communicationEntities.get(0).find(ID)).isPresent(); softly.assertThat(communicationEntities.get(1).find("name", String.class)).get().isEqualTo(name2); softly.assertThat(communicationEntities.get(1).find("age", int.class)).get().isEqualTo(age2); - softly.assertThat(communicationEntities.get(1).find(DefaultTinkerpopGraphDatabaseManager.ID_PROPERTY)).isPresent(); + softly.assertThat(communicationEntities.get(1).find(ID)).isPresent(); }); } @@ -119,7 +149,7 @@ void shouldInsertEntities(){ void shouldInsert() { var entity = getEntity(); var documentEntity = entityManager.insert(entity); - assertTrue(documentEntity.elements().stream().map(Element::name).anyMatch(s -> s.equals("_id"))); + assertTrue(documentEntity.elements().stream().map(Element::name).anyMatch(s -> s.equals(ID))); } @Test @@ -142,11 +172,11 @@ void shouldUpdate() { void shouldRemoveEntity() { var documentEntity = entityManager.insert(getEntity()); - Optional id = documentEntity.find("_id"); + Optional id = documentEntity.find(ID); var query = select().from(COLLECTION_NAME) - .where("_id").eq(id.orElseThrow().get()) + .where(ID).eq(id.orElseThrow().get()) .build(); - var deleteQuery = delete().from(COLLECTION_NAME).where("_id") + var deleteQuery = delete().from(COLLECTION_NAME).where(ID) .eq(id.get().get()) .build(); @@ -157,10 +187,10 @@ void shouldRemoveEntity() { @Test void shouldFindDocument() { var entity = entityManager.insert(getEntity()); - Optional id = entity.find("_id"); + Optional id = entity.find(ID); var query = select().from(COLLECTION_NAME) - .where("_id").eq(id.orElseThrow().get()) + .where(ID).eq(id.orElseThrow().get()) .build(); var entities = entityManager.select(query).collect(Collectors.toList()); @@ -171,11 +201,12 @@ void shouldFindDocument() { @Test void shouldFindDocument2() { var entity = entityManager.insert(getEntity()); - Optional id = entity.find("_id"); + Optional id = entity.find(ID); var query = select().from(COLLECTION_NAME) .where("name").eq("Poliana") - .and("city").eq("Salvador").and("_id").eq(id.orElseThrow().get()) + .and("city").eq("Salvador") + .and(ID).eq(id.orElseThrow().get()) .build(); List entities = entityManager.select(query).collect(Collectors.toList()); @@ -186,11 +217,11 @@ void shouldFindDocument2() { @Test void shouldFindDocument3() { var entity = entityManager.insert(getEntity()); - Optional id = entity.find("_id"); + Optional id = entity.find(ID); var query = select().from(COLLECTION_NAME) .where("name").eq("Poliana") .or("city").eq("Salvador") - .and(id.orElseThrow().name()).eq(id.get().get()) + .and(ID).eq(id.orElseThrow().get()) .build(); List entities = entityManager.select(query).collect(Collectors.toList()); @@ -304,7 +335,6 @@ void shouldFindDocumentBetween() { }); - } @Test @@ -426,7 +456,7 @@ void shouldFindAllByFields() { assertEquals(3, entity.size()); SoftAssertions.assertSoftly(softly -> { softly.assertThat(entity.find("name")).isPresent(); - softly.assertThat(entity.find("_id")).isPresent(); + softly.assertThat(entity.find(ID)).isPresent(); softly.assertThat(entity.find("city")).isPresent(); }); } @@ -436,15 +466,15 @@ void shouldCreateEdge() { var person1 = entityManager.insert(getEntity()); var person2 = entityManager.insert(getEntity()); - String label = "FRIEND"; + String label = "friend"; Map properties = Map.of("since", 2023); var edge = entityManager.edge(person1, label, person2, properties); assertNotNull(edge); assertEquals(label, edge.label()); - assertEquals(person1.find("_id").orElseThrow().get(), edge.source().find("_id").orElseThrow().get()); - assertEquals(person2.find("_id").orElseThrow().get(), edge.target().find("_id").orElseThrow().get()); + assertEquals(person1.find(ID).orElseThrow().get(), edge.source().find(ID).orElseThrow().get()); + assertEquals(person2.find(ID).orElseThrow().get(), edge.target().find(ID).orElseThrow().get()); assertEquals(properties, edge.properties()); } @@ -453,9 +483,9 @@ void shouldRemoveEdge() { var person1 = entityManager.insert(getEntity()); var person2 = entityManager.insert(getEntity()); - CommunicationEdge communicationEdge = entityManager.edge(person1, "FRIEND", person2, Map.of()); + CommunicationEdge communicationEdge = entityManager.edge(person1, "friend", person2, Map.of()); - entityManager.remove(person1, "FRIEND", person2); + entityManager.remove(person1, "friend", person2); var edges = entityManager.findEdgeById(communicationEdge.id()); @@ -467,7 +497,7 @@ void shouldDeleteEdgeById() { var person1 = entityManager.insert(getEntity()); var person2 = entityManager.insert(getEntity()); - var edge = entityManager.edge(person1, "FRIEND", person2, Map.of()); + var edge = entityManager.edge(person1, "friend", person2, Map.of()); entityManager.deleteEdge(edge.id()); @@ -480,15 +510,15 @@ void shouldFindEdgeById() { var person1 = entityManager.insert(getEntity()); var person2 = entityManager.insert(getEntity()); - var edge = entityManager.edge(person1, "FRIEND", person2, Map.of("since", 2023)); + var edge = entityManager.edge(person1, "friend", person2, Map.of("since", 2023)); Optional foundEdge = entityManager.findEdgeById(edge.id()); assertTrue(foundEdge.isPresent()); assertEquals(edge.id(), foundEdge.get().id()); assertEquals(edge.label(), foundEdge.get().label()); - assertEquals(edge.source().find("_id").orElseThrow().get(), foundEdge.get().source().find("_id").orElseThrow().get()); - assertEquals(edge.target().find("_id").orElseThrow().get(), foundEdge.get().target().find("_id").orElseThrow().get()); + assertEquals(edge.source().find(ID).orElseThrow().get(), foundEdge.get().source().find(ID).orElseThrow().get()); + assertEquals(edge.target().find(ID).orElseThrow().get(), foundEdge.get().target().find(ID).orElseThrow().get()); } @Test diff --git a/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/AbstractTinkerpopTemplateTest.java b/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/AbstractTinkerpopTemplateTest.java index 295956616..bb6af7b8a 100644 --- a/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/AbstractTinkerpopTemplateTest.java +++ b/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/AbstractTinkerpopTemplateTest.java @@ -42,6 +42,7 @@ import static java.util.stream.Collectors.toList; import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.Assume.assumeTrue; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; @@ -119,7 +120,7 @@ void shouldMergeOnInsert() { @Test void shouldGetErrorWhenIdIsNullWhenUpdate() { - assertThrows(EmptyResultException.class, () -> { + assertThrows(IllegalArgumentException.class, () -> { Human human = Human.builder().withAge() .withName("Otavio").build(); getGraphTemplate().update(human); @@ -130,7 +131,7 @@ void shouldGetErrorWhenIdIsNullWhenUpdate() { void shouldGetErrorWhenEntityIsNotSavedYet() { assertThrows(EmptyResultException.class, () -> { Human human = Human.builder().withAge() - .withId(10L) + .withId("10") .withName("Otavio").build(); getGraphTemplate().update(human); @@ -212,7 +213,7 @@ void shouldFindAnEntity() { @Test void shouldNotFindAnEntity() { - Optional personFound = getGraphTemplate().find(0L); + Optional personFound = getGraphTemplate().find("0"); assertFalse(personFound.isPresent()); } @@ -275,12 +276,12 @@ void shouldReturnErrorWhenGetEdgesIdHasNullId() { @Test void shouldReturnErrorWhenGetEdgesIdHasNullDirection() { - assertThrows(NullPointerException.class, () -> getGraphTemplate().edgesById(10, null)); + assertThrows(NullPointerException.class, () -> getGraphTemplate().edgesById("10", null)); } @Test void shouldReturnEmptyWhenVertexDoesNotExist() { - Collection edges = getGraphTemplate().edgesById(10, Direction.BOTH); + Collection edges = getGraphTemplate().edgesById("10", Direction.BOTH); assertTrue(edges.isEmpty()); } @@ -349,7 +350,7 @@ void shouldReturnErrorWhenGetEdgesHasNullId() { @Test void shouldReturnErrorWhenGetEdgesHasNullId2() { - Human otavio = Human.builder().withId(0L).withAge().withName("Otavio").build(); + Human otavio = Human.builder().withId("0").withAge().withName("Otavio").build(); Collection edges = getGraphTemplate().edges(otavio, Direction.BOTH); assertThat(edges).isEmpty(); } @@ -365,7 +366,7 @@ void shouldReturnErrorWhenGetEdgesHasNullDirection() { @Test void shouldReturnEmptyWhenEntityDoesNotExist() { - Human otavio = Human.builder().withAge().withName("Otavio").withId(10L).build(); + Human otavio = Human.builder().withAge().withName("Otavio").withId("10").build(); Collection edges = getGraphTemplate().edges(otavio, Direction.BOTH); assertTrue(edges.isEmpty()); } @@ -399,6 +400,7 @@ void shouldReturnEdges() { @Test void shouldGetTransaction() { + assumeTrue("transactions not supported", getGraph().features().graph().supportsTransactions()); Transaction transaction = getGraphTemplate().transaction(); assertNotNull(transaction); } @@ -430,7 +432,7 @@ void shouldExecuteQueryWithParameter() { @Test void shouldReturnEmpty() { - Optional person = getGraphTemplate().gremlinSingleResult("g.V().hasLabel('Person')"); + Optional person = getGraphTemplate().gremlinSingleResult("g.V().hasLabel('person')"); assertFalse(person.isPresent()); } @@ -541,8 +543,7 @@ void shouldDeleteAll() { @Test void shouldReturnEmptyWhenFindByIdNotFound() { - - final Optional person = getGraphTemplate().find(Human.class, -2L); + final Optional person = getGraphTemplate().find(Human.class, "-2"); assertNotNull(person); assertFalse(person.isPresent()); } @@ -567,12 +568,12 @@ void shouldCreateEdgeByGraphAPI() { final Human poliana = getGraphTemplate().insert(Human.builder().withAge() .withName("Poliana").build()); - var edge = org.eclipse.jnosql.mapping.graph.Edge.source(otavio).label("LOVES").target(poliana).build(); + var edge = org.eclipse.jnosql.mapping.graph.Edge.source(otavio).label("loves").target(poliana).build(); var edgeEntity = getGraphTemplate().edge(edge); SoftAssertions.assertSoftly(softly -> { softly.assertThat(edgeEntity).isNotNull(); - softly.assertThat(edgeEntity.label()).isEqualTo("LOVES"); + softly.assertThat(edgeEntity.label()).isEqualTo("loves"); softly.assertThat(edgeEntity.source()).isEqualTo(otavio); softly.assertThat(edgeEntity.target()).isEqualTo(poliana); }); @@ -587,7 +588,7 @@ void shouldCreateEdgeByGraphAPIWithProperties() { .withName("Poliana").build()); var edge = org.eclipse.jnosql.mapping.graph.Edge.source(otavio) - .label("LOVES") + .label("loves") .target(poliana) .property("when", "2017") .property("where", "Brazil") @@ -596,7 +597,7 @@ void shouldCreateEdgeByGraphAPIWithProperties() { SoftAssertions.assertSoftly(softly -> { softly.assertThat(edgeEntity).isNotNull(); - softly.assertThat(edgeEntity.label()).isEqualTo("LOVES"); + softly.assertThat(edgeEntity.label()).isEqualTo("loves"); softly.assertThat(edgeEntity.source()).isEqualTo(otavio); softly.assertThat(edgeEntity.target()).isEqualTo(poliana); softly.assertThat(edgeEntity.properties()).hasSize(2); diff --git a/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/DefaultEdgeTraversalTest.java b/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/DefaultEdgeTraversalTest.java index 296829c1f..bdb8c8d02 100644 --- a/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/DefaultEdgeTraversalTest.java +++ b/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/DefaultEdgeTraversalTest.java @@ -18,6 +18,9 @@ import org.apache.tinkerpop.gremlin.process.traversal.P; import org.apache.tinkerpop.gremlin.structure.T; import org.assertj.core.api.SoftAssertions; +import org.eclipse.jnosql.databases.tinkerpop.cdi.arangodb.ArangoDBGraphProducer; +import org.eclipse.jnosql.databases.tinkerpop.cdi.neo4j.Neo4jGraphProducer; +import org.eclipse.jnosql.databases.tinkerpop.cdi.tinkergraph.TinkerGraphProducer; import org.eclipse.jnosql.databases.tinkerpop.mapping.entities.Creature; import org.eclipse.jnosql.databases.tinkerpop.mapping.entities.Human; import org.eclipse.jnosql.databases.tinkerpop.mapping.entities.Magazine; @@ -51,10 +54,21 @@ @EnableAutoWeld @AddPackages(value = {Converters.class, EntityConverter.class, TinkerpopTemplate.class}) -@AddPackages(GraphProducer.class) @AddPackages(Reflections.class) @AddExtensions({ReflectionEntityMetadataExtension.class, TinkerpopExtension.class}) -class DefaultEdgeTraversalTest extends AbstractTraversalTest { +abstract class DefaultEdgeTraversalTest extends AbstractTraversalTest { + + @AddPackages(ArangoDBGraphProducer.class) + static class ArangoDBTest extends DefaultEdgeTraversalTest { + } + + @AddPackages(Neo4jGraphProducer.class) + static class Neo4jTest extends DefaultEdgeTraversalTest { + } + + @AddPackages(TinkerGraphProducer.class) + static class TinkerGraphTest extends DefaultEdgeTraversalTest { + } @Test void shouldReturnErrorWhenEdgeIdIsNull() { @@ -489,7 +503,7 @@ void shouldReturnErrorWhenThereAreMoreThanOneInGetSingleResult() { @Test void shouldReturnOptionalEmptyWhenThereIsNotResultInSingleResult() { - Optional entity = tinkerpopTemplate.traversalEdge(-1L).singleResult(); + Optional entity = tinkerpopTemplate.traversalEdge("-1").singleResult(); assertFalse(entity.isPresent()); } diff --git a/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/DefaultGraphTraversalSourceTemplateTest.java b/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/DefaultGraphTraversalSourceTemplateTest.java index eb815435e..73d696b0e 100644 --- a/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/DefaultGraphTraversalSourceTemplateTest.java +++ b/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/DefaultGraphTraversalSourceTemplateTest.java @@ -16,6 +16,9 @@ import jakarta.inject.Inject; import org.apache.tinkerpop.gremlin.structure.Graph; +import org.eclipse.jnosql.databases.tinkerpop.cdi.arangodb.ArangoDBGraphProducer; +import org.eclipse.jnosql.databases.tinkerpop.cdi.neo4j.Neo4jGraphProducer; +import org.eclipse.jnosql.databases.tinkerpop.cdi.tinkergraph.TinkerGraphProducer; import org.eclipse.jnosql.databases.tinkerpop.mapping.spi.TinkerpopExtension; import org.eclipse.jnosql.mapping.core.Converters; import org.eclipse.jnosql.mapping.reflection.Reflections; @@ -27,9 +30,21 @@ @EnableAutoWeld @AddPackages(value = {Converters.class, EntityConverter.class, Transactional.class}) -@AddPackages({MagazineRepository.class, Reflections.class, GraphProducer.class}) +@AddPackages({MagazineRepository.class, Reflections.class}) @AddExtensions({ReflectionEntityMetadataExtension.class, TinkerpopExtension.class}) -class DefaultGraphTraversalSourceTemplateTest extends AbstractTinkerpopTemplateTest { +abstract class DefaultGraphTraversalSourceTemplateTest extends AbstractTinkerpopTemplateTest { + + @AddPackages(ArangoDBGraphProducer.class) + static class ArangoDBTest extends DefaultGraphTraversalSourceTemplateTest { + } + + @AddPackages(Neo4jGraphProducer.class) + static class Neo4jTest extends DefaultGraphTraversalSourceTemplateTest { + } + + @AddPackages(TinkerGraphProducer.class) + static class TinkerGraphTest extends DefaultGraphTraversalSourceTemplateTest { + } @Inject private TinkerpopTemplate graphTemplate; diff --git a/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/DefaultTinkerpopTemplateProducerTest.java b/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/DefaultTinkerpopTemplateProducerTest.java index 57f2cde58..27e38e602 100644 --- a/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/DefaultTinkerpopTemplateProducerTest.java +++ b/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/DefaultTinkerpopTemplateProducerTest.java @@ -16,6 +16,7 @@ import jakarta.inject.Inject; import org.apache.tinkerpop.gremlin.structure.Graph; +import org.eclipse.jnosql.databases.tinkerpop.cdi.mock.MockGraphProducer; import org.eclipse.jnosql.databases.tinkerpop.mapping.spi.TinkerpopExtension; import org.eclipse.jnosql.mapping.core.Converters; import org.eclipse.jnosql.mapping.reflection.Reflections; @@ -33,7 +34,7 @@ @EnableAutoWeld @AddPackages(value = {Converters.class, EntityConverter.class, TinkerpopTemplate.class}) -@AddPackages(GraphProducer.class) +@AddPackages(MockGraphProducer.class) @AddPackages(Reflections.class) @AddExtensions({ReflectionEntityMetadataExtension.class, TinkerpopExtension.class}) class DefaultGraphTemplateProducerTest { diff --git a/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/DefaultValueMapTraversalTest.java b/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/DefaultValueMapTraversalTest.java index cf24e051b..0aecc3610 100644 --- a/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/DefaultValueMapTraversalTest.java +++ b/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/DefaultValueMapTraversalTest.java @@ -15,6 +15,9 @@ package org.eclipse.jnosql.databases.tinkerpop.mapping; import jakarta.data.exceptions.NonUniqueResultException; +import org.eclipse.jnosql.databases.tinkerpop.cdi.arangodb.ArangoDBGraphProducer; +import org.eclipse.jnosql.databases.tinkerpop.cdi.neo4j.Neo4jGraphProducer; +import org.eclipse.jnosql.databases.tinkerpop.cdi.tinkergraph.TinkerGraphProducer; import org.eclipse.jnosql.databases.tinkerpop.mapping.entities.Human; import org.eclipse.jnosql.databases.tinkerpop.mapping.spi.TinkerpopExtension; import org.eclipse.jnosql.mapping.core.Converters; @@ -40,11 +43,21 @@ @EnableAutoWeld @AddPackages(value = {Converters.class, EntityConverter.class, TinkerpopTemplate.class}) -@AddPackages(GraphProducer.class) @AddPackages(Reflections.class) @AddExtensions({ReflectionEntityMetadataExtension.class, TinkerpopExtension.class}) -class DefaultValueMapTraversalTest extends AbstractTraversalTest { +abstract class DefaultValueMapTraversalTest extends AbstractTraversalTest { + @AddPackages(ArangoDBGraphProducer.class) + static class ArangoDBTest extends DefaultValueMapTraversalTest { + } + + @AddPackages(Neo4jGraphProducer.class) + static class Neo4jTest extends DefaultValueMapTraversalTest { + } + + @AddPackages(TinkerGraphProducer.class) + static class TinkerGraphTest extends DefaultValueMapTraversalTest { + } @Test void shouldCount() { diff --git a/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/DefaultVertexTraversalTest.java b/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/DefaultVertexTraversalTest.java index 11dfeea01..20c63c54d 100644 --- a/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/DefaultVertexTraversalTest.java +++ b/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/DefaultVertexTraversalTest.java @@ -17,6 +17,9 @@ import jakarta.data.exceptions.NonUniqueResultException; import org.apache.tinkerpop.gremlin.process.traversal.P; import org.apache.tinkerpop.gremlin.structure.T; +import org.eclipse.jnosql.databases.tinkerpop.cdi.arangodb.ArangoDBGraphProducer; +import org.eclipse.jnosql.databases.tinkerpop.cdi.neo4j.Neo4jGraphProducer; +import org.eclipse.jnosql.databases.tinkerpop.cdi.tinkergraph.TinkerGraphProducer; import org.eclipse.jnosql.databases.tinkerpop.mapping.entities.Creature; import org.eclipse.jnosql.databases.tinkerpop.mapping.entities.Human; import org.eclipse.jnosql.databases.tinkerpop.mapping.entities.Magazine; @@ -52,11 +55,21 @@ @EnableAutoWeld @AddPackages(value = {Converters.class, EntityConverter.class, TinkerpopTemplate.class}) -@AddPackages(GraphProducer.class) @AddPackages(Reflections.class) @AddExtensions({ReflectionEntityMetadataExtension.class, TinkerpopExtension.class}) -class DefaultVertexTraversalTest extends AbstractTraversalTest { +abstract class DefaultVertexTraversalTest extends AbstractTraversalTest { + @AddPackages(ArangoDBGraphProducer.class) + static class ArangoDBTest extends DefaultVertexTraversalTest { + } + + @AddPackages(Neo4jGraphProducer.class) + static class Neo4jTest extends DefaultVertexTraversalTest { + } + + @AddPackages(TinkerGraphProducer.class) + static class TinkerGraphTest extends DefaultVertexTraversalTest { + } @Test void shouldReturnErrorWhenVertexIdIsNull() { @@ -100,7 +113,7 @@ void shouldNext() { @Test void shouldEmptyNext() { - Optional next = tinkerpopTemplate.traversalVertex(-12).next(); + Optional next = tinkerpopTemplate.traversalVertex("-12").next(); assertFalse(next.isPresent()); } @@ -515,5 +528,4 @@ void shouldDedup() { assertEquals(3, people.size()); } - } diff --git a/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/EdgeEntityTest.java b/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/EdgeEntityTest.java index 67fcbb453..22ba6ad18 100644 --- a/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/EdgeEntityTest.java +++ b/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/EdgeEntityTest.java @@ -18,6 +18,9 @@ import jakarta.inject.Inject; import org.eclipse.jnosql.communication.Value; import org.eclipse.jnosql.communication.semistructured.Element; +import org.eclipse.jnosql.databases.tinkerpop.cdi.arangodb.ArangoDBGraphProducer; +import org.eclipse.jnosql.databases.tinkerpop.cdi.neo4j.Neo4jGraphProducer; +import org.eclipse.jnosql.databases.tinkerpop.cdi.tinkergraph.TinkerGraphProducer; import org.eclipse.jnosql.databases.tinkerpop.mapping.entities.Human; import org.eclipse.jnosql.databases.tinkerpop.mapping.entities.Magazine; import org.eclipse.jnosql.databases.tinkerpop.mapping.spi.TinkerpopExtension; @@ -43,11 +46,21 @@ @EnableAutoWeld @AddPackages(value = {Converters.class, EntityConverter.class, TinkerpopTemplate.class}) -@AddPackages(GraphProducer.class) @AddPackages(Reflections.class) @AddExtensions({ReflectionEntityMetadataExtension.class, TinkerpopExtension.class}) -class EdgeEntityTest { +abstract class EdgeEntityTest { + @AddPackages(ArangoDBGraphProducer.class) + static class ArangoDBTest extends EdgeEntityTest { + } + + @AddPackages(Neo4jGraphProducer.class) + static class Neo4jTest extends EdgeEntityTest { + } + + @AddPackages(TinkerGraphProducer.class) + static class TinkerGraphTest extends EdgeEntityTest { + } @Inject private TinkerpopTemplate tinkerpopTemplate; @@ -83,7 +96,7 @@ void shouldReturnErrorWhenLabelIsNull() { @Test void shouldReturnNullWhenInboundIdIsNull() { Assertions.assertThrows(EmptyResultException.class, () -> { - Human human = Human.builder().withId(-5).withName("Poliana").withAge().build(); + Human human = Human.builder().withId("-5").withName("Poliana").withAge().build(); Magazine magazine = tinkerpopTemplate.insert(Magazine.builder().withAge(2007).withName("The Shack").build()); tinkerpopTemplate.edge(human, "reads", magazine); }); @@ -102,7 +115,7 @@ void shouldReturnNullWhenOutboundIdIsNull() { @Test void shouldReturnEntityNotFoundWhenOutBoundDidNotFound() { Assertions.assertThrows( EmptyResultException.class, () -> { - Human human = Human.builder().withId(-10L).withName("Poliana").withAge().build(); + Human human = Human.builder().withId("-10").withName("Poliana").withAge().build(); Magazine magazine = tinkerpopTemplate.insert(Magazine.builder().withAge(2007).withName("The Shack").build()); tinkerpopTemplate.edge(human, "reads", magazine); }); @@ -112,7 +125,7 @@ void shouldReturnEntityNotFoundWhenOutBoundDidNotFound() { void shouldReturnEntityNotFoundWhenInBoundDidNotFound() { Assertions.assertThrows( EmptyResultException.class, () -> { Human human = tinkerpopTemplate.insert(Human.builder().withName("Poliana").withAge().build()); - Magazine magazine = Magazine.builder().withId(10L).withAge(2007).withName("The Shack").build(); + Magazine magazine = Magazine.builder().withId("10").withAge(2007).withName("The Shack").build(); tinkerpopTemplate.edge(human, "reads", magazine); }); } @@ -141,10 +154,10 @@ void shouldGetId() { assertEquals(magazine, edge.incoming()); assertTrue(edge.isEmpty()); assertNotNull(edge.id()); - final Long id = edge.id(Long.class); + final String id = edge.id(String.class); assertNotNull(id); - assertEquals(id, edge.id(Integer.class).longValue()); + assertEquals(id, edge.id(String.class)); } @@ -352,7 +365,7 @@ void shouldFindAnEdge() { @Test void shouldNotFindAnEdge() { - Optional edgeEntity = tinkerpopTemplate.edge(-12L); + Optional edgeEntity = tinkerpopTemplate.edge("-12"); assertFalse(edgeEntity.isPresent()); } diff --git a/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/GraphTemplateTest.java b/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/GraphTemplateTest.java index 6d71a979c..91a22e0fd 100644 --- a/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/GraphTemplateTest.java +++ b/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/GraphTemplateTest.java @@ -16,6 +16,9 @@ import jakarta.inject.Inject; import jakarta.nosql.Template; +import org.eclipse.jnosql.databases.tinkerpop.cdi.arangodb.ArangoDBGraphProducer; +import org.eclipse.jnosql.databases.tinkerpop.cdi.neo4j.Neo4jGraphProducer; +import org.eclipse.jnosql.databases.tinkerpop.cdi.tinkergraph.TinkerGraphProducer; import org.eclipse.jnosql.databases.tinkerpop.mapping.spi.TinkerpopExtension; import org.eclipse.jnosql.mapping.Database; import org.eclipse.jnosql.mapping.core.Converters; @@ -34,10 +37,21 @@ @EnableAutoWeld @AddPackages(value = {Converters.class, EntityConverter.class, TinkerpopTemplate.class, GraphTemplate.class}) -@AddPackages(GraphProducer.class) @AddPackages(Reflections.class) @AddExtensions({ReflectionEntityMetadataExtension.class, TinkerpopExtension.class, GraphExtension.class}) -class GraphTemplateTest { +abstract class GraphTemplateTest { + + @AddPackages(ArangoDBGraphProducer.class) + static class ArangoDBTest extends GraphTemplateTest { + } + + @AddPackages(Neo4jGraphProducer.class) + static class Neo4jTest extends GraphTemplateTest { + } + + @AddPackages(TinkerGraphProducer.class) + static class TinkerGraphTest extends GraphTemplateTest { + } @Inject private Template template; diff --git a/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/MagazineTemplateTest.java b/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/MagazineTemplateTest.java index bc5bbcf22..7ca01fb44 100644 --- a/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/MagazineTemplateTest.java +++ b/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/MagazineTemplateTest.java @@ -18,6 +18,9 @@ import org.apache.tinkerpop.gremlin.structure.Graph; import org.apache.tinkerpop.gremlin.structure.Transaction; import org.apache.tinkerpop.gremlin.structure.Transaction.Status; +import org.eclipse.jnosql.databases.tinkerpop.cdi.arangodb.ArangoDBGraphProducer; +import org.eclipse.jnosql.databases.tinkerpop.cdi.neo4j.Neo4jGraphProducer; +import org.eclipse.jnosql.databases.tinkerpop.cdi.tinkergraph.TinkerGraphProducer; import org.eclipse.jnosql.databases.tinkerpop.mapping.entities.Magazine; import org.eclipse.jnosql.databases.tinkerpop.mapping.entities.MagazineTemplate; import org.eclipse.jnosql.databases.tinkerpop.mapping.spi.TinkerpopExtension; @@ -34,16 +37,28 @@ import static org.apache.tinkerpop.gremlin.structure.Transaction.Status.COMMIT; import static org.apache.tinkerpop.gremlin.structure.Transaction.Status.ROLLBACK; +import static org.junit.Assume.assumeTrue; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNull; @EnableAutoWeld @AddPackages(value = {Converters.class, EntityConverter.class, TinkerpopTemplate.class}) -@AddPackages(GraphProducer.class) @AddPackages(Reflections.class) @AddExtensions({ReflectionEntityMetadataExtension.class, TinkerpopExtension.class}) -class MagazineTemplateTest { +abstract class MagazineTemplateTest { + + @AddPackages(ArangoDBGraphProducer.class) + static class ArangoDBTest extends MagazineTemplateTest { + } + + @AddPackages(Neo4jGraphProducer.class) + static class Neo4jTest extends MagazineTemplateTest { + } + + @AddPackages(TinkerGraphProducer.class) + static class TinkerGraphTest extends MagazineTemplateTest { + } @Inject private MagazineTemplate template; @@ -53,6 +68,8 @@ class MagazineTemplateTest { @Test void shouldSaveWithTransaction() { + assumeTrue("transactions not supported", graph.features().graph().supportsTransactions()); + AtomicReference status = new AtomicReference<>(); Magazine magazine = Magazine.builder().withName("The Book").build(); @@ -65,6 +82,8 @@ void shouldSaveWithTransaction() { @Test void shouldSaveWithRollback() { + assumeTrue("transactions not supported", graph.features().graph().supportsTransactions()); + AtomicReference status = new AtomicReference<>(); Magazine magazine = Magazine.builder().withName("The Book").build(); @@ -83,6 +102,8 @@ void shouldSaveWithRollback() { @Test void shouldUseAutomaticNormalTransaction() { + assumeTrue("transactions not supported", graph.features().graph().supportsTransactions()); + AtomicReference status = new AtomicReference<>(); Magazine magazine = Magazine.builder().withName("The Book").build(); diff --git a/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/PopulationTest.java b/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/PopulationTest.java index c2d51d81b..3200cbb0a 100644 --- a/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/PopulationTest.java +++ b/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/PopulationTest.java @@ -16,8 +16,10 @@ import jakarta.inject.Inject; -import org.apache.tinkerpop.gremlin.process.traversal.Order; import org.assertj.core.api.SoftAssertions; +import org.eclipse.jnosql.databases.tinkerpop.cdi.arangodb.ArangoDBGraphProducer; +import org.eclipse.jnosql.databases.tinkerpop.cdi.neo4j.Neo4jGraphProducer; +import org.eclipse.jnosql.databases.tinkerpop.cdi.tinkergraph.TinkerGraphProducer; import org.eclipse.jnosql.databases.tinkerpop.mapping.entities.Human; import org.eclipse.jnosql.databases.tinkerpop.mapping.spi.TinkerpopExtension; import org.eclipse.jnosql.mapping.core.Converters; @@ -36,10 +38,21 @@ @EnableAutoWeld @AddPackages(value = {Converters.class, EntityConverter.class, TinkerpopTemplate.class, GraphTemplate.class}) -@AddPackages(GraphProducer.class) @AddPackages(Reflections.class) @AddExtensions({ReflectionEntityMetadataExtension.class, TinkerpopExtension.class, GraphExtension.class}) -public class PopulationTest { +abstract class PopulationTest { + + @AddPackages(ArangoDBGraphProducer.class) + static class ArangoDBTest extends PopulationTest { + } + + @AddPackages(Neo4jGraphProducer.class) + static class Neo4jTest extends PopulationTest { + } + + @AddPackages(TinkerGraphProducer.class) + static class TinkerGraphTest extends PopulationTest { + } @Inject private Population population; diff --git a/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/TinkerpopTemplateProducerTest.java b/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/TinkerpopTemplateProducerTest.java index d14ad4c3b..1eb3040b4 100644 --- a/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/TinkerpopTemplateProducerTest.java +++ b/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/TinkerpopTemplateProducerTest.java @@ -16,6 +16,7 @@ import jakarta.inject.Inject; import org.apache.tinkerpop.gremlin.structure.Graph; +import org.eclipse.jnosql.databases.tinkerpop.cdi.mock.MockGraphProducer; import org.eclipse.jnosql.databases.tinkerpop.mapping.spi.TinkerpopExtension; import org.eclipse.jnosql.mapping.core.Converters; import org.eclipse.jnosql.mapping.reflection.Reflections; @@ -32,7 +33,7 @@ @EnableAutoWeld @AddPackages(value = {Converters.class, EntityConverter.class, TinkerpopTemplate.class}) -@AddPackages(GraphProducer.class) +@AddPackages(MockGraphProducer.class) @AddPackages(Reflections.class) @AddExtensions({ReflectionEntityMetadataExtension.class, TinkerpopExtension.class}) class GraphTemplateProducerTest { diff --git a/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/TinkerpopTemplateTest.java b/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/TinkerpopTemplateTest.java index 2f6885b10..cae8863e4 100644 --- a/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/TinkerpopTemplateTest.java +++ b/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/TinkerpopTemplateTest.java @@ -16,6 +16,7 @@ import jakarta.inject.Inject; import jakarta.nosql.Template; +import org.eclipse.jnosql.databases.tinkerpop.cdi.mock.MockGraphProducer; import org.eclipse.jnosql.databases.tinkerpop.mapping.spi.TinkerpopExtension; import org.eclipse.jnosql.mapping.Database; import org.eclipse.jnosql.mapping.core.Converters; @@ -34,7 +35,7 @@ @EnableAutoWeld @AddPackages(value = {Converters.class, EntityConverter.class, TinkerpopTemplate.class, GraphTemplate.class}) -@AddPackages(GraphProducer.class) +@AddPackages(MockGraphProducer.class) @AddPackages(Reflections.class) @AddExtensions({ReflectionEntityMetadataExtension.class, TinkerpopExtension.class, GraphExtension.class}) class TinkerpopTemplateTest { diff --git a/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/configuration/GraphSupplierTest.java b/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/configuration/GraphSupplierTest.java index 0973315d8..f5b35ef82 100644 --- a/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/configuration/GraphSupplierTest.java +++ b/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/configuration/GraphSupplierTest.java @@ -17,7 +17,6 @@ import jakarta.inject.Inject; import org.apache.tinkerpop.gremlin.structure.Graph; import org.eclipse.jnosql.databases.tinkerpop.communication.DatabaseConfigurationAdapter; -import org.eclipse.jnosql.databases.tinkerpop.mapping.GraphProducer; import org.eclipse.jnosql.databases.tinkerpop.mapping.TinkerpopTemplate; import org.eclipse.jnosql.databases.tinkerpop.mapping.spi.TinkerpopExtension; import org.eclipse.jnosql.mapping.core.Converters; @@ -37,7 +36,6 @@ @EnableAutoWeld @AddPackages(value = {Converters.class, EntityConverter.class, TinkerpopTemplate.class}) -@AddPackages(GraphProducer.class) @AddPackages(Reflections.class) @AddExtensions({ReflectionEntityMetadataExtension.class, TinkerpopExtension.class}) class GraphSupplierTest { diff --git a/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/entities/Creature.java b/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/entities/Creature.java index 40fef8e77..f34383769 100644 --- a/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/entities/Creature.java +++ b/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/entities/Creature.java @@ -23,9 +23,8 @@ @Entity public class Creature { - - @Id - private Long id; + @Id("~id") + private String id; @Column private String name; @@ -37,7 +36,7 @@ public Creature(String name) { this.name = name; } - public Long getId() { + public String getId() { return id; } diff --git a/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/entities/Human.java b/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/entities/Human.java index 0667fcfce..8603d9556 100644 --- a/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/entities/Human.java +++ b/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/entities/Human.java @@ -27,8 +27,8 @@ @MappedSuperclass public class Human { - @Id - private Long id; + @Id("~id") + private String id; @Column private String name; @@ -42,7 +42,7 @@ public class Human { private String ignore; - public Long getId() { + public String getId() { return id; } @@ -69,7 +69,7 @@ public boolean isAdult() { Human() { } - Human(Long id, String name, int age, List phones, String ignore) { + Human(String id, String name, int age, List phones, String ignore) { this.id = id; this.name = name; this.age = age; @@ -79,7 +79,7 @@ public boolean isAdult() { @Override public String toString() { - return "Person{" + "id=" + id + + return "Human{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + ", phones=" + phones + @@ -96,7 +96,7 @@ public boolean equals(Object o) { return false; } Human human = (Human) o; - return id == human.id && + return Objects.equals(id, human.id) && age == human.age && Objects.equals(name, human.name) && Objects.equals(phones, human.phones); diff --git a/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/entities/HumanBuilder.java b/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/entities/HumanBuilder.java index 7caaf886d..206d57993 100644 --- a/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/entities/HumanBuilder.java +++ b/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/entities/HumanBuilder.java @@ -17,13 +17,13 @@ import java.util.List; public class HumanBuilder { - private Long id; + private String id; private String name; private int age; private List phones; private String ignore; - public HumanBuilder withId(long id) { + public HumanBuilder withId(String id) { this.id = id; return this; } diff --git a/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/entities/Magazine.java b/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/entities/Magazine.java index 07d03ed95..670ae74fc 100644 --- a/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/entities/Magazine.java +++ b/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/entities/Magazine.java @@ -23,8 +23,8 @@ @Entity public class Magazine { - @Id - private Long id; + @Id("~id") + private String id; @Column private String name; @@ -36,13 +36,13 @@ public class Magazine { Magazine() { } - Magazine(Long id, String name, Integer age) { + Magazine(String id, String name, Integer age) { this.id = id; this.name = name; this.age = age; } - public Long getId() { + public String getId() { return id; } @@ -86,7 +86,7 @@ public static MagazineBuilder builder() { public static class MagazineBuilder { private String name; private Integer age; - private Long id; + private String id; private MagazineBuilder() { } @@ -101,7 +101,7 @@ public MagazineBuilder withAge(Integer age) { return this; } - public MagazineBuilder withId(Long id) { + public MagazineBuilder withId(String id) { this.id = id; return this; } diff --git a/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/spi/TinkerpopExtensionTest.java b/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/spi/TinkerpopExtensionTest.java index 9683d70cd..cbafb65f4 100644 --- a/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/spi/TinkerpopExtensionTest.java +++ b/jnosql-tinkerpop/src/test/java/org/eclipse/jnosql/databases/tinkerpop/mapping/spi/TinkerpopExtensionTest.java @@ -15,9 +15,8 @@ package org.eclipse.jnosql.databases.tinkerpop.mapping.spi; import jakarta.inject.Inject; -import org.eclipse.jnosql.databases.tinkerpop.mapping.GraphProducer; import org.eclipse.jnosql.databases.tinkerpop.mapping.TinkerpopTemplate; -import org.eclipse.jnosql.databases.tinkerpop.mapping.entities.Human; +import org.eclipse.jnosql.databases.tinkerpop.cdi.mock.MockGraphProducer; import org.eclipse.jnosql.databases.tinkerpop.mapping.entities.HumanRepository; import org.eclipse.jnosql.mapping.Database; import org.eclipse.jnosql.mapping.DatabaseType; @@ -33,17 +32,15 @@ import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertNull; @EnableAutoWeld @AddPackages(value = {Converters.class, EntityConverter.class, TinkerpopTemplate.class, GraphTemplate.class}) -@AddPackages(GraphProducer.class) +@AddPackages(MockGraphProducer.class) @AddPackages(Reflections.class) @AddExtensions({ReflectionEntityMetadataExtension.class, TinkerpopExtension.class, GraphExtension.class}) class TinkerpopExtensionTest { - @Inject @Database(value = DatabaseType.GRAPH) private HumanRepository repository; @@ -69,7 +66,7 @@ void shouldInitiate() { } @Test - void shouldUseMock(){ + void shouldUseMock() { assertNotNull(repositoryMock); } diff --git a/jnosql-tinkerpop/src/test/resources/simplelogger.properties b/jnosql-tinkerpop/src/test/resources/simplelogger.properties new file mode 100644 index 000000000..9268538a1 --- /dev/null +++ b/jnosql-tinkerpop/src/test/resources/simplelogger.properties @@ -0,0 +1,12 @@ +org.slf4j.simpleLogger.logFile=System.out +org.slf4j.simpleLogger.showDateTime=true +org.slf4j.simpleLogger.dateTimeFormat=HH:mm:ss.SSS +org.slf4j.simpleLogger.showThreadName=true +org.slf4j.simpleLogger.showLogName=true +org.slf4j.simpleLogger.showShortLogName=false + +org.slf4j.simpleLogger.defaultLogLevel=info +org.slf4j.simpleLogger.log.org.testcontainers=warn + +## ArangoDB communication debug level +#org.slf4j.simpleLogger.log.com.arangodb.internal.net.Communication=debug