|
4 | 4 | import net.elytrarace.common.ecs.EntityManager; |
5 | 5 | import net.elytrarace.server.ecs.component.PlayerRefComponent; |
6 | 6 | import net.elytrarace.server.ecs.component.ScoreComponent; |
7 | | -import net.minestom.server.entity.Player; |
| 7 | +import net.minestom.server.coordinate.Pos; |
| 8 | +import net.minestom.testing.Env; |
| 9 | +import net.minestom.testing.EnvTest; |
8 | 10 | import org.junit.jupiter.api.Test; |
9 | 11 |
|
10 | 12 | import java.util.List; |
11 | | -import java.util.UUID; |
12 | 13 |
|
13 | 14 | import static org.assertj.core.api.Assertions.assertThat; |
14 | | -import static org.mockito.Mockito.mock; |
15 | | -import static org.mockito.Mockito.when; |
16 | 15 |
|
17 | 16 | /** |
18 | 17 | * Verifies the ranking / bonus rules used by {@link MinestomEndPhase} before |
19 | 18 | * results are persisted. Keeps the scoring logic testable without standing up |
20 | | - * the Minestom server or the phase lifecycle. |
| 19 | + * the full phase lifecycle. |
21 | 20 | */ |
| 21 | +@EnvTest |
22 | 22 | class MinestomEndPhaseRankingTest { |
23 | 23 |
|
24 | 24 | @Test |
25 | | - void ranksDescendingByTotalAndAppliesStandardBonuses() { |
| 25 | + void ranksDescendingByTotalAndAppliesStandardBonuses(Env env) { |
26 | 26 | EntityManager em = new EntityManager(); |
27 | | - Entity e1 = player(em, "A", 40); |
28 | | - Entity e2 = player(em, "B", 100); |
29 | | - Entity e3 = player(em, "C", 70); |
| 27 | + Entity eA = player(env, em, 40); |
| 28 | + Entity eB = player(env, em, 100); |
| 29 | + Entity eC = player(env, em, 70); |
30 | 30 |
|
31 | 31 | List<Entity> ranked = MinestomEndPhase.rankAndApplyBonuses(em); |
32 | 32 |
|
33 | | - assertThat(ranked).extracting(e -> e.getComponent(PlayerRefComponent.class).getPlayer().getUsername()) |
34 | | - .containsExactly("B", "C", "A"); |
35 | | - assertThat(ranked.get(0).getComponent(ScoreComponent.class).getPositionBonus()).isEqualTo(50); |
36 | | - assertThat(ranked.get(1).getComponent(ScoreComponent.class).getPositionBonus()).isEqualTo(30); |
37 | | - assertThat(ranked.get(2).getComponent(ScoreComponent.class).getPositionBonus()).isEqualTo(20); |
| 33 | + // eB=100 > eC=70 > eA=40 before bonuses — verify ring-point ordering |
| 34 | + assertThat(ranked).extracting(e -> e.getComponent(ScoreComponent.class).getRingPoints()) |
| 35 | + .containsExactly(100, 70, 40); |
| 36 | + assertThat(ranked.get(0).getComponent(ScoreComponent.class).getPositionBonus()).isEqualTo(10); |
| 37 | + assertThat(ranked.get(1).getComponent(ScoreComponent.class).getPositionBonus()).isEqualTo(6); |
| 38 | + assertThat(ranked.get(2).getComponent(ScoreComponent.class).getPositionBonus()).isEqualTo(3); |
38 | 39 | } |
39 | 40 |
|
40 | 41 | @Test |
41 | | - void fourthAndBelowReceiveTheFallbackBonus() { |
| 42 | + void fourthAndBelowReceiveTheFallbackBonus(Env env) { |
42 | 43 | EntityManager em = new EntityManager(); |
43 | 44 | for (int i = 0; i < 5; i++) { |
44 | | - player(em, "P" + i, 100 - i * 10); // distinct totals so ordering is deterministic |
| 45 | + player(env, em, 100 - i * 10); // distinct totals so ordering is deterministic |
45 | 46 | } |
46 | 47 |
|
47 | 48 | List<Entity> ranked = MinestomEndPhase.rankAndApplyBonuses(em); |
48 | 49 |
|
49 | 50 | assertThat(ranked).hasSize(5); |
50 | | - assertThat(ranked.get(3).getComponent(ScoreComponent.class).getPositionBonus()).isEqualTo(10); |
51 | | - assertThat(ranked.get(4).getComponent(ScoreComponent.class).getPositionBonus()).isEqualTo(10); |
| 51 | + assertThat(ranked.get(3).getComponent(ScoreComponent.class).getPositionBonus()).isEqualTo(1); |
| 52 | + assertThat(ranked.get(4).getComponent(ScoreComponent.class).getPositionBonus()).isEqualTo(1); |
52 | 53 | } |
53 | 54 |
|
54 | 55 | @Test |
55 | | - void emptyEntityManagerProducesEmptyRanking() { |
| 56 | + void emptyEntityManagerProducesEmptyRanking(Env env) { |
56 | 57 | assertThat(MinestomEndPhase.rankAndApplyBonuses(new EntityManager())).isEmpty(); |
57 | 58 | } |
58 | 59 |
|
59 | | - private static Entity player(EntityManager em, String username, int ringPoints) { |
60 | | - Player player = mock(Player.class); |
61 | | - UUID id = UUID.randomUUID(); |
62 | | - when(player.getUuid()).thenReturn(id); |
63 | | - when(player.getUsername()).thenReturn(username); |
64 | | - |
| 60 | + private static Entity player(Env env, EntityManager em, int ringPoints) { |
| 61 | + var instance = env.createFlatInstance(); |
| 62 | + var player = env.createPlayer(instance, new Pos(0, 64, 0)); |
65 | 63 | Entity entity = new Entity(); |
66 | | - entity.addComponent(new PlayerRefComponent(id, player)); |
| 64 | + entity.addComponent(new PlayerRefComponent(player.getUuid(), player)); |
67 | 65 | ScoreComponent score = new ScoreComponent(); |
68 | 66 | score.addRingPoints(ringPoints); |
69 | 67 | entity.addComponent(score); |
|
0 commit comments