Files
purpur-tyrant/src/test/java/games/dmg/spigottyrant/RoleRelinquishmentServiceTest.java
T
dmg 9ed0eed832
Release / release (push) Successful in 2m29s
CI / build (push) Successful in 1m7s
feat(tyrant): add arena boss succession
2026-08-23 17:55:14 -04:00

90 lines
3.8 KiB
Java

package games.dmg.spigottyrant;
import static org.junit.jupiter.api.Assertions.assertEquals;
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.junit.jupiter.api.Test;
final class RoleRelinquishmentServiceTest {
@Test
void vigilanteCanRelinquishAndOpenArenaChallenge() {
UUID tyrant = UUID.fromString("11111111-1111-1111-1111-111111111111");
UUID vigilante = UUID.fromString("22222222-2222-2222-2222-222222222222");
UUID candidate = UUID.fromString("33333333-3333-3333-3333-333333333333");
Instant now = Instant.parse("2026-08-14T12:00:00Z");
TyrantSuccessionService succession = new TyrantSuccessionService();
RoleMaintenanceService maintenance = new RoleMaintenanceService(
succession, Duration.ofHours(48)
);
RoleRelinquishmentService service = new RoleRelinquishmentService(
succession, maintenance
);
GameState game = new GameState(
GameLifecycle.RUNNING, Optional.of(tyrant), Optional.of(vigilante),
Optional.empty(), Optional.empty(), Optional.empty(), Duration.ZERO,
0, 0, Set.of()
);
PlayerState tyrantState = active(tyrant, now);
PlayerState vigilanteState = active(vigilante, now);
PlayerState candidateState = active(candidate, now);
RelinquishmentResult result = service.relinquish(
new PersistentState(game, Map.of(
tyrant, tyrantState, vigilante, vigilanteState, candidate, candidateState
)),
vigilante,
Set.of(tyrant, candidate),
now
);
assertEquals(RelinquishmentStatus.RELINQUISHED, result.status());
assertEquals(Optional.empty(), result.state().game().vigilanteId());
assertEquals(Optional.empty(), result.state().game().pendingVigilante());
}
@Test
void tyrantRelinquishmentOpensTyrantArenaAndClearsReign() {
UUID tyrant = UUID.fromString("11111111-1111-1111-1111-111111111111");
UUID vigilante = UUID.fromString("22222222-2222-2222-2222-222222222222");
Instant now = Instant.parse("2026-08-14T12:00:00Z");
TyrantSuccessionService succession = new TyrantSuccessionService();
RoleRelinquishmentService service = new RoleRelinquishmentService(
succession, new RoleMaintenanceService(succession, Duration.ofHours(48))
);
GameState game = new GameState(
GameLifecycle.RUNNING, Optional.of(tyrant), Optional.of(vigilante),
Optional.empty(), Optional.empty(), Optional.empty(), Duration.ZERO,
4, 0, Set.of(TyrantUnlock.STRENGTH)
);
RelinquishmentResult result = service.relinquish(
new PersistentState(game, Map.of(
tyrant, active(tyrant, now), vigilante, active(vigilante, now)
)),
tyrant,
Set.of(tyrant, vigilante),
now
);
assertEquals(RelinquishmentStatus.RELINQUISHED, result.status());
assertEquals(Optional.empty(), result.state().game().tyrantId());
assertEquals(Optional.empty(), result.state().game().pendingTyrant());
assertEquals(Optional.empty(), result.state().game().vigilanteId());
assertEquals(0, result.state().game().tyrantLevel());
assertEquals(1, result.state().game().unspentChoices());
}
private static PlayerState active(UUID id, Instant now) {
PlayerState player = PlayerState.newPlayer(id, id.toString());
return new PlayerState(
id, player.latestName(), Optional.of(now.minusSeconds(60)), Optional.empty(),
TyrantClass.NONE, Optional.empty(), Map.of(), Set.of(), java.util.List.of()
);
}
}