98 lines
3.7 KiB
Java
98 lines
3.7 KiB
Java
package games.dmg.spigottyrant;
|
|
|
|
import static org.mockito.Mockito.doReturn;
|
|
import static org.mockito.Mockito.mock;
|
|
import static org.mockito.Mockito.verify;
|
|
import static org.mockito.Mockito.when;
|
|
|
|
import java.time.Duration;
|
|
import java.time.Instant;
|
|
import java.util.Map;
|
|
import java.util.Optional;
|
|
import java.util.Set;
|
|
import java.util.UUID;
|
|
import org.bukkit.ChatColor;
|
|
import org.bukkit.Location;
|
|
import org.bukkit.Server;
|
|
import org.bukkit.World;
|
|
import org.bukkit.entity.Player;
|
|
import org.bukkit.scoreboard.Scoreboard;
|
|
import org.bukkit.scoreboard.ScoreboardManager;
|
|
import org.bukkit.scoreboard.Team;
|
|
import org.junit.jupiter.api.Test;
|
|
|
|
final class OptOutGlowControllerTest {
|
|
private static final UUID TYRANT = UUID.fromString(
|
|
"11111111-1111-1111-1111-111111111111"
|
|
);
|
|
private static final UUID OUT = UUID.fromString(
|
|
"22222222-2222-2222-2222-222222222222"
|
|
);
|
|
|
|
@Test
|
|
void appliesGreenGlowAndRestoresPreviousTeamAfterLeavingRange() {
|
|
TyrantStateManager stateManager = mock(TyrantStateManager.class);
|
|
Server server = mock(Server.class);
|
|
PluginSettings settings = mock(PluginSettings.class);
|
|
ScoreboardManager manager = mock(ScoreboardManager.class);
|
|
Scoreboard scoreboard = mock(Scoreboard.class);
|
|
Team green = mock(Team.class);
|
|
Team previous = mock(Team.class);
|
|
Player tyrant = player(TYRANT, "Tyrant");
|
|
Player optedOut = player(OUT, "Out");
|
|
World world = mock(World.class);
|
|
Location tyrantLocation = mock(Location.class);
|
|
Location outLocation = mock(Location.class);
|
|
when(server.getScoreboardManager()).thenReturn(manager);
|
|
when(manager.getMainScoreboard()).thenReturn(scoreboard);
|
|
when(scoreboard.getTeam("tyrant-optout")).thenReturn(null);
|
|
when(scoreboard.registerNewTeam("tyrant-optout")).thenReturn(green);
|
|
when(scoreboard.getEntryTeam("Out")).thenReturn(previous);
|
|
when(server.getPlayer(TYRANT)).thenReturn(tyrant);
|
|
doReturn(Set.of(tyrant, optedOut)).when(server).getOnlinePlayers();
|
|
when(settings.tyrantRangeBlocks()).thenReturn(50.0);
|
|
when(tyrant.getWorld()).thenReturn(world);
|
|
when(optedOut.getWorld()).thenReturn(world);
|
|
when(tyrant.getLocation()).thenReturn(tyrantLocation);
|
|
when(optedOut.getLocation()).thenReturn(outLocation);
|
|
when(outLocation.distanceSquared(tyrantLocation)).thenReturn(25.0, 2601.0);
|
|
when(stateManager.game()).thenReturn(running());
|
|
when(stateManager.players()).thenReturn(Map.of(OUT, optedOut()));
|
|
OptOutGlowController controller = new OptOutGlowController(
|
|
stateManager, server, settings
|
|
);
|
|
|
|
controller.run();
|
|
controller.run();
|
|
|
|
verify(green).setColor(ChatColor.GREEN);
|
|
verify(green).addEntry("Out");
|
|
verify(optedOut).setGlowing(true);
|
|
verify(green).removeEntry("Out");
|
|
verify(previous).addEntry("Out");
|
|
verify(optedOut).setGlowing(false);
|
|
}
|
|
|
|
private static Player player(UUID id, String name) {
|
|
Player player = mock(Player.class);
|
|
when(player.getUniqueId()).thenReturn(id);
|
|
when(player.getName()).thenReturn(name);
|
|
return player;
|
|
}
|
|
|
|
private static PlayerState optedOut() {
|
|
return new PlayerState(
|
|
OUT, "Out", Optional.empty(), Optional.of(Instant.MAX), TyrantClass.NONE,
|
|
Optional.empty(), Map.of(), Set.of(), java.util.List.of()
|
|
);
|
|
}
|
|
|
|
private static GameState running() {
|
|
return new GameState(
|
|
GameLifecycle.RUNNING, Optional.of(TYRANT), Optional.empty(),
|
|
Optional.empty(), Optional.empty(), Optional.empty(), Duration.ZERO,
|
|
0, 0, Set.of()
|
|
);
|
|
}
|
|
}
|