package fr.luc.bettermcguis; import fr.luc.bettermcguis.api.GuiItem; import fr.luc.bettermcguis.api.GuiType; import fr.luc.bettermcguis.api.slot.SlotRange; import fr.luc.bettermcguis.type.PaginatedGui; import org.bukkit.Material; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import java.util.concurrent.atomic.AtomicInteger; import static org.junit.jupiter.api.Assertions.*; public class PaginatedGuiTest { @Test @DisplayName("PaginatedGui doit calculer correctement le nombre total de pages") void testPaginationMath() { PaginatedGui gui = new PaginatedGui("Paginated Test", GuiType.CHEST_3_ROWS); gui.setItemSlots(SlotRange.of(10, 16)); // 7 slots par page assertEquals(7, gui.getPageSize()); assertEquals(1, gui.getTotalPages()); // 0 items -> 1 page vide for (int i = 0; i < 20; i++) { gui.addPageItem(GuiItem.of(Material.GOLD_INGOT)); } // 20 items / 7 par page -> 3 pages (7 + 7 + 6) assertEquals(3, gui.getTotalPages()); assertEquals(1, gui.getCurrentPage()); assertTrue(gui.hasNextPage()); assertFalse(gui.hasPreviousPage()); } @Test @DisplayName("PaginatedGui doit naviguer entre les pages et déclencher l'événement") void testPageNavigationAndEvents() { PaginatedGui gui = new PaginatedGui("Paginated Test", GuiType.CHEST_3_ROWS); gui.setItemSlots(SlotRange.of(10, 16)); for (int i = 0; i < 20; i++) { gui.addPageItem(GuiItem.of(Material.EMERALD)); } AtomicInteger eventFired = new AtomicInteger(0); gui.onPageChange(evt -> { eventFired.incrementAndGet(); assertEquals(1, evt.getOldPage()); assertEquals(2, evt.getNewPage()); }); assertTrue(gui.nextPage()); assertEquals(2, gui.getCurrentPage()); assertEquals(1, eventFired.get()); assertTrue(gui.hasPreviousPage()); assertTrue(gui.hasNextPage()); assertTrue(gui.nextPage()); assertEquals(3, gui.getCurrentPage()); assertFalse(gui.hasNextPage()); // Fin du catalogue // Impossible d'avancer plus loin assertFalse(gui.nextPage()); assertEquals(3, gui.getCurrentPage()); } }