feat(tamer): release mobs after class loss
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
package games.dmg.spigottyrant;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
final class DefaultCapturedMobCustodyReleaseTest {
|
||||
@Test
|
||||
void removesOnlyCustodyThatSpawnedSuccessfully() {
|
||||
UUID playerId = UUID.fromString("33333333-3333-3333-3333-333333333333");
|
||||
CapturedMob released = mob("COW");
|
||||
CapturedMob deferred = mob("SHEEP");
|
||||
PlayerState state = new PlayerState(
|
||||
playerId, "Former", Optional.empty(), Optional.empty(), TyrantClass.NONE,
|
||||
Optional.empty(), Map.of(), java.util.Set.of(), List.of(released, deferred)
|
||||
);
|
||||
CapturedMobSpawner spawner = mock(CapturedMobSpawner.class);
|
||||
Player player = mock(Player.class);
|
||||
when(spawner.spawn(player, released)).thenReturn(true);
|
||||
when(spawner.spawn(player, deferred)).thenReturn(false);
|
||||
DefaultCapturedMobCustodyRelease service = new DefaultCapturedMobCustodyRelease(spawner);
|
||||
|
||||
PlayerState result = service.releaseAll(player, state);
|
||||
|
||||
assertEquals(List.of(deferred), result.capturedMobs());
|
||||
assertEquals(TyrantClass.NONE, result.tyrantClass());
|
||||
}
|
||||
|
||||
private static CapturedMob mob(String type) {
|
||||
return new CapturedMob(type, Map.of(
|
||||
"capture-id", UUID.randomUUID().toString(), "snapshot", "snapshot-" + type
|
||||
));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
package games.dmg.spigottyrant;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import org.bukkit.Server;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
final class FormerTamerReleaseTaskTest {
|
||||
@Test
|
||||
void offlineFormerTamerCustodyRemainsDeferred() {
|
||||
UUID formerId = UUID.fromString("33333333-3333-3333-3333-333333333333");
|
||||
PlayerState former = withMob(PlayerState.newPlayer(formerId, "Former"));
|
||||
TyrantStateManager manager = mock(TyrantStateManager.class);
|
||||
when(manager.players()).thenReturn(Map.of(formerId, former));
|
||||
Server server = mock(Server.class);
|
||||
doReturn(Set.of()).when(server).getOnlinePlayers();
|
||||
CapturedMobCustodyRelease release = mock(CapturedMobCustodyRelease.class);
|
||||
|
||||
new FormerTamerReleaseTask(manager, server, release).run();
|
||||
|
||||
verify(release, never()).releaseAll(any(), any());
|
||||
}
|
||||
|
||||
@Test
|
||||
void releasesCustodyOnlyAfterPlayerLosesTamerClass() {
|
||||
UUID formerId = UUID.fromString("33333333-3333-3333-3333-333333333333");
|
||||
UUID tamerId = UUID.fromString("44444444-4444-4444-4444-444444444444");
|
||||
PlayerState former = withMob(PlayerState.newPlayer(formerId, "Former"));
|
||||
PlayerState tamer = withMob(withClass(
|
||||
PlayerState.newPlayer(tamerId, "Tamer"), TyrantClass.TAMER
|
||||
));
|
||||
TyrantStateManager manager = mock(TyrantStateManager.class);
|
||||
when(manager.players()).thenReturn(Map.of(formerId, former, tamerId, tamer));
|
||||
Player formerPlayer = mock(Player.class);
|
||||
when(formerPlayer.getUniqueId()).thenReturn(formerId);
|
||||
Player tamerPlayer = mock(Player.class);
|
||||
when(tamerPlayer.getUniqueId()).thenReturn(tamerId);
|
||||
Server server = mock(Server.class);
|
||||
doReturn(Set.of(formerPlayer, tamerPlayer)).when(server).getOnlinePlayers();
|
||||
CapturedMobCustodyRelease release = mock(CapturedMobCustodyRelease.class);
|
||||
when(release.releaseAll(formerPlayer, former)).thenReturn(former);
|
||||
FormerTamerReleaseTask task = new FormerTamerReleaseTask(manager, server, release);
|
||||
|
||||
task.run();
|
||||
|
||||
verify(release).releaseAll(formerPlayer, former);
|
||||
verify(release, never()).releaseAll(tamerPlayer, tamer);
|
||||
}
|
||||
|
||||
private static PlayerState withMob(PlayerState player) {
|
||||
CapturedMob mob = new CapturedMob("COW", Map.of(
|
||||
"capture-id", UUID.randomUUID().toString(), "snapshot", "snapshot"
|
||||
));
|
||||
return new PlayerState(
|
||||
player.playerId(), player.latestName(), player.lastLogin(), player.optedOutUntil(),
|
||||
player.tyrantClass(), player.followerOf(), player.cooldownEnds(),
|
||||
player.readyAbilityItems(), java.util.List.of(mob)
|
||||
);
|
||||
}
|
||||
|
||||
private static PlayerState withClass(PlayerState player, TyrantClass tyrantClass) {
|
||||
return new PlayerState(
|
||||
player.playerId(), player.latestName(), player.lastLogin(), player.optedOutUntil(),
|
||||
tyrantClass, player.followerOf(), player.cooldownEnds(),
|
||||
player.readyAbilityItems(), player.capturedMobs()
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user