Description
The server module currently uses the upstream Minestom testing module (net.minestom:testing) for its test harness. The team maintains its own test framework — Cyano (net.onelitefeather:cyano, see OneLiteFeatherNET/Cyano) — which is the preferred replacement, delivered via the Mycelium BOM.
API surface change (minimal):
| Before |
After |
@EnvTest (upstream annotation) |
@ExtendWith(MicrotusExtension.class) |
testImplementation(libs.minecraft.minestom.testing) |
Cyano via Mycelium BOM |
The Env interface (net.minestom.testing.Env) remains the same — test bodies need no logic changes, only the class-level annotation changes.
Affected Files
settings.gradle.kts — version catalog entry minecraft.minestom.testing (line 25); add Cyano + Mycelium BOM entries
server/build.gradle.kts — replace testImplementation(libs.minecraft.minestom.testing) with Cyano dependency
- 15 test files under
server/src/test/ that carry @EnvTest:
net/elytrarace/server/VoyagerServerTest.java
net/elytrarace/server/ecs/GameEntityFactoryTest.java
net/elytrarace/server/ecs/component/HudComponentTest.java
net/elytrarace/server/ecs/system/ElytraPhysicsSystemTest.java
net/elytrarace/server/ecs/system/FireworkBoostSystemTest.java
net/elytrarace/server/ecs/system/OutOfBoundsSystemTest.java
net/elytrarace/server/ecs/system/RingCollisionSystemTest.java
net/elytrarace/server/ecs/system/RingEffectSystemTest.java
net/elytrarace/server/game/GameLoopSystemTest.java
net/elytrarace/server/game/GameOrchestratorTest.java
net/elytrarace/server/perf/EcsGameLoopLoadTest.java
net/elytrarace/server/phase/MinestomEndPhaseRankingTest.java
net/elytrarace/server/player/PlayerServiceTest.java
net/elytrarace/server/scoring/ScoringServiceTest.java
net/elytrarace/server/world/AnvilMapInstanceServiceTest.java
Acceptance Criteria
Technical Details
- Cyano coordinates:
net.onelitefeather:cyano (check Mycelium BOM for the exact version pin)
Env interface stays at net.minestom.testing.Env — no changes to test method signatures or injection points
- The version catalog in this project is defined programmatically in
settings.gradle.kts under dependencyResolutionManagement { versionCatalogs { ... } } — do NOT create gradle/libs.versions.toml
- The existing
aonyx-bom (net.onelitefeather:aonyx-bom:0.7.0) is already declared; check whether the Mycelium BOM is a separate artifact or already transitively included
Dependencies
None — this is a test-scope change only and does not affect production classpath or runtime behavior.
Estimate
S — mechanical find-and-replace across 15 files plus two build files; no logic changes required.
Description
The
servermodule currently uses the upstream Minestom testing module (net.minestom:testing) for its test harness. The team maintains its own test framework — Cyano (net.onelitefeather:cyano, see OneLiteFeatherNET/Cyano) — which is the preferred replacement, delivered via the Mycelium BOM.API surface change (minimal):
@EnvTest(upstream annotation)@ExtendWith(MicrotusExtension.class)testImplementation(libs.minecraft.minestom.testing)The
Envinterface (net.minestom.testing.Env) remains the same — test bodies need no logic changes, only the class-level annotation changes.Affected Files
settings.gradle.kts— version catalog entryminecraft.minestom.testing(line 25); add Cyano + Mycelium BOM entriesserver/build.gradle.kts— replacetestImplementation(libs.minecraft.minestom.testing)with Cyano dependencyserver/src/test/that carry@EnvTest:net/elytrarace/server/VoyagerServerTest.javanet/elytrarace/server/ecs/GameEntityFactoryTest.javanet/elytrarace/server/ecs/component/HudComponentTest.javanet/elytrarace/server/ecs/system/ElytraPhysicsSystemTest.javanet/elytrarace/server/ecs/system/FireworkBoostSystemTest.javanet/elytrarace/server/ecs/system/OutOfBoundsSystemTest.javanet/elytrarace/server/ecs/system/RingCollisionSystemTest.javanet/elytrarace/server/ecs/system/RingEffectSystemTest.javanet/elytrarace/server/game/GameLoopSystemTest.javanet/elytrarace/server/game/GameOrchestratorTest.javanet/elytrarace/server/perf/EcsGameLoopLoadTest.javanet/elytrarace/server/phase/MinestomEndPhaseRankingTest.javanet/elytrarace/server/player/PlayerServiceTest.javanet/elytrarace/server/scoring/ScoringServiceTest.javanet/elytrarace/server/world/AnvilMapInstanceServiceTest.javaAcceptance Criteria
settings.gradle.ktsversion catalog declares the Cyano library (via Mycelium BOM or explicit coordinates);minecraft.minestom.testingis removed or kept only if still required by another moduleserver/build.gradle.ktsuses Cyano astestImplementationinstead oflibs.minecraft.minestom.testing@EnvTestannotations are replaced with@ExtendWith(MicrotusExtension.class)(import:net.minestom.testing.extension.MicrotusExtension)./gradlew :server:testpasses with zero failures after migrationCLAUDE.mdis updated to document the Cyano testing pattern (replace any mention of@EnvTest/minestom.testingwith the new pattern)Technical Details
net.onelitefeather:cyano(check Mycelium BOM for the exact version pin)Envinterface stays atnet.minestom.testing.Env— no changes to test method signatures or injection pointssettings.gradle.ktsunderdependencyResolutionManagement { versionCatalogs { ... } }— do NOT creategradle/libs.versions.tomlaonyx-bom(net.onelitefeather:aonyx-bom:0.7.0) is already declared; check whether the Mycelium BOM is a separate artifact or already transitively includedDependencies
None — this is a test-scope change only and does not affect production classpath or runtime behavior.
Estimate
S — mechanical find-and-replace across 15 files plus two build files; no logic changes required.