Coverage Summary for Class: TestUUID (org.umlg.sqlg.test.uuid)

Class Method, % Branch, % Line, %
TestUUID 100% (7/7) 100% (6/6) 100% (105/105)
TestUUID$1 100% (1/1) 100% (2/2)
TestUUID$2 100% (1/1) 100% (2/2)
TestUUID$3 100% (1/1) 100% (2/2)
TestUUID$4 100% (1/1) 100% (2/2)
Total 100% (11/11) 100% (6/6) 100% (113/113)


 package org.umlg.sqlg.test.uuid;
 
 import org.apache.commons.collections4.set.ListOrderedSet;
 import org.apache.tinkerpop.gremlin.structure.Edge;
 import org.apache.tinkerpop.gremlin.structure.T;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.junit.Assert;
 import org.junit.Assume;
 import org.junit.Before;
 import org.junit.Test;
 import org.umlg.sqlg.structure.PropertyDefinition;
 import org.umlg.sqlg.structure.PropertyType;
 import org.umlg.sqlg.structure.topology.EdgeLabel;
 import org.umlg.sqlg.structure.topology.PropertyColumn;
 import org.umlg.sqlg.structure.topology.VertexLabel;
 import org.umlg.sqlg.test.BaseTest;
 
 import java.util.HashMap;
 import java.util.List;
 import java.util.Optional;
 import java.util.UUID;
 
 public class TestUUID extends BaseTest {
 
     @Before
     public void before() throws Exception {
         super.before();
         Assume.assumeTrue(this.sqlgGraph.getSqlDialect().supportsUUID());
     }
 
     @Test
     public void testUUID() {
         UUID uuidPerson1 = UUID.randomUUID();
         Vertex vertexA = this.sqlgGraph.addVertex(T.label, "Person", "uuid", uuidPerson1);
         UUID uuidPerson2 = UUID.randomUUID();
         Vertex vertexB = this.sqlgGraph.addVertex(T.label, "Person", "uuid", uuidPerson2);
         UUID uuidEdge = UUID.randomUUID();
         Edge edge = vertexA.addEdge("knows", vertexB, "uuid", uuidEdge);
         vertexA.addEdge("knows", vertexB, "uuid", UUID.randomUUID());
         vertexA.addEdge("knows", vertexB, "uuid", UUID.randomUUID());
         this.sqlgGraph.tx().commit();
         vertexA = this.sqlgGraph.traversal().V(vertexA.id()).next();
         UUID uuidFromDB = vertexA.value("uuid");
         Assert.assertEquals(uuidPerson1, uuidFromDB);
         vertexB = this.sqlgGraph.traversal().V(vertexB.id()).next();
         uuidFromDB = vertexB.value("uuid");
         Assert.assertEquals(uuidPerson2, uuidFromDB);
         edge = this.sqlgGraph.traversal().E(edge.id()).next();
         uuidFromDB = edge.value("uuid");
         Assert.assertEquals(uuidEdge, uuidFromDB);
 
         List<Vertex> persons = this.sqlgGraph.traversal().V().hasLabel("Person").has("uuid", uuidPerson1).toList();
         Assert.assertEquals(1, persons.size());
         Assert.assertEquals(uuidPerson1, persons.get(0).value("uuid"));
         persons = this.sqlgGraph.traversal().V().hasLabel("Person").has("uuid", uuidPerson2).toList();
         Assert.assertEquals(1, persons.size());
         Assert.assertEquals(uuidPerson2, persons.get(0).value("uuid"));
         List<Edge> edges = this.sqlgGraph.traversal().E().hasLabel("knows").has("uuid", uuidEdge).toList();
         Assert.assertEquals(1, edges.size());
         Assert.assertEquals(uuidEdge, edges.get(0).value("uuid"));
 
         List<Vertex> vertices = this.sqlgGraph.traversal().V().hasLabel("Person").has("uuid", uuidPerson1)
                 .outE().has("uuid", uuidEdge)
                 .otherV()
                 .toList();
         Assert.assertEquals(1, vertices.size());
     }
 
     @Test
     public void testUUIDViaTopologyApi() {
         VertexLabel personVertexLabel = this.sqlgGraph.getTopology().getPublicSchema().ensureVertexLabelExist("Person", new HashMap<>() {{
             put("uuid", PropertyDefinition.of(PropertyType.UUID));
         }});
         personVertexLabel.ensureEdgeLabelExist("knows", personVertexLabel, new HashMap<>() {{
             put("uuid", PropertyDefinition.of(PropertyType.UUID));
         }});
         this.sqlgGraph.tx().commit();
 
         VertexLabel vertexLabel = this.sqlgGraph.getTopology().getPublicSchema().getVertexLabel("Person").orElseThrow();
         Optional<PropertyColumn> uuidPropertyColumnOptional = vertexLabel.getProperty("uuid");
         Assert.assertTrue(uuidPropertyColumnOptional.isPresent());
         Assert.assertEquals(PropertyType.UUID, uuidPropertyColumnOptional.get().getPropertyType());
 
         EdgeLabel edgeLabel = this.sqlgGraph.getTopology().getPublicSchema().getEdgeLabel("knows").orElseThrow();
         uuidPropertyColumnOptional = edgeLabel.getProperty("uuid");
         Assert.assertTrue(uuidPropertyColumnOptional.isPresent());
         Assert.assertEquals(PropertyType.UUID, uuidPropertyColumnOptional.get().getPropertyType());
 
         UUID uuidPerson1 = UUID.randomUUID();
         Vertex vertexA = this.sqlgGraph.addVertex(T.label, "Person", "uuid", uuidPerson1);
         UUID uuidPerson2 = UUID.randomUUID();
         Vertex vertexB = this.sqlgGraph.addVertex(T.label, "Person", "uuid", uuidPerson2);
         UUID uuidEdge = UUID.randomUUID();
         Edge edge = vertexA.addEdge("knows", vertexB, "uuid", uuidEdge);
         vertexA.addEdge("knows", vertexB, "uuid", UUID.randomUUID());
         vertexA.addEdge("knows", vertexB, "uuid", UUID.randomUUID());
         this.sqlgGraph.tx().commit();
         vertexA = this.sqlgGraph.traversal().V(vertexA.id()).next();
         UUID uuidFromDB = vertexA.value("uuid");
         Assert.assertEquals(uuidPerson1, uuidFromDB);
         vertexB = this.sqlgGraph.traversal().V(vertexB.id()).next();
         uuidFromDB = vertexB.value("uuid");
         Assert.assertEquals(uuidPerson2, uuidFromDB);
         edge = this.sqlgGraph.traversal().E(edge.id()).next();
         uuidFromDB = edge.value("uuid");
         Assert.assertEquals(uuidEdge, uuidFromDB);
 
         List<Vertex> persons = this.sqlgGraph.traversal().V().hasLabel("Person").has("uuid", uuidPerson1).toList();
         Assert.assertEquals(1, persons.size());
         Assert.assertEquals(uuidPerson1, persons.get(0).value("uuid"));
         persons = this.sqlgGraph.traversal().V().hasLabel("Person").has("uuid", uuidPerson2).toList();
         Assert.assertEquals(1, persons.size());
         Assert.assertEquals(uuidPerson2, persons.get(0).value("uuid"));
         List<Edge> edges = this.sqlgGraph.traversal().E().hasLabel("knows").has("uuid", uuidEdge).toList();
         Assert.assertEquals(1, edges.size());
         Assert.assertEquals(uuidEdge, edges.get(0).value("uuid"));
 
         List<Vertex> vertices = this.sqlgGraph.traversal().V().hasLabel("Person").has("uuid", uuidPerson1)
                 .outE().has("uuid", uuidEdge)
                 .otherV()
                 .toList();
         Assert.assertEquals(1, vertices.size());
     }
 
     @Test
     public void testUUIDAsIdentifier() {
         VertexLabel personVertexLabel = this.sqlgGraph.getTopology().getPublicSchema().ensureVertexLabelExist(
                 "Person",
                 new HashMap<>() {{
                     put("uuid", PropertyDefinition.of(PropertyType.UUID));
                 }},
                 ListOrderedSet.listOrderedSet(List.of("uuid"))
         );
         personVertexLabel.ensureEdgeLabelExist(
                 "knows",
                 personVertexLabel,
                 new HashMap<>() {{
                     put("uuid", PropertyDefinition.of(PropertyType.UUID));
                 }},
                 ListOrderedSet.listOrderedSet(List.of("uuid")));
         this.sqlgGraph.tx().commit();
 
         Vertex person1 = this.sqlgGraph.addVertex(T.label, "Person", "uuid", UUID.randomUUID());
         for (int i = 0; i < 100; i++) {
             Vertex other = this.sqlgGraph.addVertex(T.label, "Person", "uuid", UUID.randomUUID());
             person1.addEdge("knows", other, "uuid", UUID.randomUUID());
         }
         this.sqlgGraph.tx().commit();
         List<Vertex> others = this.sqlgGraph.traversal().V().hasId(person1.id()).out("knows").toList();
         Assert.assertEquals(100, others.size());
         List<Edge> otherEdges = this.sqlgGraph.traversal().V().hasId(person1.id()).outE("knows").toList();
         Assert.assertEquals(100, otherEdges.size());
     }
 
     @Test
     public void testUUIDViaNormalBatchMode() {
         this.sqlgGraph.tx().normalBatchModeOn();
         for (int i = 0; i < 100; i++) {
             this.sqlgGraph.addVertex(T.label, "A", "uuid", UUID.randomUUID());
         }
         this.sqlgGraph.tx().commit();
         List<UUID> uuids = this.sqlgGraph.traversal().V().hasLabel("A").<UUID>values("uuid").toList();
         Assert.assertEquals(100, uuids.size());
     }
 
     @Test
     public void testUUIDViaStreamingBatchMode() {
         Assume.assumeTrue(isPostgres());
         this.sqlgGraph.tx().streamingBatchModeOn();
         for (int i = 0; i < 100; i++) {
             this.sqlgGraph.streamVertex(T.label, "A", "uuid", UUID.randomUUID());
         }
         this.sqlgGraph.tx().commit();
         List<UUID> uuids = this.sqlgGraph.traversal().V().hasLabel("A").<UUID>values("uuid").toList();
         Assert.assertEquals(100, uuids.size());
     }
 }