more unit tests

This commit is contained in:
nossr50 2023-07-22 10:34:27 -07:00
parent 027b79639b
commit eb8c5bf0e9
5 changed files with 82 additions and 19 deletions

View File

@ -5,6 +5,21 @@ import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
import java.util.Set; import java.util.Set;
/**
* Represents a command to be executed on a level up
*/
public interface LevelUpCommand { 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();
} }

View File

@ -26,7 +26,7 @@ public class LevelUpCommandImpl implements LevelUpCommand {
} }
@Override @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)) { if(!skills.contains(primarySkillType)) {
return; return;
} }
@ -39,11 +39,15 @@ public class LevelUpCommandImpl implements LevelUpCommand {
} else { } else {
LogUtils.debug(mcMMO.p.getLogger(), "Executing command: " + commandStr); LogUtils.debug(mcMMO.p.getLogger(), "Executing command: " + commandStr);
} }
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), commandStr); executeCommand();
} }
} }
} }
public void executeCommand() {
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), commandStr);
}
@Override @Override
public boolean equals(Object o) { public boolean equals(Object o) {
if (this == o) return true; if (this == o) return true;

View File

@ -28,7 +28,7 @@ public class LevelUpCommandManager {
} }
for (LevelUpCommand command : commands) { for (LevelUpCommand command : commands) {
command.apply(mmoPlayer, primarySkillType, levelsGained); command.process(mmoPlayer, primarySkillType, levelsGained);
} }
} }

View File

@ -62,9 +62,9 @@ public class SelfListener implements Listener {
} }
final Set<Integer> levelsAchieved = new LinkedHashSet<>(); 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); plugin.getLevelUpCommandManager().apply(mcMMOPlayer, skill, levelsAchieved);
} }

View File

@ -2,21 +2,15 @@ package com.gmail.nossr50.commands.levelup;
import com.gmail.nossr50.MMOTestEnvironmentBasic; import com.gmail.nossr50.MMOTestEnvironmentBasic;
import com.gmail.nossr50.datatypes.experience.XPGainReason; 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.datatypes.skills.PrimarySkillType;
import com.gmail.nossr50.events.experience.McMMOPlayerLevelUpEvent; import com.gmail.nossr50.events.experience.McMMOPlayerLevelUpEvent;
import com.gmail.nossr50.listeners.SelfListener;
import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.mcMMO;
import org.bukkit.entity.Player;
import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.mockito.MockedStatic;
import org.mockito.Mockito; import org.mockito.Mockito;
import java.util.Set; import java.util.Set;
import java.util.UUID;
import java.util.function.Predicate; import java.util.function.Predicate;
import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.any;
@ -35,8 +29,8 @@ class LevelUpCommandTest extends MMOTestEnvironmentBasic {
} }
@Test @Test
void levelInMiningShouldRunCommand() { void levelInMiningShouldRunCommandFiveTimes() {
// validate command manager has zero registered commands // GIVEN level up command for Mining should always execute for Mining level up
assert mcMMO.p.getLevelUpCommandManager().isEmpty(); assert mcMMO.p.getLevelUpCommandManager().isEmpty();
final PrimarySkillType skillType = PrimarySkillType.MINING; final PrimarySkillType skillType = PrimarySkillType.MINING;
final Predicate<Integer> predicate = (i) -> true; final Predicate<Integer> predicate = (i) -> true;
@ -47,16 +41,66 @@ class LevelUpCommandTest extends MMOTestEnvironmentBasic {
true)); true));
mcMMO.p.getLevelUpCommandManager().registerCommand(levelUpCommand); 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; int levelsGained = 5;
// WHEN player gains 5 levels in mining // WHEN player gains 5 levels in mining
McMMOPlayerLevelUpEvent event = new McMMOPlayerLevelUpEvent(player, PrimarySkillType.MINING, levelsGained, XPGainReason.PVE); McMMOPlayerLevelUpEvent event = new McMMOPlayerLevelUpEvent(player, PrimarySkillType.MINING, levelsGained, XPGainReason.PVE);
selfListener.onPlayerLevelUp(event); selfListener.onPlayerLevelUp(event);
// THEN the command should be run // THEN the command should be checked for execution
// check the mockito spy for level up command manager for executing the command verify(levelUpCommandManager).apply(any(), any(), any());
Mockito.verify(levelUpCommandManager).apply(any(), any(), any()); verify(levelUpCommand).process(any(), any(), any());
Mockito.verify(levelUpCommand).apply(any(), any(), any()); // THEN the command should not be run
verify(levelUpCommand, never()).executeCommand();
} }
} }