Skip to content
Closed
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
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
package us.eunoians.mcrpg.event.quest;

import org.bukkit.NamespacedKey;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.EnumSource;
import us.eunoians.mcrpg.quest.impl.QuestInstance;
import us.eunoians.mcrpg.quest.reward.QuestRewardType;
import us.eunoians.mcrpg.quest.reward.RewardGrantContext;

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertSame;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.Mockito.mock;

class QuestRewardGrantEventTest {

@Test
@DisplayName("Getters return values passed to the constructor")
void getters_returnConstructorValues() {
QuestInstance questInstance = mock(QuestInstance.class);
NamespacedKey questKey = new NamespacedKey("mcrpg", "test_quest");
UUID playerUUID = UUID.randomUUID();
List<QuestRewardType> rewards = new ArrayList<>();
rewards.add(mock(QuestRewardType.class));
RewardGrantContext context = RewardGrantContext.INLINE;

QuestRewardGrantEvent event = new QuestRewardGrantEvent(
questInstance, questKey, playerUUID, rewards, context);

assertSame(questInstance, event.getQuestInstance());
assertEquals(questKey, event.getQuestKey());
assertEquals(playerUUID, event.getPlayerUUID());
assertSame(rewards, event.getRewards());
assertEquals(context, event.getContext());
}

@Test
@DisplayName("Null quest instance is returned when not tied to a live instance")
void nullQuestInstance_returnsNull() {
NamespacedKey questKey = new NamespacedKey("mcrpg", "test_quest");
UUID playerUUID = UUID.randomUUID();
List<QuestRewardType> rewards = new ArrayList<>();

QuestRewardGrantEvent event = new QuestRewardGrantEvent(
null, questKey, playerUUID, rewards, RewardGrantContext.PENDING);

assertNull(event.getQuestInstance());
}

@Test
@DisplayName("Event defaults to not cancelled")
void event_defaultsNotCancelled() {
NamespacedKey questKey = new NamespacedKey("mcrpg", "test_quest");
UUID playerUUID = UUID.randomUUID();
List<QuestRewardType> rewards = new ArrayList<>();

QuestRewardGrantEvent event = new QuestRewardGrantEvent(
null, questKey, playerUUID, rewards, RewardGrantContext.INLINE);

assertFalse(event.isCancelled());
}

@Test
@DisplayName("setCancelled toggles cancellation state")
void setCancelled_togglesState() {
NamespacedKey questKey = new NamespacedKey("mcrpg", "test_quest");
UUID playerUUID = UUID.randomUUID();
List<QuestRewardType> rewards = new ArrayList<>();

QuestRewardGrantEvent event = new QuestRewardGrantEvent(
null, questKey, playerUUID, rewards, RewardGrantContext.INLINE);

event.setCancelled(true);
assertTrue(event.isCancelled());

event.setCancelled(false);
assertFalse(event.isCancelled());
}

@Test
@DisplayName("Reward list is mutable — listeners can add entries")
void rewardList_isMutable() {
NamespacedKey questKey = new NamespacedKey("mcrpg", "test_quest");
UUID playerUUID = UUID.randomUUID();
List<QuestRewardType> rewards = new ArrayList<>();

QuestRewardGrantEvent event = new QuestRewardGrantEvent(
null, questKey, playerUUID, rewards, RewardGrantContext.INLINE);

QuestRewardType mockReward = mock(QuestRewardType.class);
event.getRewards().add(mockReward);

assertEquals(1, event.getRewards().size());
assertSame(mockReward, event.getRewards().getFirst());
}

@Test
@DisplayName("Reward list is mutable — listeners can remove entries")
void rewardList_canRemoveEntries() {
NamespacedKey questKey = new NamespacedKey("mcrpg", "test_quest");
UUID playerUUID = UUID.randomUUID();
QuestRewardType mockReward = mock(QuestRewardType.class);
List<QuestRewardType> rewards = new ArrayList<>(List.of(mockReward));

QuestRewardGrantEvent event = new QuestRewardGrantEvent(
null, questKey, playerUUID, rewards, RewardGrantContext.DISTRIBUTION);

event.getRewards().clear();

assertTrue(event.getRewards().isEmpty());
}

@ParameterizedTest
@EnumSource(RewardGrantContext.class)
@DisplayName("Each RewardGrantContext is correctly stored and returned")
void context_allValues_returnedCorrectly(RewardGrantContext context) {
NamespacedKey questKey = new NamespacedKey("mcrpg", "test_quest");
UUID playerUUID = UUID.randomUUID();
List<QuestRewardType> rewards = new ArrayList<>();

QuestRewardGrantEvent event = new QuestRewardGrantEvent(
null, questKey, playerUUID, rewards, context);

assertEquals(context, event.getContext());
}

@Test
@DisplayName("getHandlers and getHandlerList return the same HandlerList")
void handlers_returnStaticHandlerList() {
NamespacedKey questKey = new NamespacedKey("mcrpg", "test_quest");
UUID playerUUID = UUID.randomUUID();
List<QuestRewardType> rewards = new ArrayList<>();

QuestRewardGrantEvent event = new QuestRewardGrantEvent(
null, questKey, playerUUID, rewards, RewardGrantContext.INLINE);

assertSame(QuestRewardGrantEvent.getHandlerList(), event.getHandlers());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
package us.eunoians.mcrpg.event.quest;

import org.bukkit.NamespacedKey;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.EnumSource;
import us.eunoians.mcrpg.quest.impl.QuestInstance;
import us.eunoians.mcrpg.quest.reward.QuestRewardType;
import us.eunoians.mcrpg.quest.reward.RewardGrantContext;

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertSame;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.Mockito.mock;

class QuestRewardGrantedEventTest {

@Test
@DisplayName("Getters return values passed to the constructor")
void getters_returnConstructorValues() {
QuestInstance questInstance = mock(QuestInstance.class);
NamespacedKey questKey = new NamespacedKey("mcrpg", "test_quest");
UUID playerUUID = UUID.randomUUID();
QuestRewardType mockReward = mock(QuestRewardType.class);
List<QuestRewardType> rewards = List.of(mockReward);
RewardGrantContext context = RewardGrantContext.INLINE;

QuestRewardGrantedEvent event = new QuestRewardGrantedEvent(
questInstance, questKey, playerUUID, rewards, context);

assertSame(questInstance, event.getQuestInstance());
assertEquals(questKey, event.getQuestKey());
assertEquals(playerUUID, event.getPlayerUUID());
assertEquals(1, event.getGrantedRewards().size());
assertSame(mockReward, event.getGrantedRewards().getFirst());
assertEquals(context, event.getContext());
}

@Test
@DisplayName("Null quest instance is returned when not tied to a live instance")
void nullQuestInstance_returnsNull() {
NamespacedKey questKey = new NamespacedKey("mcrpg", "test_quest");
UUID playerUUID = UUID.randomUUID();
List<QuestRewardType> rewards = new ArrayList<>();

QuestRewardGrantedEvent event = new QuestRewardGrantedEvent(
null, questKey, playerUUID, rewards, RewardGrantContext.PENDING);

assertNull(event.getQuestInstance());
}

@Test
@DisplayName("Granted rewards list is immutable (List.copyOf)")
void grantedRewards_isImmutable() {
NamespacedKey questKey = new NamespacedKey("mcrpg", "test_quest");
UUID playerUUID = UUID.randomUUID();
QuestRewardType mockReward = mock(QuestRewardType.class);
List<QuestRewardType> rewards = new ArrayList<>(List.of(mockReward));

QuestRewardGrantedEvent event = new QuestRewardGrantedEvent(
null, questKey, playerUUID, rewards, RewardGrantContext.INLINE);

assertThrows(UnsupportedOperationException.class,
() -> event.getGrantedRewards().add(mock(QuestRewardType.class)));
}

@Test
@DisplayName("Modifying the source list after construction does not affect the event")
void grantedRewards_defensiveCopy() {
NamespacedKey questKey = new NamespacedKey("mcrpg", "test_quest");
UUID playerUUID = UUID.randomUUID();
QuestRewardType mockReward = mock(QuestRewardType.class);
List<QuestRewardType> rewards = new ArrayList<>(List.of(mockReward));

QuestRewardGrantedEvent event = new QuestRewardGrantedEvent(
null, questKey, playerUUID, rewards, RewardGrantContext.DISTRIBUTION);

rewards.clear();

assertEquals(1, event.getGrantedRewards().size());
assertSame(mockReward, event.getGrantedRewards().getFirst());
}

@ParameterizedTest
@EnumSource(RewardGrantContext.class)
@DisplayName("Each RewardGrantContext is correctly stored and returned")
void context_allValues_returnedCorrectly(RewardGrantContext context) {
NamespacedKey questKey = new NamespacedKey("mcrpg", "test_quest");
UUID playerUUID = UUID.randomUUID();
List<QuestRewardType> rewards = new ArrayList<>();

QuestRewardGrantedEvent event = new QuestRewardGrantedEvent(
null, questKey, playerUUID, rewards, context);

assertEquals(context, event.getContext());
}

@Test
@DisplayName("getHandlers and getHandlerList return the same HandlerList")
void handlers_returnStaticHandlerList() {
NamespacedKey questKey = new NamespacedKey("mcrpg", "test_quest");
UUID playerUUID = UUID.randomUUID();
List<QuestRewardType> rewards = new ArrayList<>();

QuestRewardGrantedEvent event = new QuestRewardGrantedEvent(
null, questKey, playerUUID, rewards, RewardGrantContext.INLINE);

assertSame(QuestRewardGrantedEvent.getHandlerList(), event.getHandlers());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package us.eunoians.mcrpg.event.quest.chain;

import org.bukkit.NamespacedKey;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.mockbukkit.mockbukkit.entity.PlayerMock;
import us.eunoians.mcrpg.McRPGBaseTest;
import us.eunoians.mcrpg.quest.chain.QuestChainDefinition;
import us.eunoians.mcrpg.quest.chain.QuestChainStep;

import java.util.List;
import java.util.UUID;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertSame;

class QuestChainAbandonEventTest extends McRPGBaseTest {

private static QuestChainDefinition buildDefinition() {
NamespacedKey chainKey = new NamespacedKey("mcrpg", "test_chain");
NamespacedKey sourceKey = new NamespacedKey("mcrpg", "manual");
NamespacedKey triggerKey = new NamespacedKey("mcrpg", "manual");
List<QuestChainStep> steps = List.of(QuestChainStep.simple(new NamespacedKey("mcrpg", "quest_one")));
return new QuestChainDefinition.Builder(chainKey, sourceKey, triggerKey, steps).build();
}

@Test
@DisplayName("Getters return values passed to the constructor")
void getters_returnConstructorValues() {
QuestChainDefinition definition = buildDefinition();
PlayerMock player = server.addPlayer();

QuestChainAbandonEvent event = new QuestChainAbandonEvent(definition, player, player.getUniqueId());

assertSame(definition, event.getChainDefinition());
assertSame(player, event.getPlayer());
assertEquals(player.getUniqueId(), event.getPlayerUUID());
}

@Test
@DisplayName("Null player is returned when constructed with offline player")
void nullPlayer_returnsNull() {
QuestChainDefinition definition = buildDefinition();
UUID offlineUUID = UUID.randomUUID();

QuestChainAbandonEvent event = new QuestChainAbandonEvent(definition, null, offlineUUID);

assertNull(event.getPlayer());
assertEquals(offlineUUID, event.getPlayerUUID());
}

@Test
@DisplayName("getHandlers and getHandlerList return the same HandlerList")
void handlers_returnStaticHandlerList() {
QuestChainDefinition definition = buildDefinition();
PlayerMock player = server.addPlayer();

QuestChainAbandonEvent event = new QuestChainAbandonEvent(definition, player, player.getUniqueId());

assertSame(QuestChainAbandonEvent.getHandlerList(), event.getHandlers());
}
}
Loading
Loading