Skip to content

Commit

Permalink
Implement SuperReactions (Burst) data (#155)
Browse files Browse the repository at this point in the history
* Implement SuperReactions (Burst) data

* Minor change in text for consistence
  • Loading branch information
Doc94 authored Mar 27, 2024
1 parent 743ca21 commit 1df1663
Show file tree
Hide file tree
Showing 3 changed files with 102 additions and 54 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package discord4j.discordjson.json;

import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import org.immutables.value.Value;

@Value.Immutable
@JsonSerialize(as = ImmutableReactionCountDetailsData.class)
@JsonDeserialize(as = ImmutableReactionCountDetailsData.class)
public interface ReactionCountDetailsData {

static ImmutableReactionCountDetailsData.Builder builder() {
return ImmutableReactionCountDetailsData.builder();
}

int normal();

int burst();

}
11 changes: 11 additions & 0 deletions src/main/java/discord4j/discordjson/json/ReactionData.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package discord4j.discordjson.json;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import java.util.List;
import org.immutables.value.Value;

@Value.Immutable
Expand All @@ -15,7 +17,16 @@ static ImmutableReactionData.Builder builder() {

int count();

@JsonProperty("count_details")
ReactionCountDetailsData countDetails();

boolean me();

@JsonProperty("me_burst")
boolean meBurst();

EmojiData emoji();

@JsonProperty("burst_colors")
List<String> burstColors();
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import discord4j.discordjson.json.*;
import discord4j.discordjson.possible.PossibleFilter;
import discord4j.discordjson.possible.PossibleModule;
import java.util.Collections;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
Expand All @@ -34,21 +35,21 @@ public class RestDeserializationTest {
@BeforeEach
public void setUp() {
mapper = new ObjectMapper()
.registerModule(new PossibleModule())
.registerModule(new Jdk8Module())
.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.NONE)
.setVisibility(PropertyAccessor.GETTER, JsonAutoDetect.Visibility.PUBLIC_ONLY)
.addHandler(new DeserializationProblemHandler() {
@Override
public boolean handleUnknownProperty(DeserializationContext ctxt, JsonParser p, JsonDeserializer<
?> deserializer, Object beanOrClass, String propertyName) throws IOException {
log.warn("Unknown property in {}: {}", beanOrClass, propertyName);
p.skipChildren();
return true;
}
})
.setDefaultPropertyInclusion(JsonInclude.Value.construct(JsonInclude.Include.CUSTOM,
JsonInclude.Include.ALWAYS, PossibleFilter.class, null));
.registerModule(new PossibleModule())
.registerModule(new Jdk8Module())
.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.NONE)
.setVisibility(PropertyAccessor.GETTER, JsonAutoDetect.Visibility.PUBLIC_ONLY)
.addHandler(new DeserializationProblemHandler() {
@Override
public boolean handleUnknownProperty(DeserializationContext ctxt, JsonParser p, JsonDeserializer<
?> deserializer, Object beanOrClass, String propertyName) throws IOException {
log.warn("Unknown property in {}: {}", beanOrClass, propertyName);
p.skipChildren();
return true;
}
})
.setDefaultPropertyInclusion(JsonInclude.Value.construct(JsonInclude.Include.CUSTOM,
JsonInclude.Include.ALWAYS, PossibleFilter.class, null));
}

private <T> T read(String from, Class<T> into) throws IOException {
Expand Down Expand Up @@ -87,48 +88,63 @@ public void testCreateMessageResponse() throws IOException {
public void testMessageCopyingCollectionMethods() throws IOException {
MessageData res = read("/rest/CreateMessageResponse.json", MessageData.class);
MessageData withReaction = MessageData.builder().from(res)
.addReaction(ReactionData.builder()
.count(1)
.me(false)
.emoji(EmojiData.builder().id("1").build())
.build())
.build();
.addReaction(ReactionData.builder()
.count(1)
.me(false)
.meBurst(false)
.countDetails(ReactionCountDetailsData.builder().normal(1).burst(0).build())
.burstColors(Collections.emptyList())
.emoji(EmojiData.builder().id("1").build())
.build())
.build();
MessageData withThreeReactions = MessageData.builder().from(withReaction)
.addAllReactions(Arrays.asList(
ReactionData.builder()
.count(1)
.me(false)
.emoji(EmojiData.builder().id("2").build())
.build(),
ReactionData.builder()
.count(1)
.me(false)
.emoji(EmojiData.builder().id("3").build())
.build()
))
.build();
.addAllReactions(Arrays.asList(
ReactionData.builder()
.count(1)
.me(false)
.meBurst(false)
.countDetails(ReactionCountDetailsData.builder().normal(1).burst(0).build())
.burstColors(Collections.emptyList())
.emoji(EmojiData.builder().id("2").build())
.build(),
ReactionData.builder()
.count(1)
.countDetails(ReactionCountDetailsData.builder().normal(1).burst(0).build())
.me(false)
.meBurst(false)
.burstColors(Collections.emptyList())
.emoji(EmojiData.builder().id("3").build())
.build()
))
.build();
assertTrue(withThreeReactions.reactions()
.toOptional()
.map(list -> list.size() == 3)
.orElse(false));
.toOptional()
.map(list -> list.size() == 3)
.orElse(false));
MessageData withTwoReactions = MessageData.builder().from(withReaction)
.reactions(Arrays.asList(
ReactionData.builder()
.count(1)
.me(false)
.emoji(EmojiData.builder().id("2").build())
.build(),
ReactionData.builder()
.count(1)
.me(false)
.emoji(EmojiData.builder().id("3").build())
.build()
))
.build();
.reactions(Arrays.asList(
ReactionData.builder()
.count(1)
.me(false)
.meBurst(false)
.countDetails(ReactionCountDetailsData.builder().normal(0).burst(1).build())
.burstColors(Arrays.asList("#9be07d", "#45a065"))
.emoji(EmojiData.builder().id("2").build())
.build(),
ReactionData.builder()
.count(1)
.me(false)
.meBurst(false)
.countDetails(ReactionCountDetailsData.builder().normal(0).burst(1).build())
.burstColors(Collections.singletonList("#9be07d"))
.emoji(EmojiData.builder().id("3").build())
.build()
))
.build();
assertTrue(withTwoReactions.reactions()
.toOptional()
.map(list -> list.size() == 2)
.orElse(false));
.toOptional()
.map(list -> list.size() == 2)
.orElse(false));
}

@Test
Expand All @@ -143,7 +159,8 @@ public void testGetGuildPreview() throws IOException {
@Test
public void testGetGuildIntegrations() throws IOException {
List<IntegrationData> list = read("/rest/v8/GuildIntegrations.json",
new TypeReference<List<IntegrationData>>() {});
new TypeReference<List<IntegrationData>>() {
});
assertEquals(list.get(0).account().name(), "Reacton");
}

Expand Down

0 comments on commit 1df1663

Please sign in to comment.