Skip to content

Commit c483494

Browse files
authored
[CHA-710] feat: export users async task (#172)
* feat: export users async task * fix: clear users list before adding new ones each time this fixes restricted visibility tests failing
1 parent 65ea0c8 commit c483494

File tree

4 files changed

+106
-0
lines changed

4 files changed

+106
-0
lines changed
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package io.getstream.chat.java.models;
2+
3+
import com.fasterxml.jackson.annotation.JsonProperty;
4+
import io.getstream.chat.java.models.framework.StreamRequest;
5+
import io.getstream.chat.java.models.framework.StreamResponseObject;
6+
import io.getstream.chat.java.services.ExportUsersService;
7+
import io.getstream.chat.java.services.framework.Client;
8+
import java.util.List;
9+
import lombok.Builder;
10+
import lombok.Data;
11+
import lombok.EqualsAndHashCode;
12+
import lombok.NoArgsConstructor;
13+
import org.jetbrains.annotations.NotNull;
14+
import retrofit2.Call;
15+
16+
@Data
17+
@NoArgsConstructor
18+
public class ExportUsers {
19+
20+
@Builder(
21+
builderClassName = "ExportUsersRequest",
22+
builderMethodName = "",
23+
buildMethodName = "internalBuild")
24+
public static class ExportUsersRequestData {
25+
@JsonProperty("user_ids")
26+
private List<String> userIds;
27+
28+
public static class ExportUsersRequest extends StreamRequest<ExportUsers.ExportUsersResponse> {
29+
@Override
30+
protected Call<ExportUsers.ExportUsersResponse> generateCall(Client client) {
31+
return client.create(ExportUsersService.class).exportUsers(this.internalBuild());
32+
}
33+
}
34+
}
35+
36+
@Data
37+
@NoArgsConstructor
38+
@EqualsAndHashCode(callSuper = true)
39+
public static class ExportUsersResponse extends StreamResponseObject {
40+
@NotNull
41+
@JsonProperty("task_id")
42+
private String taskId;
43+
}
44+
45+
/**
46+
* Creates a export users request
47+
*
48+
* @param userIds list of user IDs to be exported
49+
* @return the created request
50+
*/
51+
@NotNull
52+
public static ExportUsers.ExportUsersRequestData.ExportUsersRequest exportUsers(
53+
@NotNull List<String> userIds) {
54+
return new ExportUsers.ExportUsersRequestData.ExportUsersRequest().userIds(userIds);
55+
}
56+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package io.getstream.chat.java.services;
2+
3+
import io.getstream.chat.java.models.ExportUsers;
4+
import org.jetbrains.annotations.NotNull;
5+
import retrofit2.Call;
6+
import retrofit2.http.*;
7+
8+
public interface ExportUsersService {
9+
@POST("export/users")
10+
Call<ExportUsers.ExportUsersResponse> exportUsers(
11+
@NotNull @Body ExportUsers.ExportUsersRequestData exportUsersRequest);
12+
}

src/test/java/io/getstream/chat/java/BasicTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,7 @@ private static void createTestChannel() throws StreamException {
174174
}
175175

176176
static void upsertUsers() throws StreamException {
177+
testUsersRequestObjects.clear();
177178
testUserRequestObject =
178179
UserRequestObject.builder()
179180
.id(RandomStringUtils.randomAlphabetic(10))
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package io.getstream.chat.java;
2+
3+
import io.getstream.chat.java.models.*;
4+
import java.util.List;
5+
import org.apache.commons.lang3.RandomStringUtils;
6+
import org.junit.jupiter.api.Assertions;
7+
import org.junit.jupiter.api.DisplayName;
8+
import org.junit.jupiter.api.Test;
9+
10+
public class ExportUsersTest extends BasicTest {
11+
@DisplayName("Export users")
12+
@Test
13+
void exportUsersTest() {
14+
var userId = RandomStringUtils.randomAlphabetic(10);
15+
Assertions.assertDoesNotThrow(
16+
() -> User.upsert().user(User.UserRequestObject.builder().id(userId).build()).request());
17+
18+
var userIds = List.of(userId);
19+
var exportUsersResponse =
20+
Assertions.assertDoesNotThrow(() -> ExportUsers.exportUsers(userIds).request());
21+
Assertions.assertNotEquals("", exportUsersResponse.getTaskId());
22+
23+
var taskId = exportUsersResponse.getTaskId();
24+
25+
var taskCompleted = false;
26+
for (int i = 0; i < 10; i++) {
27+
var taskStatus =
28+
Assertions.assertDoesNotThrow(() -> TaskStatus.get(taskId).request()).getStatus();
29+
if (taskStatus.equals("completed")) {
30+
taskCompleted = true;
31+
break;
32+
}
33+
Assertions.assertDoesNotThrow(() -> Thread.sleep(500));
34+
}
35+
Assertions.assertTrue(taskCompleted);
36+
}
37+
}

0 commit comments

Comments
 (0)