Skip to content

Commit

Permalink
Improve slot replacement handling
Browse files Browse the repository at this point in the history
  • Loading branch information
Alf-Melmac committed Jun 12, 2023
1 parent f0c8687 commit 06cc9d1
Show file tree
Hide file tree
Showing 6 changed files with 60 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
import de.webalf.slotbot.util.DateUtils;
import de.webalf.slotbot.util.DiscordMarkdown;
import de.webalf.slotbot.util.LongUtils;
import de.webalf.slotbot.util.StringUtils;
import de.webalf.slotbot.util.permissions.PermissionHelper;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
Expand Down Expand Up @@ -85,10 +84,7 @@ private EventDetailsSlotDto toEventDetailsSlotDto(@NonNull Slot slot) {
boolean blocked = false;
if (user != null) {
if (user.isDefaultUser()) {
text = slot.getReplacementText();
if (StringUtils.isEmpty(text)) {
text = "Gesperrt";
}
text = slot.getReplacementTextOrDefault();
blocked = true;
} else {
text = discordApiService.getName(LongUtils.toString(user.getId()), slot.getSquad().getEvent().getOwnerGuild().getId());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import de.webalf.slotbot.service.GuildService;
import de.webalf.slotbot.service.UserService;
import de.webalf.slotbot.util.GuildUtils;
import de.webalf.slotbot.util.StringUtils;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
Expand All @@ -29,12 +30,14 @@ private Slot fromDto(MinimalSlotDto slotDto) {
return null;
}

final boolean blocked = slotDto.isBlocked();
final String replacementText = slotDto.getReplacementText();
return Slot.builder()
.name(slotDto.getName().trim())
.number(slotDto.getNumber())
.reservedFor(guildService.evaluateReservedFor(slotDto.getReservedFor()))
.user(slotDto.isBlocked() ? userService.getDefaultUser() : null)
.replacementText(slotDto.isBlocked() ? slotDto.getReplacementText() : null)
.user(blocked ? userService.getDefaultUser() : null)
.replacementText(blocked && StringUtils.isNotEmpty(replacementText) ? replacementText.trim() : null)
.build();
}

Expand Down
13 changes: 13 additions & 0 deletions src/main/java/de/webalf/slotbot/model/Slot.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.fasterxml.jackson.annotation.JsonBackReference;
import de.webalf.slotbot.exception.BusinessRuntimeException;
import de.webalf.slotbot.util.SlotUtils;
import de.webalf.slotbot.util.StringUtils;
import jakarta.persistence.*;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;
Expand Down Expand Up @@ -102,6 +103,18 @@ public Guild getEffectiveReservedForDisplay() {
return SlotUtils.getEffectiveReservedForDisplay(getReservedFor(), getSquad());
}

/**
* Returns the replacement text for this slot if it is blocked
*
* @return replacement text or null if not blocked
*/
public String getReplacementTextOrDefault() {
if (!isBlocked()) {
return null;
}
return StringUtils.isEmpty(replacementText) ? "Gesperrt" : replacementText;
}

// Setter

/**
Expand Down
7 changes: 3 additions & 4 deletions src/main/java/de/webalf/slotbot/service/SlotService.java
Original file line number Diff line number Diff line change
Expand Up @@ -94,9 +94,11 @@ private Slot updateOrCreateSlot(@NonNull MinimalSlotIdDto dto, @NonNull Squad sq
DtoUtils.ifPresent(dto.getNumber(), slot::setNumber);
slot.setReservedFor(guildService.evaluateReservedFor(dto.getReservedFor()));
if (dto.isBlocked()) {
blockSlot(slot, dto.getReplacementText());
final String replacementText = dto.getReplacementText();
blockSlot(slot, StringUtils.isNotEmpty(replacementText) ? replacementText.trim() : null);
} else if (slot.isBlocked()) {
slot.setUser(null);
slot.setReplacementText(null);
}

return slot;
Expand Down Expand Up @@ -156,9 +158,6 @@ void deleteSlot(@NonNull Slot slot) {
* @param replacementText to be shown instead the user
*/
void blockSlot(@NonNull Slot slot, String replacementText) {
if (StringUtils.isEmpty(replacementText)) {
replacementText = "Gesperrt";
}
slot.blockSlot(userService.find(User.DEFAULT_USER_ID), replacementText);
}

Expand Down
6 changes: 3 additions & 3 deletions src/main/java/de/webalf/slotbot/util/EventHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ public List<String> buildSlotList(@NonNull Event event, long guildId, @NonNull L
* @param guildId to prepare slotlist for
* @return squad in discord message format
*/
private StringBuilder toSlotList(Squad squad, long guildId) {
private StringBuilder toSlotList(@NonNull Squad squad, long guildId) {
StringBuilder squadText = new StringBuilder("**").append(squad.getName());
final Guild reservedFor = squad.getReservedFor();
if (reservedFor != null) {
Expand All @@ -164,7 +164,7 @@ private StringBuilder toSlotList(Squad squad, long guildId) {
* @param squadSlots all slots of the squad containing this slot
* @return slot in discord message format
*/
private StringBuilder toSlotList(Slot slot, long guildId, Guild squadReservedFor, List<Slot> squadSlots) {
private StringBuilder toSlotList(@NonNull Slot slot, long guildId, Guild squadReservedFor, List<Slot> squadSlots) {
StringBuilder slotText = new StringBuilder();

boolean notReservedForOthers;
Expand Down Expand Up @@ -196,7 +196,7 @@ private StringBuilder toSlotList(Slot slot, long guildId, Guild squadReservedFor
if (!isEmpty && !isBlocked) {
slotText.append(" ").append(MentionUtils.getUserAsMention(slot.getUser().getId()));
} else if (isBlocked) {
slotText.append(" *").append(slot.getReplacementText()).append("*");
slotText.append(" *").append(slot.getReplacementTextOrDefault()).append("*");
}
return slotText;
}
Expand Down
36 changes: 35 additions & 1 deletion src/test/java/de/webalf/slotbot/model/SlotTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -58,11 +58,22 @@ void isBlockedDetectsOccupiedSlot() {

@Test
void isBlockedDetectsBlockedSlot() {
final Slot sut = Slot.builder().user(User.builder().id(User.DEFAULT_USER_ID).build()).build();
final Slot sut = buildBlockedSlot();

assertTrue(sut.isBlocked());
}

private static Slot buildBlockedSlot() {
return buildBlockedSlot(null);
}

private static Slot buildBlockedSlot(String replacementText) {
return Slot.builder()
.user(User.builder().id(User.DEFAULT_USER_ID).build())
.replacementText(replacementText)
.build();
}

//getEffectiveReservedForDisplay
@Test
void reservedForDisplayWithNoReservation() {
Expand Down Expand Up @@ -141,6 +152,29 @@ private Slot prepareSlot(Slot slot, Squad squad, Slot... otherSlots) {
return slot;
}

//getReplacementTextOrDefault
@Test
void getReplacementTextOrDefaultWithNotBlockedSlot() {
final Slot sut = Slot.builder().build();

assertNull(sut.getReplacementTextOrDefault());
}

@Test
void getReplacementTextOrDefaultWithoutReplacementText() {
final Slot sut = buildBlockedSlot();

assertEquals("Gesperrt", sut.getReplacementTextOrDefault());
}

@Test
void getReplacementTextOrDefaultWithReplacementText() {
final String replacementText = "replacementText";
final Slot sut = buildBlockedSlot(replacementText);

assertEquals(replacementText, sut.getReplacementTextOrDefault());
}

//slotWithoutUpdate
@Test
void slotPreventsSlottingOnSameSlot() {
Expand Down

0 comments on commit 06cc9d1

Please sign in to comment.