Skip to content

Commit 0e95cc5

Browse files
authored
Merge pull request #183 from GetStream/discard_actor
[FEEDS-802]Discard actor
2 parents 90de6fa + 5fe380b commit 0e95cc5

4 files changed

Lines changed: 184 additions & 2 deletions

File tree

src/main/java/io/getstream/client/FlatFeed.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,29 @@ limit, offset, filter, DefaultOptions.DEFAULT_MARKER, new Ranking(ranking), rank
127127
});
128128
}
129129

130+
public CompletableFuture<List<Activity>> getActivities(RequestOption... options)
131+
throws StreamException {
132+
// If no options provided, use defaults
133+
if (options == null || options.length == 0) {
134+
options = new RequestOption[] {
135+
DefaultOptions.DEFAULT_LIMIT,
136+
DefaultOptions.DEFAULT_OFFSET,
137+
DefaultOptions.DEFAULT_FILTER,
138+
DefaultOptions.DEFAULT_MARKER
139+
};
140+
}
141+
142+
return getClient()
143+
.getActivities(getID(), options)
144+
.thenApply(
145+
response -> {
146+
try {
147+
return deserializeContainer(response, Activity.class);
148+
} catch (StreamException | IOException e) {
149+
throw new CompletionException(e);
150+
}
151+
});
152+
}
130153

131154
public <T> CompletableFuture<List<T>> getCustomActivities(Class<T> type) throws StreamException {
132155
return getCustomActivities(
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package io.getstream.core.options;
2+
3+
import static com.google.common.base.Preconditions.checkNotNull;
4+
5+
import io.getstream.core.http.Request;
6+
import java.util.List;
7+
8+
public final class DiscardActors implements RequestOption {
9+
private final String actors;
10+
private final String separator;
11+
12+
public DiscardActors(String... actors) {
13+
this(actors, ",");
14+
}
15+
16+
public DiscardActors(List<String> actors) {
17+
this(actors, ",");
18+
}
19+
20+
public DiscardActors(String[] actors, String separator) {
21+
checkNotNull(actors, "Actors list cannot be null");
22+
this.actors = String.join(separator != null ? separator : ",", actors);
23+
this.separator = separator;
24+
}
25+
26+
public DiscardActors(List<String> actors, String separator) {
27+
checkNotNull(actors, "Actors list cannot be null");
28+
this.actors = String.join(separator != null ? separator : ",", actors);
29+
this.separator = separator;
30+
}
31+
32+
@Override
33+
public void apply(Request.Builder builder) {
34+
if (actors != null && !actors.isEmpty()) {
35+
builder.addQueryParameter("discard_actors", actors);
36+
if (separator != null && !separator.equals(",")) {
37+
builder.addQueryParameter("discard_actors_sep", separator);
38+
}
39+
}
40+
}
41+
}

src/test/java/io/getstream/client/FlatFeedTest.java

Lines changed: 118 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,17 @@
77
import io.getstream.core.models.Activity;
88
import io.getstream.core.models.Data;
99
import io.getstream.core.models.EnrichedActivity;
10+
import io.getstream.core.options.DiscardActors;
1011
import io.getstream.core.options.EnrichmentFlags;
12+
import io.getstream.core.options.Filter;
13+
import io.getstream.core.options.Limit;
14+
import io.getstream.core.options.Offset;
1115
import java.util.Collections;
1216
import java.util.List;
1317
import java8.util.concurrent.CompletionException;
1418
import okhttp3.OkHttpClient;
1519
import org.junit.Test;
20+
import java.util.concurrent.atomic.AtomicReference;
1621

1722
public class FlatFeedTest {
1823
private static final String apiKey =
@@ -101,6 +106,118 @@ public void invalidFeedType() throws Exception {
101106
.build();
102107

103108
FlatFeed feed = client.flatFeed("aggregated", "1");
104-
List<Activity> result = feed.getActivities().join();
109+
feed.getActivities().join();
110+
}
111+
112+
113+
@Test
114+
public void testDiscardActorsOptions() {
115+
// Test DiscardActors with array
116+
DiscardActors discardActors1 = new DiscardActors("user1", "user2", "user3");
117+
118+
// Test DiscardActors with List
119+
List<String> actors = java.util.Arrays.asList("user4", "user5");
120+
DiscardActors discardActors2 = new DiscardActors(actors);
121+
122+
// Test DiscardActors with custom separator
123+
DiscardActors discardActors3 = new DiscardActors(new String[]{"user6", "user7"}, ";");
124+
125+
// Test DiscardActors with List and custom separator
126+
DiscardActors discardActors4 = new DiscardActors(actors, "|");
127+
128+
// Basic validation that objects were created
129+
assert discardActors1 != null;
130+
assert discardActors2 != null;
131+
assert discardActors3 != null;
132+
assert discardActors4 != null;
133+
}
134+
135+
@Test
136+
public void testGetActivitiesWithRequestOptions() throws Exception {
137+
Client client =
138+
Client.builder(apiKey, secret)
139+
.httpClient(new OKHTTPClientAdapter(new OkHttpClient()))
140+
.build();
141+
142+
FlatFeed feed = client.flatFeed("flat", "test-request-options");
143+
144+
// Test with just DiscardActors
145+
DiscardActors discardActors = new DiscardActors("actor1", "actor2", "actor3");
146+
List<Activity> result1 = feed.getActivities(discardActors).join();
147+
assert result1 != null;
148+
149+
// Test with DiscardActors + Limit + Filter
150+
List<String> actors = java.util.Arrays.asList("actor4", "actor5");
151+
DiscardActors discardActors2 = new DiscardActors(actors);
152+
Filter filter = new Filter().refresh();
153+
List<Activity> result2 = feed.getActivities(new Limit(10), filter, discardActors2).join();
154+
assert result2 != null;
155+
156+
// Test with all parameters
157+
List<Activity> result3 = feed.getActivities(
158+
new Limit(20),
159+
new Offset(5),
160+
new Filter().refresh(),
161+
new DiscardActors("actor6", "actor7")
162+
).join();
163+
assert result3 != null;
164+
}
165+
166+
@Test
167+
public void testGetActivitiesUrlParameters() throws Exception {
168+
// Create a mock HTTP client that captures the request URL
169+
AtomicReference<String> capturedUrl = new AtomicReference<>();
170+
171+
// Create a custom OkHttpClient that intercepts requests
172+
OkHttpClient mockClient = new OkHttpClient.Builder()
173+
.addInterceptor(chain -> {
174+
capturedUrl.set(chain.request().url().toString());
175+
// Return a mock response
176+
return new okhttp3.Response.Builder()
177+
.request(chain.request())
178+
.protocol(okhttp3.Protocol.HTTP_1_1)
179+
.code(200)
180+
.message("OK")
181+
.body(okhttp3.ResponseBody.create(
182+
okhttp3.MediaType.parse("application/json"),
183+
"{\"results\":[],\"next\":\"\",\"duration\":\"0ms\"}"
184+
))
185+
.build();
186+
})
187+
.build();
188+
189+
Client client = Client.builder("test-key", "test-secret")
190+
.httpClient(new OKHTTPClientAdapter(mockClient))
191+
.build();
192+
193+
FlatFeed feed = client.flatFeed("flat", "test-url-params");
194+
195+
// Test with multiple RequestOptions
196+
feed.getActivities(
197+
new Limit(20),
198+
new Offset(5),
199+
new Filter().refresh(),
200+
new DiscardActors("actor1", "actor2", "actor3")
201+
).join();
202+
203+
String url = capturedUrl.get();
204+
assert url != null;
205+
206+
// Verify URL contains expected parameters
207+
assert url.contains("limit=20") : "URL should contain limit=20, got: " + url;
208+
assert url.contains("offset=5") : "URL should contain offset=5, got: " + url;
209+
assert url.contains("refresh=1") : "URL should contain refresh=1, got: " + url;
210+
assert url.contains("discard_actors=actor1,actor2,actor3") : "URL should contain discard_actors, got: " + url;
211+
212+
// Test with custom separator
213+
capturedUrl.set(null);
214+
feed.getActivities(
215+
new DiscardActors(new String[]{"actor4", "actor5"}, "|")
216+
).join();
217+
218+
url = capturedUrl.get();
219+
assert url != null;
220+
assert url.contains("discard_actors=actor4%7Cactor5") : "URL should contain pipe-separated actors, got: " + url;
221+
assert url.contains("discard_actors_sep=%7C") : "URL should contain discard_actors_sep, got: " + url;
105222
}
106223
}

src/test/java/io/getstream/client/ModerationClientTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,8 @@ public void testActivityModerated() throws Exception {
9999
assertNotNull(activityResponse);
100100
ModerationResponse m = activityResponse.getModerationResponse();
101101
assertEquals(m.getStatus(), "complete");
102-
assertEquals(m.getRecommendedAction(), "remove");
102+
assertEquals(m.getRecommendedAction(), "remove");//if this fails,most likely blocklist is missing
103+
//https://getstream.slack.com/archives/C02PXEZ6MCN/p1759493441067379
103104
}
104105

105106
@Test

0 commit comments

Comments
 (0)