Skip to content

Commit 6d942e7

Browse files
GwFreak01GwFreak01
authored andcommitted
feat(poll): add update poll endpoint
- Add UpdatePollResponse class - Add UpdatePollRequestData with UpdatePollRequest builder class - Add update() static factory method - Add PUT /polls service method - Add unit tests for update poll and close poll functionality
1 parent 3a61dd6 commit 6d942e7

File tree

3 files changed

+164
-0
lines changed

3 files changed

+164
-0
lines changed

src/main/java/io/getstream/chat/java/models/Poll.java

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,83 @@ protected Call<GetPollResponse> generateCall(Client client) throws StreamExcepti
290290
}
291291
}
292292

293+
/** Response for updating a poll. */
294+
@Data
295+
@NoArgsConstructor
296+
@EqualsAndHashCode(callSuper = true)
297+
public static class UpdatePollResponse extends StreamResponseObject {
298+
@NotNull
299+
@JsonProperty("poll")
300+
private Poll poll;
301+
}
302+
303+
/** Request data for updating a poll. */
304+
@Builder(
305+
builderClassName = "UpdatePollRequest",
306+
builderMethodName = "",
307+
buildMethodName = "internalBuild")
308+
@Getter
309+
@EqualsAndHashCode
310+
public static class UpdatePollRequestData {
311+
@Nullable
312+
@JsonProperty("id")
313+
private String id;
314+
315+
@Nullable
316+
@JsonProperty("name")
317+
private String name;
318+
319+
@Nullable
320+
@JsonProperty("description")
321+
private String description;
322+
323+
@Nullable
324+
@JsonProperty("voting_visibility")
325+
private VotingVisibility votingVisibility;
326+
327+
@Nullable
328+
@JsonProperty("enforce_unique_vote")
329+
private Boolean enforceUniqueVote;
330+
331+
@Nullable
332+
@JsonProperty("max_votes_allowed")
333+
private Integer maxVotesAllowed;
334+
335+
@Nullable
336+
@JsonProperty("allow_user_suggested_options")
337+
private Boolean allowUserSuggestedOptions;
338+
339+
@Nullable
340+
@JsonProperty("allow_answers")
341+
private Boolean allowAnswers;
342+
343+
@Nullable
344+
@JsonProperty("is_closed")
345+
private Boolean isClosed;
346+
347+
@Singular
348+
@Nullable
349+
@JsonProperty("options")
350+
private List<PollOptionRequestObject> options;
351+
352+
@Nullable
353+
@JsonProperty("user_id")
354+
private String userId;
355+
356+
@Nullable
357+
@JsonProperty("user")
358+
private UserRequestObject user;
359+
360+
public static class UpdatePollRequest extends StreamRequest<UpdatePollResponse> {
361+
public UpdatePollRequest() {}
362+
363+
@Override
364+
protected Call<UpdatePollResponse> generateCall(Client client) throws StreamException {
365+
return client.create(PollService.class).update(this.internalBuild());
366+
}
367+
}
368+
}
369+
293370
/** Request data for creating a poll. */
294371
@Builder(
295372
builderClassName = "CreatePollRequest",
@@ -373,4 +450,14 @@ public static CreatePollRequest create() {
373450
public static GetPollRequest get(@NotNull String pollId) {
374451
return new GetPollRequest(pollId);
375452
}
453+
454+
/**
455+
* Updates a poll (full update).
456+
*
457+
* @return the created request
458+
*/
459+
@NotNull
460+
public static UpdatePollRequestData.UpdatePollRequest update() {
461+
return new UpdatePollRequestData.UpdatePollRequest();
462+
}
376463
}

src/main/java/io/getstream/chat/java/services/PollService.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,15 @@
33
import io.getstream.chat.java.models.Poll.CreatePollRequestData;
44
import io.getstream.chat.java.models.Poll.CreatePollResponse;
55
import io.getstream.chat.java.models.Poll.GetPollResponse;
6+
import io.getstream.chat.java.models.Poll.UpdatePollRequestData;
7+
import io.getstream.chat.java.models.Poll.UpdatePollResponse;
68
import org.jetbrains.annotations.NotNull;
79
import org.jetbrains.annotations.Nullable;
810
import retrofit2.Call;
911
import retrofit2.http.Body;
1012
import retrofit2.http.GET;
1113
import retrofit2.http.POST;
14+
import retrofit2.http.PUT;
1215
import retrofit2.http.Path;
1316
import retrofit2.http.Query;
1417

@@ -34,4 +37,13 @@ public interface PollService {
3437
@GET("polls/{poll_id}")
3538
Call<GetPollResponse> get(
3639
@NotNull @Path("poll_id") String pollId, @Nullable @Query("user_id") String userId);
40+
41+
/**
42+
* Updates a poll (full update).
43+
*
44+
* @param request The poll update request data
45+
* @return A response with the updated poll
46+
*/
47+
@PUT("polls")
48+
Call<UpdatePollResponse> update(@NotNull @Body UpdatePollRequestData request);
3749
}

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

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import io.getstream.chat.java.models.Poll.CreatePollResponse;
55
import io.getstream.chat.java.models.Poll.GetPollResponse;
66
import io.getstream.chat.java.models.Poll.PollOptionRequestObject;
7+
import io.getstream.chat.java.models.Poll.UpdatePollResponse;
78
import io.getstream.chat.java.models.Poll.VotingVisibility;
89
import java.util.UUID;
910
import org.junit.jupiter.api.Assertions;
@@ -136,4 +137,68 @@ void whenGettingPollWithUserId_thenNoException() {
136137

137138
Assertions.assertNotNull(getResponse.getPoll());
138139
}
140+
141+
@DisplayName("Can update a poll")
142+
@Test
143+
void whenUpdatingPoll_thenNoException() {
144+
// Create a poll first
145+
CreatePollResponse createResponse =
146+
Assertions.assertDoesNotThrow(
147+
() ->
148+
Poll.create()
149+
.name("Original Name")
150+
.userId(testUserRequestObject.getId())
151+
.option(PollOptionRequestObject.builder().text("Option 1").build())
152+
.request());
153+
154+
String pollId = createResponse.getPoll().getId();
155+
156+
// Update the poll
157+
String newName = "Updated Name " + UUID.randomUUID();
158+
UpdatePollResponse updateResponse =
159+
Assertions.assertDoesNotThrow(
160+
() ->
161+
Poll.update()
162+
.id(pollId)
163+
.name(newName)
164+
.description("Updated description")
165+
.userId(testUserRequestObject.getId())
166+
.option(PollOptionRequestObject.builder().text("New Option 1").build())
167+
.option(PollOptionRequestObject.builder().text("New Option 2").build())
168+
.request());
169+
170+
Assertions.assertNotNull(updateResponse);
171+
Assertions.assertEquals(newName, updateResponse.getPoll().getName());
172+
Assertions.assertEquals("Updated description", updateResponse.getPoll().getDescription());
173+
}
174+
175+
@DisplayName("Can close a poll via update")
176+
@Test
177+
void whenClosingPoll_thenNoException() {
178+
// Create a poll first
179+
CreatePollResponse createResponse =
180+
Assertions.assertDoesNotThrow(
181+
() ->
182+
Poll.create()
183+
.name("Poll to close " + UUID.randomUUID())
184+
.userId(testUserRequestObject.getId())
185+
.option(PollOptionRequestObject.builder().text("A").build())
186+
.request());
187+
188+
String pollId = createResponse.getPoll().getId();
189+
190+
// Close the poll
191+
UpdatePollResponse updateResponse =
192+
Assertions.assertDoesNotThrow(
193+
() ->
194+
Poll.update()
195+
.id(pollId)
196+
.name("Poll to close")
197+
.isClosed(true)
198+
.userId(testUserRequestObject.getId())
199+
.request());
200+
201+
Assertions.assertNotNull(updateResponse);
202+
Assertions.assertTrue(updateResponse.getPoll().getIsClosed());
203+
}
139204
}

0 commit comments

Comments
 (0)