package ar.com.companeros.identity; import ar.com.companeros.Companeros; import java.util.*; import net.minecraft.nbt.*; import net.minecraft.gametest.framework.*; import net.minecraftforge.gametest.*; @GameTestHolder(Companeros.ID) @PrefixGameTestTemplate(false) public final class ProfileCompatibilityTests { @GameTest(template = "empty") public void offlineProfilesMatchMinecraftAndRemapOnlyTheirReferences(GameTestHelper helper) { UUID old = UUID.fromString("1e4eb943-6bc8-4813-9c91-cbdc7d972eca"), next = PlayerProfileIds.offline("Neon"), human = UUID.randomUUID(); helper.assertTrue(next.equals(UUID.fromString("68e79ab5-69dd-350b-a1d3-73b2f9b89fb1")) && PlayerProfileIds.offline("Xenon").equals(UUID.fromString("4f72ea90-a7d1-3d81-9b97-8f06df3ea18d")), "UUID offline estándar por nombre"); CompoundTag root = new CompoundTag(); root.putUUID("Agent", old); root.putUUID("Human", human); root.putString("Source", "AGENT:" + old); root.putLong("OwnerUUIDMost", old.getMostSignificantBits()); root.putLong("OwnerUUIDLeast", old.getLeastSignificantBits()); root.putInt("Iron", 37); root.putLong("OccurredAtUtc", 12345); ListTag list = new ListTag(); list.add(StringTag.valueOf(old.toString())); root.put("Relations", list); helper.assertTrue(ProfileUuidRemapper.remap(root, Map.of(old, next)) && root.getUUID("Agent").equals(next) && root.getUUID("Human").equals(human) && root.getString("Source").equals("AGENT:" + next) && root.getLong("OwnerUUIDMost") == next.getMostSignificantBits() && root.getList("Relations", Tag.TAG_STRING).getString(0).equals(next.toString()) && root.getInt("Iron") == 37 && root.getLong("OccurredAtUtc") == 12345, "Referencias migran sin cambiar otros jugadores, recursos o fechas"); helper.assertTrue(!ProfileUuidRemapper.remap(root, Map.of(old, next)), "Migración idempotente"); helper.succeed(); } @GameTest(template = "empty") public void researcherRolePersistsAndDelegatesProduction(GameTestHelper helper) { UUID researcher = UUID.randomUUID(), other = UUID.randomUUID(); AgentRoles roles = new AgentRoles(); roles.assign(researcher, AgentRoles.Role.INVESTIGADOR); AgentRoles restored = AgentRoles.load(roles.save(new CompoundTag())); helper.assertTrue(restored.role(researcher) == AgentRoles.Role.INVESTIGADOR && restored.role(other) == AgentRoles.Role.GENERALISTA && restored.allows(researcher, "research_recipe") && restored.allows(researcher, "eat") && restored.allows(researcher, "attack") && !restored.allows(researcher, "mine_block") && !restored.allows(researcher, "place_block"), "Rol individual persistente; investigación y supervivencia sin proyectos de producción"); helper.succeed(); } }