Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/main/java/fr/openmc/core/ListenersManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -40,12 +40,12 @@ public static void init() {
new EquipableItemListener(),
new NoMoreRabbit(),
new ArmorListener(),
new SpawnerExtractorListener(),
new BlockBreakListener()
);

if (!OMCPlugin.isUnitTestVersion()) {
registerEvents(
new SpawnerExtractorListener(),
new ItemsAddersListener(),
new TicketListener()
);
Expand Down
3 changes: 2 additions & 1 deletion src/main/java/fr/openmc/core/OMCPlugin.java
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,8 @@ public void onEnable() {
TPAQueue.initCommand();
FreezeManager.init();
QuestProgressSaveManager.init();
TabList.init();
if (!isUnitTestVersion())
TabList.init();
AdminShopManager.init();
BossbarManager.init();
AnimationsManager.init();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,8 @@ public static void load() {
}

public static void save() {
if (config == null) return;

List<Map<String, Object>> list = new ArrayList<>();
for (MultiBlock mb : multiBlocks) {
Map<String, Object> map = new HashMap<>();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
package fr.openmc.core.features.economy;

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

import java.util.Locale;

class EconomyFormattingTest {

@BeforeAll
static void setUpLocale() {
Locale.setDefault(Locale.US);
}

@Test
@DisplayName("Format zero balance")
void testFormat_Zero() {
Assertions.assertEquals("0", EconomyManager.getFormattedSimplifiedNumber(0));
}

@Test
@DisplayName("Format small number without suffix")
void testFormat_SmallNumber() {
Assertions.assertEquals("500", EconomyManager.getFormattedSimplifiedNumber(500));
}

@Test
@DisplayName("Format thousands with k suffix")
void testFormat_Thousands() {
String result = EconomyManager.getFormattedSimplifiedNumber(1500);
Assertions.assertEquals("1.5k", result);
}

@Test
@DisplayName("Format exact thousand")
void testFormat_ExactThousand() {
Assertions.assertEquals("1k", EconomyManager.getFormattedSimplifiedNumber(1000));
}

@Test
@DisplayName("Format millions with M suffix")
void testFormat_Millions() {
Assertions.assertEquals("3M", EconomyManager.getFormattedSimplifiedNumber(3_000_000));
}

@Test
@DisplayName("Format billions with B suffix")
void testFormat_Billions() {
Assertions.assertEquals("1B", EconomyManager.getFormattedSimplifiedNumber(1_000_000_000));
}

@Test
@DisplayName("Format with decimal truncation")
void testFormat_Decimal() {
String result = EconomyManager.getFormattedSimplifiedNumber(2_500_000);
Assertions.assertEquals("2.5M", result);
}

@Test
@DisplayName("Format number under 1000")
void testFormat_Under1000() {
Assertions.assertEquals("999", EconomyManager.getFormattedSimplifiedNumber(999));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ public void testSetBalance() {
@Test
public void testAddBalanceWithReasonRegistersTransaction() {
EconomyManager.addBalance(player1.getUniqueId(), 100.0, "Test Reason");
server.getScheduler().performTicks(20L);
server.getScheduler().waitAsyncTasksFinished();

List<Transaction> transactions = TransactionsManager.getTransactionsByPlayers(player1.getUniqueId());
boolean found = transactions.stream().anyMatch(t ->
Expand All @@ -91,11 +91,11 @@ public void testAddBalanceWithReasonRegistersTransaction() {
public void testWithdrawBalanceWithReasonRegistersTransaction() {
EconomyManager.setBalance(player1.getUniqueId(), 200.0);
EconomyManager.withdrawBalance(player1.getUniqueId(), 50.0, "Withdrawal Reason");
server.getScheduler().performTicks(20L);
server.getScheduler().waitAsyncTasksFinished();

List<Transaction> transactions = TransactionsManager.getTransactionsByPlayers(player1.getUniqueId());

boolean found = transactions.stream().anyMatch(t ->
boolean found = transactions.stream().anyMatch(t ->
t.sender.equals(player1.getUniqueId().toString()) &&
t.amount == 50.0 &&
t.reason.equals("Withdrawal Reason")
Expand All @@ -108,10 +108,10 @@ public void testWithdrawBalanceWithReasonRegistersTransaction() {
public void testWithdrawBalanceWithoutReasonDoesNotRegisterTransaction() {
EconomyManager.setBalance(player1.getUniqueId(), 200.0);
EconomyManager.withdrawBalance(player1.getUniqueId(), 50.0);
server.getScheduler().performTicks(20L);
server.getScheduler().waitAsyncTasksFinished();

List<Transaction> transactions = TransactionsManager.getTransactionsByPlayers(player1.getUniqueId());
boolean found = transactions.stream().anyMatch(t ->
boolean found = transactions.stream().anyMatch(t ->
t.sender.equals(player1.getUniqueId().toString()) &&
t.amount == 50.0
);
Expand Down Expand Up @@ -145,7 +145,7 @@ public void testFailedTransferBalanceDueToInsufficientFunds() {
public void testTransferBalanceWithReasonRegistersTransaction() {
EconomyManager.setBalance(player1.getUniqueId(), 400.0);
EconomyManager.transferBalance(player1.getUniqueId(), player2.getUniqueId(), 150.0, "Gift");
server.getScheduler().performTicks(120L);
server.getScheduler().waitAsyncTasksFinished();

List<Transaction> transactions = TransactionsManager.getTransactionsByPlayers(player1.getUniqueId());

Expand Down
78 changes: 78 additions & 0 deletions src/test/java/fr/openmc/core/utils/ColorUtilsTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
package fr.openmc.core.utils;

import net.kyori.adventure.text.format.NamedTextColor;
import org.bukkit.Material;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

class ColorUtilsTest {

@Test
@DisplayName("getNamedTextColor valid color")
void testGetNamedTextColor_Valid() {
Assertions.assertEquals(NamedTextColor.RED, ColorUtils.getNamedTextColor("red"));
Assertions.assertEquals(NamedTextColor.BLUE, ColorUtils.getNamedTextColor("blue"));
Assertions.assertEquals(NamedTextColor.GREEN, ColorUtils.getNamedTextColor("green"));
}

@Test
@DisplayName("getNamedTextColor null returns WHITE")
void testGetNamedTextColor_Null() {
Assertions.assertEquals(NamedTextColor.WHITE, ColorUtils.getNamedTextColor(null));
}

@Test
@DisplayName("getNamedTextColor invalid returns WHITE")
void testGetNamedTextColor_Invalid() {
Assertions.assertEquals(NamedTextColor.WHITE, ColorUtils.getNamedTextColor("not_a_color"));
}

@Test
@DisplayName("getColorCode returns correct codes")
void testGetColorCode() {
Assertions.assertEquals("§c", ColorUtils.getColorCode(NamedTextColor.RED));
Assertions.assertEquals("§a", ColorUtils.getColorCode(NamedTextColor.GREEN));
Assertions.assertEquals("§9", ColorUtils.getColorCode(NamedTextColor.BLUE));
Assertions.assertEquals("§f", ColorUtils.getColorCode(NamedTextColor.WHITE));
Assertions.assertEquals("§0", ColorUtils.getColorCode(NamedTextColor.BLACK));
}

@Test
@DisplayName("getNameFromColor returns French names")
void testGetNameFromColor() {
Assertions.assertEquals("§cRouge", ColorUtils.getNameFromColor(NamedTextColor.RED));
Assertions.assertEquals("§fBlanc", ColorUtils.getNameFromColor(NamedTextColor.WHITE));
Assertions.assertEquals("§6Orange", ColorUtils.getNameFromColor(NamedTextColor.GOLD));
}

@Test
@DisplayName("getMaterialFromColor returns correct wool")
void testGetMaterialFromColor() {
Assertions.assertEquals(Material.RED_WOOL, ColorUtils.getMaterialFromColor(NamedTextColor.RED));
Assertions.assertEquals(Material.WHITE_WOOL, ColorUtils.getMaterialFromColor(NamedTextColor.WHITE));
Assertions.assertEquals(Material.BLACK_WOOL, ColorUtils.getMaterialFromColor(NamedTextColor.BLACK));
}

@Test
@DisplayName("getReadableColor maps correctly")
void testGetReadableColor() {
Assertions.assertEquals(NamedTextColor.DARK_GRAY, ColorUtils.getReadableColor(NamedTextColor.BLACK));
Assertions.assertEquals(NamedTextColor.GRAY, ColorUtils.getReadableColor(NamedTextColor.WHITE));
Assertions.assertEquals(NamedTextColor.GOLD, ColorUtils.getReadableColor(NamedTextColor.YELLOW));
Assertions.assertEquals(NamedTextColor.RED, ColorUtils.getReadableColor(NamedTextColor.RED));
}

@Test
@DisplayName("getRGBFromNamedTextColor returns correct RGB")
void testGetRGBFromNamedTextColor() {
int[] red = ColorUtils.getRGBFromNamedTextColor(NamedTextColor.RED);
Assertions.assertArrayEquals(new int[]{255, 85, 85}, red);

int[] black = ColorUtils.getRGBFromNamedTextColor(NamedTextColor.BLACK);
Assertions.assertArrayEquals(new int[]{0, 0, 0}, black);

int[] white = ColorUtils.getRGBFromNamedTextColor(NamedTextColor.WHITE);
Assertions.assertArrayEquals(new int[]{255, 255, 255}, white);
}
}
84 changes: 79 additions & 5 deletions src/test/java/fr/openmc/core/utils/DateUtilsTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,84 @@ class DateUtilsTest {
@Test
@DisplayName("Time to Ticks")
void testConvertTime() {
Assertions.assertEquals(
"20m",
DateUtils.convertTime(24000)
);
Assertions.assertEquals("20m", DateUtils.convertTime(24000));
}

}
@Test
@DisplayName("Convert 0 seconds")
void testConvertSecondToTime_Zero() {
Assertions.assertEquals("0s", DateUtils.convertSecondToTime(0));
}

@Test
@DisplayName("Convert seconds only")
void testConvertSecondToTime_SecondsOnly() {
Assertions.assertEquals("45s", DateUtils.convertSecondToTime(45));
}

@Test
@DisplayName("Convert minutes and seconds")
void testConvertSecondToTime_MinutesAndSeconds() {
Assertions.assertEquals("2m 30s", DateUtils.convertSecondToTime(150));
}

@Test
@DisplayName("Convert hours, minutes and seconds")
void testConvertSecondToTime_HoursMinutesSeconds() {
Assertions.assertEquals("1h 5m 10s", DateUtils.convertSecondToTime(3910));
}

@Test
@DisplayName("Convert days, hours, minutes and seconds")
void testConvertSecondToTime_Full() {
Assertions.assertEquals("3j 4h 2m 38s", DateUtils.convertSecondToTime(273758));
}

@Test
@DisplayName("Convert exact hours")
void testConvertSecondToTime_ExactHours() {
Assertions.assertEquals("2h", DateUtils.convertSecondToTime(7200));
}

@Test
@DisplayName("Convert millis to time")
void testConvertMillisToTime() {
Assertions.assertEquals("1m 30s", DateUtils.convertMillisToTime(90000));
}

@Test
@DisplayName("Convert 0 millis")
void testConvertMillisToTime_Zero() {
Assertions.assertEquals("0s", DateUtils.convertMillisToTime(0));
}

@Test
@DisplayName("isBefore - same year, earlier week")
void testIsBefore_SameYearEarlierWeek() {
Assertions.assertTrue(DateUtils.isBefore("2025-10", "2025-20"));
}

@Test
@DisplayName("isBefore - same year, same week")
void testIsBefore_SameWeek() {
Assertions.assertTrue(DateUtils.isBefore("2025-10", "2025-10"));
}

@Test
@DisplayName("isBefore - same year, later week")
void testIsBefore_SameYearLaterWeek() {
Assertions.assertFalse(DateUtils.isBefore("2025-20", "2025-10"));
}

@Test
@DisplayName("isBefore - earlier year")
void testIsBefore_EarlierYear() {
Assertions.assertTrue(DateUtils.isBefore("2024-50", "2025-1"));
}

@Test
@DisplayName("isBefore - later year")
void testIsBefore_LaterYear() {
Assertions.assertFalse(DateUtils.isBefore("2026-1", "2025-50"));
}
}
47 changes: 47 additions & 0 deletions src/test/java/fr/openmc/core/utils/EnumUtilsTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package fr.openmc.core.utils;

import org.bukkit.Material;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

class EnumUtilsTest {

@Test
@DisplayName("Match valid enum value")
void testMatch_Valid() {
Assertions.assertEquals(Material.STONE, EnumUtils.match("stone", Material.class));
}

@Test
@DisplayName("Match valid enum value case insensitive")
void testMatch_CaseInsensitive() {
Assertions.assertEquals(Material.DIAMOND, EnumUtils.match("diamond", Material.class));
Assertions.assertEquals(Material.DIAMOND, EnumUtils.match("DIAMOND", Material.class));
Assertions.assertEquals(Material.DIAMOND, EnumUtils.match("Diamond", Material.class));
}

@Test
@DisplayName("Match invalid key returns null")
void testMatch_InvalidReturnsNull() {
Assertions.assertNull(EnumUtils.match("not_a_material", Material.class));
}

@Test
@DisplayName("Match invalid key returns default value")
void testMatch_InvalidReturnsDefault() {
Assertions.assertEquals(Material.AIR, EnumUtils.match("not_a_material", Material.class, Material.AIR));
}

@Test
@DisplayName("Match null key returns default")
void testMatch_NullKey() {
Assertions.assertEquals(Material.STONE, EnumUtils.match(null, Material.class, Material.STONE));
}

@Test
@DisplayName("Match null key returns null without default")
void testMatch_NullKeyNoDefault() {
Assertions.assertNull(EnumUtils.match(null, Material.class));
}
}
Loading
Loading