@Test public void shouldTransformElementUsingMockFunction() { // Given final String selection = "reference1"; final String projection = "reference1"; final Integer valueResult = 3; final Function<String, Integer> function = mock(Function.class); given(function.apply("value1")).willReturn(valueResult); final ElementTransformer transformer = new ElementTransformer.Builder() .select(selection) .execute(function) .project(projection) .build(); final Edge edge = new Edge.Builder() .property(selection, "value1") .build(); // When final Element result = transformer.apply(edge); // Then assertEquals(valueResult, result.getProperty(projection)); }
@Test public void shouldAggregateElementUsingMockBinaryOperator() { // Given final String reference = "reference1"; final Integer valueResult = 3; final BinaryOperator<Integer> function = mock(BinaryOperator.class); given(function.apply(1, 2)).willReturn(valueResult); final ElementAggregator aggregator = new ElementAggregator.Builder() .select(reference) .execute(function) .build(); final Edge edge1 = new Edge.Builder() .property(reference, 1) .build(); final Edge edge2 = new Edge.Builder() .property(reference, 2) .build(); // When final Element result = aggregator.apply(edge1, edge2); // Then assertEquals(valueResult, result.getProperty(reference)); }
@Override public Iterable<Element> _apply(final String line) { final Set<Element> elements = new HashSet<>(); for (int i = 0; i < 1000; i++) { final LongsSketch longsSketch = new LongsSketch(32); longsSketch.update((long) (RANDOM.nextDouble() * 10)); final Edge edge = new Edge.Builder() .group("red") .source("A") .dest("B") .property("longsSketch", longsSketch) .build(); elements.add(edge); } return elements; } }
@Override public Iterable<Element> getElements(final String line) { final Set<Element> elements = new HashSet<>(); for (int i = 0; i < 1000; i++) { final LongsSketch longsSketch = new LongsSketch(32); longsSketch.update((long) (RANDOM.nextDouble() * 10)); final Edge edge = new Edge.Builder() .group("red") .source("A") .dest("B") .property("longsSketch", longsSketch) .build(); elements.add(edge); } return elements; }
@Override public Element getElement(final String line) { final String[] t = line.split(","); final Edge.Builder builder = new Edge.Builder() .group(t[2]) .source(t[0]) .dest(t[1]) .directed(false) .property("count", 1); if ("yellow".equals(t[2])) { builder.property("score", t[3]); } else if ("green".equals(t[2])) { builder.directed(true); } return builder.build(); }
@Override public Iterable<Element> getElements(final String line) { final Set<Element> elements = new HashSet<>(); for (int i = 0; i < 1000; i++) { final DoublesUnion doublesUnion = DoublesUnion.builder().build(); doublesUnion.update(RANDOM.nextGaussian()); final Edge edge = new Edge.Builder() .group("red") .source("A") .dest("B") .property("doublesUnion", doublesUnion) .build(); elements.add(edge); } return elements; }
@Override public Element _apply(final String line) { final String[] t = line.split(","); // Ignore the road name final String junctionA = t[1]; final String junctionB = t[2]; return new Edge.Builder() .group("RoadUse") .source(junctionA) .dest(junctionB) .directed(true) .property("count", 1L) .build(); } }
@Override public Iterable<Element> getElements(final String line) { final String[] t = line.split(","); final Edge edge = new Edge.Builder() .group(t[0]) .source(t[1]).dest(t[2]).directed(false) .property("count", 1) .build(); final Entity sourceCardinality = createCardinalityEntity( edge.getSource(), edge.getDestination(), edge); final Entity destinationCardinality = createCardinalityEntity( edge.getDestination(), edge.getSource(), edge); return Arrays.asList(edge, sourceCardinality, destinationCardinality); }
@Test public void shouldNotRemovePropertiesWhenNotSet() { //Given final View view = new View.Builder() .edge(TestGroups.EDGE, new ViewElementDefinition.Builder() .allProperties() .build()) .entity(TestGroups.ENTITY, new ViewElementDefinition.Builder() .properties(TestPropertyNames.PROP_2) .build()) .build(); final Edge edge = new Edge.Builder() .group(TestGroups.EDGE) .property(TestPropertyNames.PROP_1, "1") .property(TestPropertyNames.PROP_2, "2") .property(TestPropertyNames.PROP_3, "3") .build(); //When ViewUtil.removeProperties(view, edge); //Then assertEquals(3, edge.getProperties().size()); assertEquals("1", edge.getProperties().get(TestPropertyNames.PROP_1)); assertEquals("2", edge.getProperties().get(TestPropertyNames.PROP_2)); assertEquals("3", edge.getProperties().get(TestPropertyNames.PROP_3)); }
@Test public void shouldAggregateElementUsingKorypheBinaryOperator() { // Given final String reference = "reference1"; final BinaryOperator<Integer> function = new KorypheBinaryOperator<Integer>() { @Override public Integer _apply(final Integer a, final Integer b) { return a + b; } }; final ElementAggregator aggregator = new ElementAggregator.Builder() .select(reference) .execute(function) .build(); final Edge edge1 = new Edge.Builder() .property(reference, 1) .build(); final Edge edge2 = new Edge.Builder() .property(reference, 2) .build(); // When final Element result = aggregator.apply(edge1, edge2); // Then assertEquals(3, result.getProperty(reference)); }
@Test public void shouldRemoveExcludedProperties() { //Given final View view = new View.Builder() .edge(TestGroups.EDGE, new ViewElementDefinition.Builder() .excludeProperties(TestPropertyNames.PROP_1) .build()) .entity(TestGroups.ENTITY, new ViewElementDefinition.Builder() .excludeProperties(TestPropertyNames.PROP_2) .build()) .build(); final Edge edge = new Edge.Builder() .group(TestGroups.EDGE) .property(TestPropertyNames.PROP_1, "1") .property(TestPropertyNames.PROP_2, "2") .property(TestPropertyNames.PROP_3, "3") .build(); //When ViewUtil.removeProperties(view, edge); //Then assertEquals(2, edge.getProperties().size()); assertEquals("2", edge.getProperties().get(TestPropertyNames.PROP_2)); assertEquals("3", edge.getProperties().get(TestPropertyNames.PROP_3)); }
@Test public void shouldKeepOnlyProvidedProperties() { //Given final View view = new View.Builder() .edge(TestGroups.EDGE, new ViewElementDefinition.Builder() .properties(TestPropertyNames.PROP_1) .build()) .entity(TestGroups.ENTITY, new ViewElementDefinition.Builder() .properties(TestPropertyNames.PROP_2) .build()) .build(); final Edge edge = new Edge.Builder() .group(TestGroups.EDGE) .property(TestPropertyNames.PROP_1, "1") .property(TestPropertyNames.PROP_2, "2") .property(TestPropertyNames.PROP_3, "3") .build(); //When ViewUtil.removeProperties(view, edge); //Then assertEquals(1, edge.getProperties().size()); assertEquals("1", edge.getProperties().get(TestPropertyNames.PROP_1)); }
@Test public void shouldBuildEdge() { // Given final String source = "source vertex"; final String destination = "dest vertex"; final boolean directed = true; final String propValue = "propValue"; // When final Edge edge = new Edge.Builder() .group(TestGroups.EDGE) .source(source) .dest(destination) .directed(directed) .property(TestPropertyNames.STRING, propValue) .build(); // Then assertEquals(TestGroups.EDGE, edge.getGroup()); assertEquals(source, edge.getSource()); assertEquals(destination, edge.getDestination()); assertTrue(edge.isDirected()); assertEquals(propValue, edge.getProperty(TestPropertyNames.STRING)); }
@Test public void shouldNotRemovePropertiesWhenNoRelevantExcludeProperties() { //Given final View view = new View.Builder() .edge(TestGroups.EDGE, new ViewElementDefinition.Builder() .excludeProperties(TestPropertyNames.COUNT) .build()) .entity(TestGroups.ENTITY, new ViewElementDefinition.Builder() .properties(TestPropertyNames.PROP_2) .build()) .build(); final Edge edge = new Edge.Builder() .group(TestGroups.EDGE) .property(TestPropertyNames.PROP_1, "1") .property(TestPropertyNames.PROP_2, "2") .property(TestPropertyNames.PROP_3, "3") .build(); //When ViewUtil.removeProperties(view, edge); //Then assertEquals(3, edge.getProperties().size()); assertEquals("1", edge.getProperties().get(TestPropertyNames.PROP_1)); assertEquals("2", edge.getProperties().get(TestPropertyNames.PROP_2)); assertEquals("3", edge.getProperties().get(TestPropertyNames.PROP_3)); }
@Test public void shouldGetValues() { // Given final Edge edge = new Edge.Builder() .group("group") .source("source vertex") .dest("destination vertex") .directed(true) .matchedVertex(EdgeId.MatchedVertex.SOURCE) .property(TestPropertyNames.COUNT, 1) .build(); final ElementTuple tuple = new ElementTuple(edge); // When / Then assertEquals("source vertex", tuple.get(IdentifierType.SOURCE.name())); assertEquals("destination vertex", tuple.get(IdentifierType.DESTINATION.name())); assertEquals(true, tuple.get(IdentifierType.DIRECTED.name())); assertEquals("source vertex", tuple.get(IdentifierType.MATCHED_VERTEX.name())); assertEquals("destination vertex", tuple.get(IdentifierType.ADJACENT_MATCHED_VERTEX.name())); assertEquals(1, tuple.get(TestPropertyNames.COUNT)); }
@Test public void shouldAggregateElementUsingLambdaBinaryOperator() { // Given final String reference = "reference1"; final BinaryOperator<String> function = (a, b) -> a + "," + b; final ElementAggregator aggregator = new ElementAggregator.Builder() .select(reference) .execute(function) .build(); final Edge edge1 = new Edge.Builder() .property(reference, "value1") .build(); final Edge edge2 = new Edge.Builder() .property(reference, "value2") .build(); // When final Element result = aggregator.apply(edge1, edge2); // Then assertEquals("value1,value2", result.getProperty(reference)); }
@Test public void shouldNotRemoveAllPropertiesWhenNoRelevantProperties() { //Given final View view = new View.Builder() .edge(TestGroups.EDGE, new ViewElementDefinition.Builder() .properties(TestPropertyNames.COUNT) .build()) .entity(TestGroups.ENTITY, new ViewElementDefinition.Builder() .properties(TestPropertyNames.PROP_2) .build()) .build(); final Edge edge = new Edge.Builder() .group(TestGroups.EDGE) .property(TestPropertyNames.PROP_1, "1") .property(TestPropertyNames.PROP_2, "2") .property(TestPropertyNames.PROP_3, "3") .build(); //When ViewUtil.removeProperties(view, edge); //Then assertEquals(0, edge.getProperties().size()); }
@Test public void shouldReturnTrueForShallowEqualsWhenAllCoreFieldsAreEqual() { // Given final Edge edge1 = new Edge.Builder() .group("group") .source("source vertex") .dest("dest vertex") .directed(true) .property("some property", "some value") .build(); final Edge edge2 = cloneCoreFields(edge1); edge2.putProperty("some different property", "some other value"); // When boolean isEqual = edge1.shallowEquals((Object) edge2); // Then assertTrue(isEqual); }
@Test public void shouldReturnFalseForEqualsWhenPropertyIsDifferent() { // Given final Edge edge1 = new Edge.Builder() .group("group") .source("source vertex") .dest("dest vertex") .directed(true) .property("some property", "some value") .build(); final Edge edge2 = cloneCoreFields(edge1); edge2.putProperty("some property", "some other value"); // When boolean isEqual = edge1.equals((Object) edge2); // Then assertFalse(isEqual); assertNotEquals(edge1.hashCode(), edge2.hashCode()); }
@Override @Test public void shouldReturnTrueForEqualsWhenAllCoreFieldsAreEqual() { final Edge edge1 = new Edge.Builder() .group("group") .source("source vertex") .dest("dest vertex") .directed(true) .property("some property", "some value") .build(); final Edge edge2 = cloneCoreFields(edge1); edge2.putProperty("some property", "some value"); // When boolean isEqual = edge1.equals((Object) edge2); // Then assertTrue(isEqual); assertEquals(edge1.hashCode(), edge2.hashCode()); }