From 309dedc3835ce210137b75b06d0f7f43ddb0e027 Mon Sep 17 00:00:00 2001 From: alexcrea <42614139+alexcrea@users.noreply.github.com> Date: Thu, 31 Oct 2024 10:46:16 +0100 Subject: [PATCH] Add conflict api test --- .../java/io/delilaheve/CustomAnvilTests.java | 2 +- .../cuanvil/anvil/AnvilFuseTests.java | 2 +- .../cuanvil/api/ConflictApiTests.java | 99 +++++++++++++++++++ .../cuanvil/config/DefaultConfigTests.java | 2 +- .../ConfigResetCustomAnvilTest.java | 4 +- .../{ => tests}/DefaultCustomAnvilTest.java | 6 +- .../cuanvil/util/AnvilFuseTestUtil.java | 5 +- .../alexcrea/cuanvil/util/CommonItemUtil.java | 8 +- 8 files changed, 116 insertions(+), 12 deletions(-) create mode 100644 src/test/java/xyz/alexcrea/cuanvil/api/ConflictApiTests.java rename src/test/java/xyz/alexcrea/cuanvil/{ => tests}/ConfigResetCustomAnvilTest.java (88%) rename src/test/java/xyz/alexcrea/cuanvil/{ => tests}/DefaultCustomAnvilTest.java (89%) diff --git a/src/test/java/io/delilaheve/CustomAnvilTests.java b/src/test/java/io/delilaheve/CustomAnvilTests.java index 6c91893..45ecb7c 100644 --- a/src/test/java/io/delilaheve/CustomAnvilTests.java +++ b/src/test/java/io/delilaheve/CustomAnvilTests.java @@ -2,7 +2,7 @@ package io.delilaheve; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import xyz.alexcrea.cuanvil.DefaultCustomAnvilTest; +import xyz.alexcrea.cuanvil.tests.DefaultCustomAnvilTest; public class CustomAnvilTests extends DefaultCustomAnvilTest { diff --git a/src/test/java/xyz/alexcrea/cuanvil/anvil/AnvilFuseTests.java b/src/test/java/xyz/alexcrea/cuanvil/anvil/AnvilFuseTests.java index c2ab00f..0e85d75 100644 --- a/src/test/java/xyz/alexcrea/cuanvil/anvil/AnvilFuseTests.java +++ b/src/test/java/xyz/alexcrea/cuanvil/anvil/AnvilFuseTests.java @@ -7,7 +7,7 @@ import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import xyz.alexcrea.cuanvil.DefaultCustomAnvilTest; +import xyz.alexcrea.cuanvil.tests.DefaultCustomAnvilTest; import xyz.alexcrea.cuanvil.config.ConfigHolder; import xyz.alexcrea.cuanvil.util.AnvilFuseTestData; import xyz.alexcrea.cuanvil.util.AnvilFuseTestUtil; diff --git a/src/test/java/xyz/alexcrea/cuanvil/api/ConflictApiTests.java b/src/test/java/xyz/alexcrea/cuanvil/api/ConflictApiTests.java new file mode 100644 index 0000000..6495eb1 --- /dev/null +++ b/src/test/java/xyz/alexcrea/cuanvil/api/ConflictApiTests.java @@ -0,0 +1,99 @@ +package xyz.alexcrea.cuanvil.api; + +import be.seeseemelk.mockbukkit.entity.PlayerMock; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.event.inventory.InventoryType; +import org.bukkit.inventory.AnvilInventory; +import org.bukkit.inventory.Inventory; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import xyz.alexcrea.cuanvil.tests.ConfigResetCustomAnvilTest; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; +import xyz.alexcrea.cuanvil.config.ConfigHolder; +import xyz.alexcrea.cuanvil.enchant.CAEnchantment; +import xyz.alexcrea.cuanvil.group.EnchantConflictGroup; +import xyz.alexcrea.cuanvil.util.AnvilFuseTestData; +import xyz.alexcrea.cuanvil.util.AnvilFuseTestUtil; +import xyz.alexcrea.cuanvil.util.CommonItemUtil; + +import java.util.List; + +public class ConflictApiTests extends ConfigResetCustomAnvilTest { + + private AnvilInventory anvil; + private PlayerMock player; + + @Override + @BeforeEach + public void setUp() { + super.setUp(); + // Mock used player & open anvil + player = server.addPlayer(); + + Inventory anvil = server.createInventory(player, InventoryType.ANVIL); + + this.anvil = (AnvilInventory) anvil; + player.openInventory(anvil); + + ConfigHolder.DEFAULT_CONFIG.getConfig().set("debug_log", true); + ConfigHolder.DEFAULT_CONFIG.getConfig().set("debug_log_verbose", true); + } + + @Test + public void testConflict(){ + ItemStack sharpness1 = CommonItemUtil.sharpness(1); + ItemStack arthropods1 = CommonItemUtil.bane_of_arthropods(1); + ItemStack illegalResult = AnvilFuseTestUtil.prepareItem( + Material.DIAMOND_SWORD, + List.of("bane_of_arthropods", "sharpness"), + 1, 1 + ); + + AnvilFuseTestData nullResultData = new AnvilFuseTestData( + sharpness1, arthropods1, + null + ); + + AnvilFuseTestData legalResultData = new AnvilFuseTestData( + sharpness1, arthropods1, + illegalResult + // TODO add expected price + ); + + CAEnchantment sharpness = EnchantmentApi.getByKey(Enchantment.SHARPNESS.getKey()); + Assertions.assertNotNull(sharpness); + + // Testing default conflict (illegal item should not be produced) + AnvilFuseTestUtil.executeAnvilTest(anvil, player, nullResultData); + + // Try to find & remove conflict + EnchantConflictGroup conflict = null; + for (EnchantConflictGroup enchantConflictGroup : ConflictAPI.getRegisteredConflict()) { + if("sword_enchant_conflict".equalsIgnoreCase(enchantConflictGroup.getName())){ + conflict = enchantConflictGroup; + break; + } + } + Assertions.assertNotNull(conflict, "Could not find conflict."); + + // Test what happen when we remove the conflict (illegal item should be allowed) + ConflictAPI.removeConflict(conflict); + AnvilFuseTestUtil.executeAnvilTest(anvil, player, legalResultData); + + // We create and add a new conflict + ConflictBuilder builder = new ConflictBuilder("sword_enchant_conflict"); + builder.addEnchantment("bane_of_arthropods").addEnchantment(sharpness); //TODO maybe add "add by bukkit enchantment" + builder.setMaxBeforeConflict(1); + + // Nothing should change as it is not new: it was previously deleted + Assertions.assertFalse(builder.registerIfNew()); + AnvilFuseTestUtil.executeAnvilTest(anvil, player, legalResultData); + + // Now the conflict should be registered and conflict should exist + Assertions.assertTrue(builder.registerIfAbsent()); + AnvilFuseTestUtil.executeAnvilTest(anvil, player, nullResultData); + } + +} diff --git a/src/test/java/xyz/alexcrea/cuanvil/config/DefaultConfigTests.java b/src/test/java/xyz/alexcrea/cuanvil/config/DefaultConfigTests.java index ce5177b..fdd3b3e 100644 --- a/src/test/java/xyz/alexcrea/cuanvil/config/DefaultConfigTests.java +++ b/src/test/java/xyz/alexcrea/cuanvil/config/DefaultConfigTests.java @@ -9,7 +9,7 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; -import xyz.alexcrea.cuanvil.DefaultCustomAnvilTest; +import xyz.alexcrea.cuanvil.tests.DefaultCustomAnvilTest; import xyz.alexcrea.cuanvil.enchant.CAEnchantment; import xyz.alexcrea.cuanvil.enchant.CAEnchantmentRegistry; import xyz.alexcrea.cuanvil.enchant.EnchantmentRarity; diff --git a/src/test/java/xyz/alexcrea/cuanvil/ConfigResetCustomAnvilTest.java b/src/test/java/xyz/alexcrea/cuanvil/tests/ConfigResetCustomAnvilTest.java similarity index 88% rename from src/test/java/xyz/alexcrea/cuanvil/ConfigResetCustomAnvilTest.java rename to src/test/java/xyz/alexcrea/cuanvil/tests/ConfigResetCustomAnvilTest.java index 7055078..3c03bb4 100644 --- a/src/test/java/xyz/alexcrea/cuanvil/ConfigResetCustomAnvilTest.java +++ b/src/test/java/xyz/alexcrea/cuanvil/tests/ConfigResetCustomAnvilTest.java @@ -1,11 +1,11 @@ -package xyz.alexcrea.cuanvil; +package xyz.alexcrea.cuanvil.tests; import org.junit.jupiter.api.AfterEach; import xyz.alexcrea.cuanvil.config.ConfigHolder; import java.io.File; -public class ConfigResetCustomAnvilTest extends DefaultCustomAnvilTest { +public abstract class ConfigResetCustomAnvilTest extends DefaultCustomAnvilTest { @Override @AfterEach diff --git a/src/test/java/xyz/alexcrea/cuanvil/DefaultCustomAnvilTest.java b/src/test/java/xyz/alexcrea/cuanvil/tests/DefaultCustomAnvilTest.java similarity index 89% rename from src/test/java/xyz/alexcrea/cuanvil/DefaultCustomAnvilTest.java rename to src/test/java/xyz/alexcrea/cuanvil/tests/DefaultCustomAnvilTest.java index 1813bc3..f411c01 100644 --- a/src/test/java/xyz/alexcrea/cuanvil/DefaultCustomAnvilTest.java +++ b/src/test/java/xyz/alexcrea/cuanvil/tests/DefaultCustomAnvilTest.java @@ -1,19 +1,17 @@ -package xyz.alexcrea.cuanvil; +package xyz.alexcrea.cuanvil.tests; import be.seeseemelk.mockbukkit.MockBukkit; import be.seeseemelk.mockbukkit.ServerMock; import io.delilaheve.CustomAnvil; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; -import xyz.alexcrea.cuanvil.config.ConfigHolder; import xyz.alexcrea.cuanvil.enchant.CAEnchantment; import xyz.alexcrea.cuanvil.enchant.CAEnchantmentRegistry; -import java.io.File; import java.util.ArrayList; import java.util.List; -public class DefaultCustomAnvilTest { +public abstract class DefaultCustomAnvilTest { protected ServerMock server; protected CustomAnvil plugin; diff --git a/src/test/java/xyz/alexcrea/cuanvil/util/AnvilFuseTestUtil.java b/src/test/java/xyz/alexcrea/cuanvil/util/AnvilFuseTestUtil.java index eb48b13..e33c485 100644 --- a/src/test/java/xyz/alexcrea/cuanvil/util/AnvilFuseTestUtil.java +++ b/src/test/java/xyz/alexcrea/cuanvil/util/AnvilFuseTestUtil.java @@ -85,6 +85,7 @@ public class AnvilFuseTestUtil { "Openned inventory is not anvil"); // Test with only the left item + anvil.setItem(1, null); // We clear the right slot in case something was there testPlacingItem(anvil, player, 0, data.expectedPriceAfterLeftPlaced(), data.leftItem(), data.expectedAfterLeftPlaced()); @@ -116,12 +117,12 @@ public class AnvilFuseTestUtil { AnvilFuseTestUtil.imitateAnvilUpdate(player, anvil); ItemStack result = anvil.getItem(2); - assertEqual(result, expectedResult); + assertEqual(expectedResult, result); assertPriceEqual(expectedPrice, anvil.getRepairCost()); } public static void assertEqual(@Nullable ItemStack item1, @Nullable ItemStack item2) { - if(isAir(item1)) Assertions.assertTrue(isAir(item2)); + if(isAir(item1)) Assertions.assertTrue(isAir(item2),"Item "+item2+" was not AIR but was expected to be air"); else Assertions.assertEquals(item1, item2); } diff --git a/src/test/java/xyz/alexcrea/cuanvil/util/CommonItemUtil.java b/src/test/java/xyz/alexcrea/cuanvil/util/CommonItemUtil.java index c1a3ef7..1228cda 100644 --- a/src/test/java/xyz/alexcrea/cuanvil/util/CommonItemUtil.java +++ b/src/test/java/xyz/alexcrea/cuanvil/util/CommonItemUtil.java @@ -15,7 +15,13 @@ public class CommonItemUtil { ); } - + public static ItemStack bane_of_arthropods(int level){ + return AnvilFuseTestUtil.prepareItem( + Material.DIAMOND_SWORD, + List.of("bane_of_arthropods"), + level + ); + } }