Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -111,13 +111,13 @@ private Builder(EventsApiImpl eventsApi) {
this.accessor = eventsApi.accessor;
this.offset = eventsApi.offset;
this.limit = eventsApi.limit;
this.users = eventsApi.users;
this.ids = eventsApi.ids;
this.entityTypes = eventsApi.entityTypes;
this.eventTypes = eventsApi.eventTypes;
this.users = Sets.newHashSet(eventsApi.users);
this.ids = Sets.newHashSet(eventsApi.ids);
this.entityTypes = Sets.newHashSet(eventsApi.entityTypes);
this.eventTypes = Sets.newHashSet(eventsApi.eventTypes);
this.from = eventsApi.from;
this.to = eventsApi.to;
this.showType = eventsApi.showType;
this.showType = Sets.newHashSet(eventsApi.showType);
this.aggregation = eventsApi.aggregation;
}

Expand Down Expand Up @@ -429,14 +429,14 @@ private GremlinPipeline<SystemEvent, SystemEvent> filterEvents(
if (from != null) {
pipe = pipe.filter(event -> {
String timestamp = event.getTimestamp();
return from.compareTo(timestamp) >= 0;
return timestamp.compareTo(from) >= 0;
});
}

if (to != null) {
pipe = pipe.filter(event -> {
String timestamp = event.getTimestamp();
return to.compareTo(timestamp) <= 0;
return timestamp.compareTo(to) <= 0;
});
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -258,8 +258,7 @@ public <E extends Entity> Page<E> page(Iterable<? extends E> entities, Class<E>
// can't re-use the iterator for counting and streaming.
ArrayList<Vertex> userVerts = Lists.newArrayList(setFilters(pipeline).iterator());
Iterable<E> iterable = graph.frameVertices(
setPipelineRange(setOrder(new GremlinPipeline<>(
userVerts))), cls);
setPipelineRange(setOrder(new GremlinPipeline<>(userVerts))), cls);
return new Page<>(iterable, offset, limit, userVerts.size());
}
}
Expand Down Expand Up @@ -293,7 +292,9 @@ public long count(Iterable<?> vertices) {

@Override
public long count(EntityClass type) {
return count(manager.getVertices(type));
try (final CloseableIterable<Vertex> vertices = manager.getVertices(type)) {
return count(vertices);
}
}

// Helpers
Expand Down
39 changes: 37 additions & 2 deletions ehri-core/src/test/java/eu/ehri/project/api/EventsApiTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -87,13 +87,13 @@ public void testList() throws Exception {
.to(timestamp)
.list());
assertEquals(1, Iterables.size(toList));
assertEquals(doc2, toList.get(0).getFirstSubject());
assertEquals(doc1, toList.get(0).getFirstSubject());

List<SystemEvent> fromList = Lists.newArrayList(events(user1)
.from(timestamp)
.list());
assertEquals(1, Iterables.size(fromList));
assertEquals(doc1, fromList.get(0).getFirstSubject());
assertEquals(doc2, fromList.get(0).getFirstSubject());

// Test ID filter
List<SystemEvent> idList = Lists.newArrayList(events(user1)
Expand Down Expand Up @@ -122,6 +122,41 @@ public void testList() throws Exception {
assertEquals(doc1, eventPage.get(0).getFirstSubject());
}

@Test
public void testWithFiltersDoesNotMutateSource() throws Exception {
createItemWithIdentifier("foo", user1);
createItemWithIdentifier("bar", user1);

EventsApi base = events(user1);
// Deriving a filtered view must not bleed back into `base`.
base.withUsers(user2.getId()).list();
assertEquals(2, Iterables.size(base.list()));
}

@Test
public void testFromAndToFilterByTimestampRange() throws Exception {
// doc1 is created before `midpoint`, doc2 after, so:
// - .from(midpoint) should keep only the doc2 event (timestamp >= midpoint)
// - .to(midpoint) should keep only the doc1 event (timestamp <= midpoint)
DocumentaryUnit doc1 = createItemWithIdentifier("foo", user1);
Thread.sleep(10);
String midpoint = ActionManager.getTimestamp();
Thread.sleep(10);
DocumentaryUnit doc2 = createItemWithIdentifier("bar", user1);

List<SystemEvent> fromList = Lists.newArrayList(events(user1)
.from(midpoint)
.list());
assertEquals(1, fromList.size());
assertEquals(doc2, fromList.get(0).getFirstSubject());

List<SystemEvent> toList = Lists.newArrayList(events(user1)
.to(midpoint)
.list());
assertEquals(1, toList.size());
assertEquals(doc1, toList.get(0).getFirstSubject());
}

@Test
public void testListAsUserFollowing() throws Exception {
createItemWithIdentifier("foo", user1);
Expand Down
Loading