Skip to content

Added integration tests #95

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
May 22, 2024
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
6 changes: 6 additions & 0 deletions .github/workflows/pre-commit.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@ on:
jobs:
pre-commit:
runs-on: ubuntu-latest

environment:
name: Tests

steps:
- uses: actions/checkout@v3

Expand All @@ -19,4 +23,6 @@ jobs:
gradle-version: 8.7

- name: Build with Gradle
env:
BOT_TOKEN: ${{ secrets.BOT_TOKEN }}
run: gradle build
1 change: 1 addition & 0 deletions api/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ dependencies {
implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.17.1'

testImplementation project(":core")
testImplementation project(":annotations")
testImplementation "io.gatehill.imposter:distro-embedded:3.38.2"
testImplementation "io.gatehill.imposter:imposter-server:3.38.2"
testImplementation "io.gatehill.imposter:config-dynamic:3.38.2"
Expand Down
28 changes: 14 additions & 14 deletions api/src/main/java/com/javadiscord/jdi/core/api/GuildRequest.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,10 @@ public AsyncResponse<Void> addGuildMemberRole(long userId, long roleId) {
Void.class, new AddGuildMemberRoleRequest(guildId, userId, roleId));
}

public AsyncResponse<List<Member>> beginGuildPrune(
public AsyncResponse<List<GuildMember>> beginGuildPrune(
int days, boolean computePruneCount, List<Long> includeRoles) {
return responseParser.callAndParseList(
Member.class,
GuildMember.class,
new BeginGuildPruneRequest(guildId, days, computePruneCount, includeRoles));
}

Expand Down Expand Up @@ -86,9 +86,9 @@ public AsyncResponse<Invite> guildInvites() {
return responseParser.callAndParse(Invite.class, new GetGuildInvitesRequest(guildId));
}

public AsyncResponse<Member> guildMember(long userId) {
public AsyncResponse<GuildMember> guildMember(long userId) {
return responseParser.callAndParse(
Member.class, new GetGuildMemberRequest(guildId, userId));
GuildMember.class, new GetGuildMemberRequest(guildId, userId));
}

public AsyncResponse<Onboarding> guildOnboarding() {
Expand Down Expand Up @@ -144,12 +144,12 @@ public AsyncResponse<List<Channel>> listActiveGuildThreads() {
Channel.class, new ListActiveGuildThreadsRequest(guildId));
}

public AsyncResponse<List<Member>> listGuildMembers(ListGuildMembersBuilder builder) {
return responseParser.callAndParseList(Member.class, builder.guildId(guildId).build());
public AsyncResponse<List<GuildMember>> listGuildMembers(ListGuildMembersBuilder builder) {
return responseParser.callAndParseList(GuildMember.class, builder.guildId(guildId).build());
}

public AsyncResponse<Member> modifyCurrentMember(ModifyCurrentMemberBuilder builder) {
return responseParser.callAndParse(Member.class, builder.guildId(guildId).build());
public AsyncResponse<GuildMember> modifyCurrentMember(ModifyCurrentMemberBuilder builder) {
return responseParser.callAndParse(GuildMember.class, builder.guildId(guildId).build());
}

@Deprecated
Expand All @@ -173,8 +173,8 @@ public AsyncResponse<MFALevel> modifyGuildMFALevel(MFALevel level) {
MFALevel.class, new ModifyGuildMFALevelRequest(guildId, level));
}

public AsyncResponse<Member> modifyGuildMember(ModifyGuildMemberBuilder builder) {
return responseParser.callAndParse(Member.class, builder.guildId(guildId).build());
public AsyncResponse<GuildMember> modifyGuildMember(ModifyGuildMemberBuilder builder) {
return responseParser.callAndParse(GuildMember.class, builder.guildId(guildId).build());
}

public AsyncResponse<Onboarding> modifyGuildOnboarding(
Expand Down Expand Up @@ -219,12 +219,12 @@ public AsyncResponse<Guild> removeGuildBan(long userId) {
return responseParser.callAndParse(Guild.class, new RemoveGuildBanRequest(guildId, userId));
}

public AsyncResponse<Member> removeGuildMemberRole(long userId, long roleId) {
public AsyncResponse<GuildMember> removeGuildMemberRole(long userId, long roleId) {
return responseParser.callAndParse(
Member.class, new RemoveGuildMemberRoleRequest(guildId, userId, roleId));
GuildMember.class, new RemoveGuildMemberRoleRequest(guildId, userId, roleId));
}

public AsyncResponse<List<Member>> searchGuildMembers(SearchGuildMembersBuilder builder) {
return responseParser.callAndParseList(Member.class, builder.guildId(guildId).build());
public AsyncResponse<List<GuildMember>> searchGuildMembers(SearchGuildMembersBuilder builder) {
return responseParser.callAndParseList(GuildMember.class, builder.guildId(guildId).build());
}
}
11 changes: 7 additions & 4 deletions api/src/main/java/com/javadiscord/jdi/core/api/UserRequest.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.javadiscord.jdi.core.api.builders.GetCurrentUserGuildsBuilder;
import com.javadiscord.jdi.core.api.builders.ModifyCurrentUserBuilder;
import com.javadiscord.jdi.core.api.builders.UpdateCurrentUserApplicationRoleConnectionBuilder;
import com.javadiscord.jdi.core.models.channel.Channel;
import com.javadiscord.jdi.core.models.guild.Guild;
import com.javadiscord.jdi.core.models.user.Connection;
import com.javadiscord.jdi.core.models.user.Member;
Expand All @@ -21,12 +22,14 @@ public UserRequest(DiscordResponseParser responseParser, long guildId) {
this.responseParser = responseParser;
}

public CreateDMRequest createDM(long recipientId) {
return new CreateDMRequest(recipientId);
public AsyncResponse<Channel> createDM(long recipientId) {
return responseParser.callAndParse(Channel.class, new CreateDMRequest(recipientId));
}

public CreateGroupDMRequest createGroupDM(List<String> accessTokens, Map<Long, String> nicks) {
return new CreateGroupDMRequest(accessTokens, nicks);
public AsyncResponse<Channel> createGroupDM(
List<String> accessTokens, Map<Long, String> nicks) {
return responseParser.callAndParse(
Channel.class, new CreateGroupDMRequest(accessTokens, nicks));
}

public AsyncResponse<Connection> getCurrentUserApplicationRoleConnection(long applicationId) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.javadiscord.jdi.core.api.builders;

import com.javadiscord.jdi.core.models.guild.EntityMetadata;
import com.javadiscord.jdi.core.models.guild.PrivacyLevel;
import com.javadiscord.jdi.core.models.scheduled_event.ScheduledEntityType;
import com.javadiscord.jdi.internal.api.guild_scheduled_event.CreateScheduledEventRequest;

import java.time.OffsetDateTime;
Expand All @@ -10,7 +10,7 @@
public class CreateScheduledEventBuilder {
private long guildId;
private final String name;
private final int entityType;
private final ScheduledEntityType entityType;
private final int privacyLevel;
private final OffsetDateTime scheduledStartTime;

Expand All @@ -21,13 +21,10 @@ public class CreateScheduledEventBuilder {
private Optional<String> image;

public CreateScheduledEventBuilder(
String name,
int entityType,
PrivacyLevel privacyLevel,
OffsetDateTime scheduledStartTime) {
String name, ScheduledEntityType entityType, OffsetDateTime scheduledStartTime) {
this.name = name;
this.entityType = entityType;
this.privacyLevel = privacyLevel.ordinal();
this.privacyLevel = 2;
this.scheduledStartTime = scheduledStartTime;
this.channelId = Optional.empty();
this.entityMetadata = Optional.empty();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,10 @@

public class ModifyCurrentUserBuilder {
private final String username;
private final String type;
private Optional<String> avatarImage;

public ModifyCurrentUserBuilder(String username, String type) {
public ModifyCurrentUserBuilder(String username) {
this.username = username;
this.type = type;
this.avatarImage = Optional.empty();
}

Expand All @@ -21,6 +19,6 @@ public ModifyCurrentUserBuilder avatarImage(String avatarImage) {
}

public ModifyCurrentUserRequest build() {
return new ModifyCurrentUserRequest(username, avatarImage, type);
return new ModifyCurrentUserRequest(username, avatarImage);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.json.JsonMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.github.mizosoft.methanol.MultipartBodyPublisher;

import java.net.URLEncoder;
Expand All @@ -11,7 +13,8 @@
import java.util.Map;

public class DiscordRequestBuilder {
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
private static final ObjectMapper OBJECT_MAPPER =
JsonMapper.builder().addModule(new JavaTimeModule()).build();
private final DiscordResponseFuture future = new DiscordResponseFuture();
private final Map<String, Object> headers = new HashMap<>();
private final Map<String, Object> queryParameters = new HashMap<>();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@

import com.fasterxml.jackson.annotation.JsonFormat;
import com.javadiscord.jdi.core.models.guild.EntityMetadata;
import com.javadiscord.jdi.core.models.scheduled_event.ScheduledEntityType;
import com.javadiscord.jdi.internal.api.DiscordRequest;
import com.javadiscord.jdi.internal.api.DiscordRequestBuilder;

import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
Expand All @@ -21,7 +23,7 @@ public record CreateScheduledEventRequest(
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ssX")
Optional<OffsetDateTime> scheduledEndTime,
Optional<String> description,
int entityType,
ScheduledEntityType entityType,
Optional<String> image)
implements DiscordRequest {

Expand All @@ -32,10 +34,16 @@ public DiscordRequestBuilder create() {
entityMetadata.ifPresent(val -> body.put("entity_metadata", val));
body.put("name", name);
body.put("privacy_level", privacyLevel);
body.put("scheduled_start_time", scheduledStartTime);
scheduledEndTime.ifPresent(val -> body.put("scheduled_end_time", val));
body.put(
"scheduled_start_time",
scheduledStartTime.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME));
scheduledEndTime.ifPresent(
val ->
body.put(
"scheduled_end_time",
val.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME)));
description.ifPresent(val -> body.put("description", val));
body.put("entity_type", entityType);
body.put("entity_type", entityType.ordinal() + 1);
image.ifPresent(val -> body.put("image", val));
return new DiscordRequestBuilder()
.post()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,12 @@
import java.util.Map;
import java.util.Optional;

public record ModifyCurrentUserRequest(String username, Optional<String> avatarImage, String type)
public record ModifyCurrentUserRequest(String username, Optional<String> avatarImage)
implements DiscordRequest {
@Override
public DiscordRequestBuilder create() {
Map<String, Object> payload = new HashMap<>();
payload.put("username", username);
payload.put("type", type);
avatarImage.ifPresent(val -> payload.put("avatar", "%s".formatted(val)));

return new DiscordRequestBuilder().path("/users/@me").patch().body(payload);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package com.javadiscord.jdi.core.api;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;

import com.javadiscord.jdi.core.Guild;
import com.javadiscord.jdi.core.api.builders.GetInviteBuilder;
import com.javadiscord.jdi.core.models.invite.Invite;

import helpers.LiveDiscordHelper;

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;

@Disabled
class InviteRequestTest {
private static Guild guild;

@BeforeAll
public static void setup() throws InterruptedException {
guild = new LiveDiscordHelper().getGuild();
}

@Test
void testGetInvite() throws InterruptedException {
String testInviteCode = "P4zBwyPuwC";
CountDownLatch latch = new CountDownLatch(1);
AsyncResponse<Invite> asyncResponse =
guild.invite().getInvite(new GetInviteBuilder(testInviteCode));
asyncResponse.onSuccess(
invite -> {
assertEquals(testInviteCode, invite.code());
latch.countDown();
});
asyncResponse.onError(Assertions::fail);
assertTrue(latch.await(30, TimeUnit.SECONDS));
}

@Test
@Disabled
void testDeleteInvite() throws InterruptedException {
String testInviteCode = "P4zBwyPuwC";
CountDownLatch latch = new CountDownLatch(1);
AsyncResponse<Invite> asyncResponse = guild.invite().deleteInvite(testInviteCode);
asyncResponse.onSuccess(
invite -> {
assertEquals(testInviteCode, invite.code());
latch.countDown();
});
asyncResponse.onError(Assertions::fail);
assertTrue(latch.await(30, TimeUnit.SECONDS));
}
}
Loading
Loading