fix(great-sword): stabilize transferred recovery test
Release / release (push) Successful in 19m38s

This commit is contained in:
dmg committed 2026-09-27 14:16:58 -04:00
1 parent 9ed5dea830
commit cee4690be9
1 file changed
+17
@@ -483,6 +483,11 @@ class GreatSwordNativeTest {
@Test void restartAndDifferentHolderCannotReapplyACompletedChargedStrike() throws Exception {
org.bukkit.inventory.ItemStack sheet;
java.time.Instant persistedDeadline;
java.util.UUID characterId;
// This scenario checks an unexpired persisted recovery, not the packaged
// 0.75-second wall-clock boundary (covered by the fixed-clock test below).
java.nio.file.Files.writeString(data.resolve("config.yml"),"great-sword-recovery-seconds: 600\n");
try (var f = new FantasyStickLifecycleNativeTest.Fixture(data)) {
f.plugin.setEnabled(true);
var a = new FantasyStickLifecycleNativeTest.Actor(data); withGreatSword(data, a, 12);
@@ -502,6 +507,12 @@ class GreatSwordNativeTest {
f.dispatcher.accept(new io.papermc.paper.event.player.PrePlayerAttackEntityEvent(a.player, target, true));
PartyBookNativeTest.drain(f); PartyBookNativeTest.drain(f);
verify(target, times(1)).damage(anyDouble(), any(org.bukkit.damage.DamageSource.class));
characterId=a.core.record.id();
var stored=(games.dmg.fantasystick.persistence.CharacterStorage)
FantasyStickLifecycleNativeTest.Fixture.field(f.plugin,"characters");
persistedDeadline=stored.find(characterId).join().orElseThrow().cooldowns().get("great_sword");
assertTrue(persistedDeadline.isAfter(java.time.Instant.now().plusSeconds(300)),
"This restart/transfer check must still be before its acknowledged recovery deadline");
sheet = a.core.inventory.getItemInOffHand().clone();
a.core.inventory.setItemInOffHand(null); f.changed(a); PartyBookNativeTest.drain(f); f.awaitCharacterAndReceipt(a);
f.plugin.setEnabled(false);
@@ -511,6 +522,12 @@ class GreatSwordNativeTest {
var b = new FantasyStickLifecycleNativeTest.Actor(data);
b.core.inventory.setItemInOffHand(sheet);
f.players.put(b.core.id, b.player); f.activate(b);
var restored=(games.dmg.fantasystick.persistence.CharacterStorage)
FantasyStickLifecycleNativeTest.Fixture.field(f.plugin,"characters");
assertEquals(persistedDeadline,restored.find(characterId).join().orElseThrow()
.cooldowns().get("great_sword"));
assertTrue(persistedDeadline.isAfter(java.time.Instant.now().plusSeconds(300)),
"The transferred holder must attack before the same persisted recovery expires");
when(b.player.getAttackCooldown()).thenReturn(1.0f);
var target = mock(org.bukkit.entity.LivingEntity.class);
when(target.getUniqueId()).thenReturn(java.util.UUID.randomUUID());