### Question:
FactEdge implements Edge { @Override public <V> Iterator<Property<V>> properties(String... propertyKeys) { return allProperties.stream() .filter(property -> SetUtils.set(propertyKeys).isEmpty() || SetUtils.in(property.key(), propertyKeys)) .map(property -> (Property<V>) property) .iterator(); } FactEdge(ActGraph graph, UUID factID, UUID inVertexObjectID, UUID outVertexObjectID); @Override Iterator<Vertex> vertices(Direction direction); @Override Object id(); @Override String label(); @Override Graph graph(); @Override Iterator<Property<V>> properties(String... propertyKeys); @Override Property<V> property(String key, V value); @Override void remove(); @Override String toString(); @Override boolean equals(Object o); @Override int hashCode(); FactEntity getFact();  }### Answer:
@Test public void testPropertiesWithAllProperties() { Edge edge = createEdge(); assertTrue(edge.properties().hasNext()); }
@Test public void testPropertiesWithoutMatchingProperty() { Edge edge = createEdge(); assertFalse(edge.properties("something").hasNext()); }
@Test public void testPropertiesWithMatchingProperty() { Edge edge = createEdge(); assertTrue(edge.properties("value").hasNext()); }