diff --git a/build.gradle.kts b/build.gradle.kts index 7aad2a1c..8096f07b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -23,7 +23,7 @@ repositories { dependencies { // minecraft development api - compileOnly("org.spigotmc:spigot-api:1.21.5-R0.1-SNAPSHOT") + compileOnly("org.spigotmc:spigot-api:1.21.7-R0.1-SNAPSHOT") implementation("net.kyori:adventure-platform-bukkit:4.4.1") implementation("net.kyori:adventure-text-minimessage:4.24.0") implementation("dev.rollczi:litecommands-bukkit:3.10.4") @@ -82,10 +82,14 @@ dependencies { testImplementation("org.junit.jupiter:junit-jupiter-params:5.13.4") testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.13.4") testRuntimeOnly("org.junit.platform:junit-platform-launcher") - testImplementation("org.testcontainers:junit-jupiter:1.21.3") testImplementation("org.testcontainers:mysql:1.21.3") testImplementation("mysql:mysql-connector-java:8.0.33") + + testImplementation("org.spigotmc:spigot-api:1.21.5-R0.1-SNAPSHOT") + testImplementation("net.kyori:adventure-platform-bukkit:4.4.1") + testImplementation("net.kyori:adventure-text-minimessage:4.24.0") + testImplementation("net.dzikoysk:cdn:1.14.9") } java { @@ -112,7 +116,7 @@ tasks.withType { tasks { runServer { - minecraftVersion("1.21.5") + minecraftVersion("1.21.7") } clean { diff --git a/src/test/java/com/eternalcode/parcellockers/database/DeliveryRepositoryIntegrationTest.java b/src/test/java/com/eternalcode/parcellockers/database/DeliveryRepositoryIntegrationTest.java new file mode 100644 index 00000000..e83679f3 --- /dev/null +++ b/src/test/java/com/eternalcode/parcellockers/database/DeliveryRepositoryIntegrationTest.java @@ -0,0 +1,66 @@ +package com.eternalcode.parcellockers.database; + +import com.eternalcode.parcellockers.TestScheduler; +import com.eternalcode.parcellockers.configuration.ConfigurationManager; +import com.eternalcode.parcellockers.configuration.implementation.PluginConfiguration; +import com.eternalcode.parcellockers.delivery.Delivery; +import com.eternalcode.parcellockers.delivery.repository.DeliveryRepository; +import com.eternalcode.parcellockers.delivery.repository.DeliveryRepositoryOrmLite; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; +import org.testcontainers.containers.MySQLContainer; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; +import org.testcontainers.utility.DockerImageName; + +import java.io.File; +import java.nio.file.Path; +import java.time.Instant; +import java.util.Optional; +import java.util.UUID; +import java.util.logging.Logger; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +@Testcontainers +class DeliveryRepositoryIntegrationTest extends IntegrationTestSpec{ + + @Container + private static final MySQLContainer mySQLContainer = new MySQLContainer(DockerImageName.parse("mysql:latest")); + + @TempDir + private Path tempDir; + + private DatabaseManager databaseManager; + + @Test + void test() { + File dataFolder = tempDir.resolve("ParcelLockers").toFile(); + PluginConfiguration config = new ConfigurationManager(dataFolder).load(new PluginConfiguration()); + config.settings.databaseType = DatabaseType.MYSQL; + DatabaseManager databaseManager = new DatabaseManager(config, Logger.getLogger("ParcelLockers"), dataFolder); + this.databaseManager = databaseManager; + DeliveryRepository deliveryRepository = new DeliveryRepositoryOrmLite(databaseManager, new TestScheduler()); + + Delivery delivery = new Delivery(UUID.randomUUID(), Instant.now()); + deliveryRepository.save(delivery); + + Optional deliveryOptional = await(deliveryRepository.find(delivery.parcel())); + assertTrue(deliveryOptional.isPresent(), "Delivery should be present"); + assertEquals(delivery.parcel(), deliveryOptional.get().parcel()); + + deliveryRepository.remove(delivery.parcel()); + Optional removedDelivery = await(deliveryRepository.find(delivery.parcel())); + assertTrue(removedDelivery.isEmpty(), "Delivery should be removed"); + } + + @AfterEach + void tearDown() { + if (this.databaseManager != null) { + this.databaseManager.disconnect(); + } + } + +} diff --git a/src/test/java/com/eternalcode/parcellockers/database/ItemStorageRepositoryIntegrationTest.java b/src/test/java/com/eternalcode/parcellockers/database/ItemStorageRepositoryIntegrationTest.java new file mode 100644 index 00000000..9cd20a40 --- /dev/null +++ b/src/test/java/com/eternalcode/parcellockers/database/ItemStorageRepositoryIntegrationTest.java @@ -0,0 +1,67 @@ +package com.eternalcode.parcellockers.database; + +import com.eternalcode.parcellockers.TestScheduler; +import com.eternalcode.parcellockers.configuration.ConfigurationManager; +import com.eternalcode.parcellockers.configuration.implementation.PluginConfiguration; +import com.eternalcode.parcellockers.itemstorage.ItemStorage; +import com.eternalcode.parcellockers.itemstorage.repository.ItemStorageRepository; +import com.eternalcode.parcellockers.itemstorage.repository.ItemStorageRepositoryOrmLite; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; +import org.testcontainers.containers.MySQLContainer; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; +import org.testcontainers.utility.DockerImageName; + +import java.io.File; +import java.nio.file.Path; +import java.util.List; +import java.util.Optional; +import java.util.UUID; +import java.util.logging.Logger; + +import static org.junit.jupiter.api.Assertions.assertTrue; + +@Testcontainers +class ItemStorageRepositoryIntegrationTest extends IntegrationTestSpec { + + @Container + private static final MySQLContainer mySQLContainer = new MySQLContainer(DockerImageName.parse("mysql:latest")); + + @TempDir + private Path tempDir; + + private DatabaseManager databaseManager; + + @Test + void test() { + File dataFolder = tempDir.resolve("ParcelLockers").toFile(); + PluginConfiguration config = new ConfigurationManager(dataFolder).load(new PluginConfiguration()); + config.settings.databaseType = DatabaseType.MYSQL; + this.databaseManager = new DatabaseManager(config, Logger.getLogger("ParcelLockers"), dataFolder); + ItemStorageRepository itemStorageRepository = new ItemStorageRepositoryOrmLite(databaseManager, new TestScheduler()); + + ItemStorage itemStorage = new ItemStorage(UUID.randomUUID(), List.of(new ItemStack(Material.GOLD_BLOCK, 64))); + itemStorageRepository.save(itemStorage); + Optional retrievedItemStorage = await(itemStorageRepository.find(itemStorage.owner())); + assertTrue(retrievedItemStorage.isPresent(), "ItemStorage should be present"); + assertTrue(retrievedItemStorage.get().items().contains(new ItemStack(Material.GOLD_BLOCK, 64)), + "ItemStorage should contain the saved item"); + + itemStorageRepository.remove(itemStorage.owner()); + Optional removedItemStorage = await(itemStorageRepository.find(itemStorage.owner())); + assertTrue(removedItemStorage.isEmpty(), "ItemStorage should be removed"); + } + + + @AfterEach + void tearDown() { + if (this.databaseManager != null) { + this.databaseManager.disconnect(); + } + } + +} diff --git a/src/test/java/com/eternalcode/parcellockers/database/LockerRepositoryIntegrationTest.java b/src/test/java/com/eternalcode/parcellockers/database/LockerRepositoryIntegrationTest.java index 4412f7e1..ef2eca4f 100644 --- a/src/test/java/com/eternalcode/parcellockers/database/LockerRepositoryIntegrationTest.java +++ b/src/test/java/com/eternalcode/parcellockers/database/LockerRepositoryIntegrationTest.java @@ -42,6 +42,7 @@ class LockerRepositoryIntegrationTest extends IntegrationTestSpec { void test() { File dataFolder = tempDir.resolve("ParcelLockers").toFile(); PluginConfiguration config = new ConfigurationManager(dataFolder).load(new PluginConfiguration()); + config.settings.databaseType = DatabaseType.MYSQL; DatabaseManager databaseManager = new DatabaseManager(config, Logger.getLogger("ParcelLockers"), dataFolder); this.databaseManager = databaseManager; LockerCache cache = new LockerCache(); @@ -52,7 +53,6 @@ void test() { String description = "Parcel locker description."; Position position = new Position(1, 2, 3, "world"); - parcelLockerRepository.save(new Locker(uuid, description, position)); Optional parcelLocker = await(parcelLockerRepository.findByUUID(uuid)); diff --git a/src/test/java/com/eternalcode/parcellockers/database/ParcelContentRepositoryIntegrationTest.java b/src/test/java/com/eternalcode/parcellockers/database/ParcelContentRepositoryIntegrationTest.java new file mode 100644 index 00000000..75a7f6af --- /dev/null +++ b/src/test/java/com/eternalcode/parcellockers/database/ParcelContentRepositoryIntegrationTest.java @@ -0,0 +1,65 @@ +package com.eternalcode.parcellockers.database; + +import com.eternalcode.parcellockers.TestScheduler; +import com.eternalcode.parcellockers.configuration.ConfigurationManager; +import com.eternalcode.parcellockers.configuration.implementation.PluginConfiguration; +import com.eternalcode.parcellockers.content.ParcelContent; +import com.eternalcode.parcellockers.content.repository.ParcelContentRepository; +import com.eternalcode.parcellockers.content.repository.ParcelContentRepositoryOrmLite; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; +import org.testcontainers.containers.MySQLContainer; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; +import org.testcontainers.utility.DockerImageName; + +import java.io.File; +import java.nio.file.Path; +import java.util.List; +import java.util.Optional; +import java.util.UUID; +import java.util.logging.Logger; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +@Testcontainers +class ParcelContentRepositoryIntegrationTest extends IntegrationTestSpec { + + @Container + private static final MySQLContainer mySQLContainer = new MySQLContainer(DockerImageName.parse("mysql:latest")); + + @TempDir + private Path tempDir; + + private DatabaseManager databaseManager; + + @Test + void test() { + File dataFolder = tempDir.resolve("ParcelLockers").toFile(); + PluginConfiguration config = new ConfigurationManager(dataFolder).load(new PluginConfiguration()); + this.databaseManager = new DatabaseManager(config, Logger.getLogger("ParcelLockers"), dataFolder); + + ParcelContentRepository parcelContentRepository = new ParcelContentRepositoryOrmLite(databaseManager, new TestScheduler()); + + ParcelContent parcelContent = new ParcelContent(UUID.randomUUID(), List.of(new ItemStack(Material.GOLD_BLOCK, 64))); + parcelContentRepository.save(parcelContent); + Optional retrievedParcelContent = await(parcelContentRepository.findByUUID(parcelContent.uniqueId())); + assertTrue(retrievedParcelContent.isPresent(), "ParcelContent should be present"); + + parcelContentRepository.remove(parcelContent.uniqueId()); + Optional removedParcelContent = await(parcelContentRepository.findByUUID(parcelContent.uniqueId())); + assertFalse(removedParcelContent.isPresent(), "ParcelContent should be removed"); + } + + @AfterEach + void tearDown() { + if (this.databaseManager != null) { + this.databaseManager.disconnect(); + } + } + +} diff --git a/src/test/java/com/eternalcode/parcellockers/database/ParcelRepositoryIntegrationTest.java b/src/test/java/com/eternalcode/parcellockers/database/ParcelRepositoryIntegrationTest.java index c0220f4a..cf4493ce 100644 --- a/src/test/java/com/eternalcode/parcellockers/database/ParcelRepositoryIntegrationTest.java +++ b/src/test/java/com/eternalcode/parcellockers/database/ParcelRepositoryIntegrationTest.java @@ -45,6 +45,7 @@ class ParcelRepositoryIntegrationTest extends IntegrationTestSpec { void test() { File dataFolder = tempDir.resolve("ParcelLockers").toFile(); PluginConfiguration config = new ConfigurationManager(dataFolder).load(new PluginConfiguration()); + config.settings.databaseType = DatabaseType.MYSQL; DatabaseManager databaseManager = new DatabaseManager(config, Logger.getLogger("ParcelLockers"), dataFolder); this.databaseManager = databaseManager; ParcelCache cache = new ParcelCache(); diff --git a/src/test/java/com/eternalcode/parcellockers/database/UserRepositoryIntegrationTest.java b/src/test/java/com/eternalcode/parcellockers/database/UserRepositoryIntegrationTest.java new file mode 100644 index 00000000..f409cebc --- /dev/null +++ b/src/test/java/com/eternalcode/parcellockers/database/UserRepositoryIntegrationTest.java @@ -0,0 +1,69 @@ +package com.eternalcode.parcellockers.database; + +import com.eternalcode.parcellockers.TestScheduler; +import com.eternalcode.parcellockers.configuration.ConfigurationManager; +import com.eternalcode.parcellockers.configuration.implementation.PluginConfiguration; +import com.eternalcode.parcellockers.shared.Page; +import com.eternalcode.parcellockers.user.User; +import com.eternalcode.parcellockers.user.repository.UserPageResult; +import com.eternalcode.parcellockers.user.repository.UserRepository; +import com.eternalcode.parcellockers.user.repository.UserRepositoryOrmLite; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; +import org.testcontainers.containers.MySQLContainer; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; + +import java.io.File; +import java.nio.file.Path; +import java.util.Optional; +import java.util.UUID; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +@Testcontainers +class UserRepositoryIntegrationTest extends IntegrationTestSpec { + + @Container + private static final MySQLContainer container = new MySQLContainer(); + + @TempDir + private Path tempDir; + + private DatabaseManager databaseManager; + + @Test + void test() { + File dataFolder = tempDir.resolve("ParcelLockers").toFile(); + PluginConfiguration config = new ConfigurationManager(dataFolder).load(new PluginConfiguration()); + config.settings.databaseType = DatabaseType.MYSQL; + DatabaseManager databaseManager = new DatabaseManager(config, null, dataFolder); + this.databaseManager = databaseManager; + + UserRepository userRepository = new UserRepositoryOrmLite(databaseManager, new TestScheduler()); + + UUID userUuid = UUID.randomUUID(); + String username = "testUser"; + User user = new User(userUuid, username); + + userRepository.save(user); + + Optional userOptional = await(userRepository.getUser(userUuid)); + assertTrue(userOptional.isPresent()); + User retrievedUser = userOptional.get(); + assertEquals(retrievedUser.uuid(), userUuid); + + UserPageResult pageResult = await(userRepository.getPage(new Page(0, 10))); + assertTrue(pageResult.users().stream().anyMatch(u -> u.uuid().equals(userUuid))); + } + + @AfterEach + void tearDown() { + if (this.databaseManager != null) { + this.databaseManager.disconnect(); + } + } + +}