mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2024-11-24 06:06:45 +01:00
more unit tests
This commit is contained in:
parent
027b79639b
commit
eb8c5bf0e9
@ -5,6 +5,21 @@ import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* Represents a command to be executed on a level up
|
||||
*/
|
||||
public interface LevelUpCommand {
|
||||
void apply(McMMOPlayer player, PrimarySkillType primarySkillType, Set<Integer> levelsGained);
|
||||
/**
|
||||
* Process the command
|
||||
*
|
||||
* @param player the player
|
||||
* @param primarySkillType the skill type
|
||||
* @param levelsGained the levels gained
|
||||
*/
|
||||
void process(McMMOPlayer player, PrimarySkillType primarySkillType, Set<Integer> levelsGained);
|
||||
|
||||
/**
|
||||
* Execute the command
|
||||
*/
|
||||
void executeCommand();
|
||||
}
|
||||
|
@ -26,7 +26,7 @@ public class LevelUpCommandImpl implements LevelUpCommand {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void apply(McMMOPlayer player, PrimarySkillType primarySkillType, Set<Integer> levelsGained) {
|
||||
public void process(McMMOPlayer player, PrimarySkillType primarySkillType, Set<Integer> levelsGained) {
|
||||
if(!skills.contains(primarySkillType)) {
|
||||
return;
|
||||
}
|
||||
@ -39,11 +39,15 @@ public class LevelUpCommandImpl implements LevelUpCommand {
|
||||
} else {
|
||||
LogUtils.debug(mcMMO.p.getLogger(), "Executing command: " + commandStr);
|
||||
}
|
||||
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), commandStr);
|
||||
executeCommand();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void executeCommand() {
|
||||
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), commandStr);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
|
@ -28,7 +28,7 @@ public class LevelUpCommandManager {
|
||||
}
|
||||
|
||||
for (LevelUpCommand command : commands) {
|
||||
command.apply(mmoPlayer, primarySkillType, levelsGained);
|
||||
command.process(mmoPlayer, primarySkillType, levelsGained);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -62,9 +62,9 @@ public class SelfListener implements Listener {
|
||||
}
|
||||
|
||||
final Set<Integer> levelsAchieved = new LinkedHashSet<>();
|
||||
for(int i = 0; i < event.getLevelsGained(); i++)
|
||||
for(int i = 1; i <= event.getLevelsGained(); i++)
|
||||
{
|
||||
levelsAchieved.add(event.getSkillLevel());
|
||||
levelsAchieved.add(event.getSkillLevel() + i);
|
||||
}
|
||||
plugin.getLevelUpCommandManager().apply(mcMMOPlayer, skill, levelsAchieved);
|
||||
}
|
||||
|
@ -2,21 +2,15 @@ package com.gmail.nossr50.commands.levelup;
|
||||
|
||||
import com.gmail.nossr50.MMOTestEnvironmentBasic;
|
||||
import com.gmail.nossr50.datatypes.experience.XPGainReason;
|
||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||
import com.gmail.nossr50.datatypes.player.PlayerProfile;
|
||||
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
||||
import com.gmail.nossr50.events.experience.McMMOPlayerLevelUpEvent;
|
||||
import com.gmail.nossr50.listeners.SelfListener;
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.junit.jupiter.api.AfterEach;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.mockito.MockedStatic;
|
||||
import org.mockito.Mockito;
|
||||
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
@ -35,8 +29,8 @@ class LevelUpCommandTest extends MMOTestEnvironmentBasic {
|
||||
}
|
||||
|
||||
@Test
|
||||
void levelInMiningShouldRunCommand() {
|
||||
// validate command manager has zero registered commands
|
||||
void levelInMiningShouldRunCommandFiveTimes() {
|
||||
// GIVEN level up command for Mining should always execute for Mining level up
|
||||
assert mcMMO.p.getLevelUpCommandManager().isEmpty();
|
||||
final PrimarySkillType skillType = PrimarySkillType.MINING;
|
||||
final Predicate<Integer> predicate = (i) -> true;
|
||||
@ -47,16 +41,66 @@ class LevelUpCommandTest extends MMOTestEnvironmentBasic {
|
||||
true));
|
||||
mcMMO.p.getLevelUpCommandManager().registerCommand(levelUpCommand);
|
||||
|
||||
// GIVEN level up command that should always execute for Mining is registered with command manager
|
||||
int levelsGained = 5;
|
||||
// WHEN player gains 5 levels in mining
|
||||
McMMOPlayerLevelUpEvent event = new McMMOPlayerLevelUpEvent(player, PrimarySkillType.MINING, levelsGained, XPGainReason.PVE);
|
||||
selfListener.onPlayerLevelUp(event);
|
||||
|
||||
// THEN the command should be checked for execution
|
||||
verify(levelUpCommandManager).apply(any(), any(), any());
|
||||
verify(levelUpCommand).process(any(), any(), any());
|
||||
// THEN the command should have executed
|
||||
verify(levelUpCommand, times(levelsGained)).executeCommand();
|
||||
}
|
||||
|
||||
@Test
|
||||
void levelInMiningShouldRunCommandAtLeastOnce() {
|
||||
// GIVEN level up command for Mining should always execute for Mining level up
|
||||
assert mcMMO.p.getLevelUpCommandManager().isEmpty();
|
||||
final PrimarySkillType skillType = PrimarySkillType.MINING;
|
||||
final Predicate<Integer> predicate = (i) -> true;
|
||||
final LevelUpCommand levelUpCommand = spy(new LevelUpCommandImpl(
|
||||
predicate,
|
||||
"say hello",
|
||||
Set.of(skillType),
|
||||
true));
|
||||
mcMMO.p.getLevelUpCommandManager().registerCommand(levelUpCommand);
|
||||
|
||||
int levelsGained = 1;
|
||||
// WHEN player gains 5 levels in mining
|
||||
McMMOPlayerLevelUpEvent event = new McMMOPlayerLevelUpEvent(player, PrimarySkillType.MINING, levelsGained, XPGainReason.PVE);
|
||||
selfListener.onPlayerLevelUp(event);
|
||||
|
||||
// THEN the command should be checked for execution
|
||||
verify(levelUpCommandManager).apply(any(), any(), any());
|
||||
verify(levelUpCommand).process(any(), any(), any());
|
||||
// THEN the command should have executed
|
||||
verify(levelUpCommand).executeCommand();
|
||||
}
|
||||
|
||||
@Test
|
||||
void levelInMiningShouldNotRunCommand() {
|
||||
// GIVEN level up command for Woodcutting should not execute for Mining level up
|
||||
assert mcMMO.p.getLevelUpCommandManager().isEmpty();
|
||||
final PrimarySkillType skillType = PrimarySkillType.WOODCUTTING;
|
||||
final Predicate<Integer> predicate = (i) -> true;
|
||||
final LevelUpCommand levelUpCommand = spy(new LevelUpCommandImpl(
|
||||
predicate,
|
||||
"say hello",
|
||||
Set.of(skillType),
|
||||
true));
|
||||
mcMMO.p.getLevelUpCommandManager().registerCommand(levelUpCommand);
|
||||
|
||||
|
||||
int levelsGained = 5;
|
||||
// WHEN player gains 5 levels in mining
|
||||
McMMOPlayerLevelUpEvent event = new McMMOPlayerLevelUpEvent(player, PrimarySkillType.MINING, levelsGained, XPGainReason.PVE);
|
||||
selfListener.onPlayerLevelUp(event);
|
||||
|
||||
// THEN the command should be run
|
||||
// check the mockito spy for level up command manager for executing the command
|
||||
Mockito.verify(levelUpCommandManager).apply(any(), any(), any());
|
||||
Mockito.verify(levelUpCommand).apply(any(), any(), any());
|
||||
// THEN the command should be checked for execution
|
||||
verify(levelUpCommandManager).apply(any(), any(), any());
|
||||
verify(levelUpCommand).process(any(), any(), any());
|
||||
// THEN the command should not be run
|
||||
verify(levelUpCommand, never()).executeCommand();
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user