### Question:
FactEdge implements Edge { @Override public <V> Iterator<Property<V>> properties(String... propertyKeys) { return properties.stream() .filter(property -> set(propertyKeys).isEmpty() || SetUtils.in(property.key(), propertyKeys)) .map(property -> (Property<V>) property) .iterator(); } private  FactEdge(ActGraph graph,
                   FactRecord fact,
                   FactTypeStruct type,
                   Vertex inVertex,
                   Vertex outVertex,
                   List<PropertyEntry<?>> properties); @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(); FactRecord getFactRecord(); @Override String toString(); @Override boolean equals(Object o); @Override int hashCode(); static Builder builder();  }### Answer:
@Test public void testPropertiesWithDefaultProperties() { Edge edge = createEdge(); assertFalse(edge.properties().hasNext()); }
@Test public void testPropertiesWithoutMatchingProperty() { Edge edge = createEdge(); assertFalse(edge.properties("something").hasNext()); }
@Test public void testPropertiesWithMatchingProperty() { Edge edge = createEdge(list(new PropertyEntry<>("value", "test"))); assertTrue(edge.properties("value").hasNext()); }