Skip to content

Commit 5cf2db5

Browse files
committed
Add integration tests for each repository
1 parent 9038690 commit 5cf2db5

File tree

6 files changed

+255
-2
lines changed

6 files changed

+255
-2
lines changed

build.gradle.kts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ repositories {
2323

2424
dependencies {
2525
// minecraft development api
26-
compileOnly("org.spigotmc:spigot-api:1.21.7-R0.1-SNAPSHOT")
26+
compileOnly("org.spigotmc:spigot-api:1.21.8-R0.1-SNAPSHOT")
2727
implementation("net.kyori:adventure-platform-bukkit:4.4.0")
2828
implementation("net.kyori:adventure-text-minimessage:4.23.0")
2929
implementation("dev.rollczi:litecommands-bukkit:3.10.2")
@@ -80,6 +80,7 @@ dependencies {
8080

8181
testImplementation("org.junit.jupiter:junit-jupiter-api:5.13.3")
8282
testImplementation("org.junit.jupiter:junit-jupiter-params:5.13.3")
83+
testCompileOnly("org.spigotmc:spigot-api:1.21.8-R0.1-SNAPSHOT")
8384
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.13.3")
8485
testRuntimeOnly("org.junit.platform:junit-platform-launcher")
8586

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package com.eternalcode.parcellockers.database;
2+
3+
import com.eternalcode.parcellockers.TestScheduler;
4+
import com.eternalcode.parcellockers.configuration.ConfigurationManager;
5+
import com.eternalcode.parcellockers.configuration.implementation.PluginConfiguration;
6+
import com.eternalcode.parcellockers.delivery.Delivery;
7+
import com.eternalcode.parcellockers.delivery.repository.DeliveryRepository;
8+
import com.eternalcode.parcellockers.delivery.repository.DeliveryRepositoryOrmLite;
9+
import org.junit.jupiter.api.AfterEach;
10+
import org.junit.jupiter.api.Test;
11+
import org.junit.jupiter.api.io.TempDir;
12+
import org.testcontainers.containers.MySQLContainer;
13+
import org.testcontainers.junit.jupiter.Container;
14+
import org.testcontainers.junit.jupiter.Testcontainers;
15+
import org.testcontainers.utility.DockerImageName;
16+
17+
import java.io.File;
18+
import java.nio.file.Path;
19+
import java.time.Instant;
20+
import java.util.Optional;
21+
import java.util.UUID;
22+
import java.util.logging.Logger;
23+
24+
import static org.junit.jupiter.api.Assertions.assertEquals;
25+
import static org.junit.jupiter.api.Assertions.assertTrue;
26+
27+
@Testcontainers
28+
class DeliveryRepositoryIntegrationTest extends IntegrationTestSpec{
29+
30+
@Container
31+
private static final MySQLContainer mySQLContainer = new MySQLContainer(DockerImageName.parse("mysql:latest"));
32+
33+
@TempDir
34+
private Path tempDir;
35+
36+
private DatabaseManager databaseManager;
37+
38+
@Test
39+
void test() {
40+
File dataFolder = tempDir.resolve("ParcelLockers").toFile();
41+
PluginConfiguration config = new ConfigurationManager(dataFolder).load(new PluginConfiguration());
42+
DatabaseManager databaseManager = new DatabaseManager(config, Logger.getLogger("ParcelLockers"), dataFolder);
43+
this.databaseManager = databaseManager;
44+
DeliveryRepository deliveryRepository = new DeliveryRepositoryOrmLite(databaseManager, new TestScheduler());
45+
46+
Delivery delivery = new Delivery(UUID.randomUUID(), Instant.now());
47+
deliveryRepository.save(delivery);
48+
49+
Optional<Delivery> deliveryOptional = await(deliveryRepository.find(delivery.parcel()));
50+
assertTrue(deliveryOptional.isPresent(), "Delivery should be present");
51+
assertEquals(delivery.parcel(), deliveryOptional.get().parcel());
52+
53+
deliveryRepository.remove(delivery.parcel());
54+
Optional<Delivery> removedDelivery = await(deliveryRepository.find(delivery.parcel()));
55+
assertTrue(removedDelivery.isEmpty(), "Delivery should be removed");
56+
}
57+
58+
@AfterEach
59+
void tearDown() {
60+
if (this.databaseManager != null) {
61+
this.databaseManager.disconnect();
62+
}
63+
}
64+
65+
}
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package com.eternalcode.parcellockers.database;
2+
3+
import com.eternalcode.parcellockers.TestScheduler;
4+
import com.eternalcode.parcellockers.configuration.ConfigurationManager;
5+
import com.eternalcode.parcellockers.configuration.implementation.PluginConfiguration;
6+
import com.eternalcode.parcellockers.itemstorage.ItemStorage;
7+
import com.eternalcode.parcellockers.itemstorage.repository.ItemStorageRepository;
8+
import com.eternalcode.parcellockers.itemstorage.repository.ItemStorageRepositoryOrmLite;
9+
import org.bukkit.Material;
10+
import org.bukkit.inventory.ItemStack;
11+
import org.junit.jupiter.api.AfterEach;
12+
import org.junit.jupiter.api.Test;
13+
import org.junit.jupiter.api.io.TempDir;
14+
import org.testcontainers.containers.MySQLContainer;
15+
import org.testcontainers.junit.jupiter.Container;
16+
import org.testcontainers.utility.DockerImageName;
17+
18+
import java.io.File;
19+
import java.nio.file.Path;
20+
import java.util.List;
21+
import java.util.Optional;
22+
import java.util.UUID;
23+
import java.util.logging.Logger;
24+
25+
import static org.junit.jupiter.api.Assertions.assertTrue;
26+
27+
class ItemStorageRepositoryIntegrationTest extends IntegrationTestSpec {
28+
29+
@Container
30+
private static final MySQLContainer mySQLContainer = new MySQLContainer(DockerImageName.parse("mysql:latest"));
31+
32+
@TempDir
33+
private Path tempDir;
34+
35+
private DatabaseManager databaseManager;
36+
37+
@Test
38+
void test() {
39+
File dataFolder = tempDir.resolve("ParcelLockers").toFile();
40+
PluginConfiguration config = new ConfigurationManager(dataFolder).load(new PluginConfiguration());
41+
this.databaseManager = new DatabaseManager(config, Logger.getLogger("ParcelLockers"), dataFolder);
42+
ItemStorageRepository itemStorageRepository = new ItemStorageRepositoryOrmLite(databaseManager, new TestScheduler());
43+
44+
ItemStorage itemStorage = new ItemStorage(UUID.randomUUID(), List.of(new ItemStack(Material.GOLD_BLOCK, 64)));
45+
itemStorageRepository.save(itemStorage);
46+
Optional<ItemStorage> retrievedItemStorage = await(itemStorageRepository.find(itemStorage.owner()));
47+
assertTrue(retrievedItemStorage.isPresent(), "ItemStorage should be present");
48+
assertTrue(retrievedItemStorage.get().items().contains(new ItemStack(Material.GOLD_BLOCK, 64)),
49+
"ItemStorage should contain the saved item");
50+
51+
itemStorageRepository.remove(itemStorage.owner());
52+
Optional<ItemStorage> removedItemStorage = await(itemStorageRepository.find(itemStorage.owner()));
53+
assertTrue(removedItemStorage.isEmpty(), "ItemStorage should be removed");
54+
}
55+
56+
57+
@AfterEach
58+
void tearDown() {
59+
if (this.databaseManager != null) {
60+
this.databaseManager.disconnect();
61+
}
62+
}
63+
64+
}

src/test/java/com/eternalcode/parcellockers/database/LockerRepositoryIntegrationTest.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@ void test() {
5252
String description = "Parcel locker description.";
5353
Position position = new Position(1, 2, 3, "world");
5454

55-
5655
parcelLockerRepository.save(new Locker(uuid, description, position));
5756

5857
Optional<Locker> parcelLocker = await(parcelLockerRepository.findByUUID(uuid));
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package com.eternalcode.parcellockers.database;
2+
3+
import com.eternalcode.parcellockers.TestScheduler;
4+
import com.eternalcode.parcellockers.configuration.ConfigurationManager;
5+
import com.eternalcode.parcellockers.configuration.implementation.PluginConfiguration;
6+
import com.eternalcode.parcellockers.content.ParcelContent;
7+
import com.eternalcode.parcellockers.content.repository.ParcelContentRepository;
8+
import com.eternalcode.parcellockers.content.repository.ParcelContentRepositoryOrmLite;
9+
import org.bukkit.Material;
10+
import org.bukkit.inventory.ItemStack;
11+
import org.junit.jupiter.api.AfterEach;
12+
import org.junit.jupiter.api.Test;
13+
import org.junit.jupiter.api.io.TempDir;
14+
15+
import java.io.File;
16+
import java.nio.file.Path;
17+
import java.util.List;
18+
import java.util.Optional;
19+
import java.util.UUID;
20+
import java.util.logging.Logger;
21+
22+
import static org.junit.jupiter.api.Assertions.assertFalse;
23+
import static org.junit.jupiter.api.Assertions.assertTrue;
24+
25+
class ParcelContentRepositoryIntegrationTest extends IntegrationTestSpec {
26+
27+
@TempDir
28+
private Path tempDir;
29+
30+
private DatabaseManager databaseManager;
31+
32+
@Test
33+
void test() {
34+
File dataFolder = tempDir.resolve("ParcelLockers").toFile();
35+
PluginConfiguration config = new ConfigurationManager(dataFolder).load(new PluginConfiguration());
36+
this.databaseManager = new DatabaseManager(config, Logger.getLogger("ParcelLockers"), dataFolder);
37+
38+
ParcelContentRepository parcelContentRepository = new ParcelContentRepositoryOrmLite(databaseManager, new TestScheduler());
39+
40+
ParcelContent parcelContent = new ParcelContent(UUID.randomUUID(), List.of(new ItemStack(Material.GOLD_BLOCK, 64)));
41+
parcelContentRepository.save(parcelContent);
42+
Optional<ParcelContent> retrievedParcelContent = await(parcelContentRepository.findByUUID(parcelContent.uniqueId()));
43+
assertTrue(retrievedParcelContent.isPresent(), "ParcelContent should be present");
44+
45+
parcelContentRepository.remove(parcelContent.uniqueId());
46+
Optional<ParcelContent> removedParcelContent = await(parcelContentRepository.findByUUID(parcelContent.uniqueId()));
47+
assertFalse(removedParcelContent.isPresent(), "ParcelContent should be removed");
48+
}
49+
50+
@AfterEach
51+
void tearDown() {
52+
if (this.databaseManager != null) {
53+
this.databaseManager.disconnect();
54+
}
55+
}
56+
57+
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package com.eternalcode.parcellockers.database;
2+
3+
import com.eternalcode.parcellockers.TestScheduler;
4+
import com.eternalcode.parcellockers.configuration.ConfigurationManager;
5+
import com.eternalcode.parcellockers.configuration.implementation.PluginConfiguration;
6+
import com.eternalcode.parcellockers.shared.Page;
7+
import com.eternalcode.parcellockers.user.User;
8+
import com.eternalcode.parcellockers.user.repository.UserRepository;
9+
import com.eternalcode.parcellockers.user.repository.UserRepositoryOrmLite;
10+
import org.junit.jupiter.api.AfterEach;
11+
import org.junit.jupiter.api.Test;
12+
import org.junit.jupiter.api.io.TempDir;
13+
import org.testcontainers.containers.MySQLContainer;
14+
import org.testcontainers.junit.jupiter.Container;
15+
import org.testcontainers.junit.jupiter.Testcontainers;
16+
17+
import java.io.File;
18+
import java.nio.file.Path;
19+
import java.util.Optional;
20+
import java.util.UUID;
21+
22+
import static org.junit.jupiter.api.Assertions.assertEquals;
23+
import static org.junit.jupiter.api.Assertions.assertTrue;
24+
25+
@Testcontainers
26+
class UserRepositoryIntegrationTest extends IntegrationTestSpec {
27+
28+
@Container
29+
private static final MySQLContainer container = new MySQLContainer();
30+
31+
@TempDir
32+
private Path tempDir;
33+
34+
private DatabaseManager databaseManager;
35+
36+
@Test
37+
void test() {
38+
File dataFolder = tempDir.resolve("ParcelLockers").toFile();
39+
PluginConfiguration config = new ConfigurationManager(dataFolder).load(new PluginConfiguration());
40+
DatabaseManager databaseManager = new DatabaseManager(config, null, dataFolder);
41+
this.databaseManager = databaseManager;
42+
43+
UserRepository userRepository = new UserRepositoryOrmLite(databaseManager, new TestScheduler());
44+
45+
UUID userUuid = UUID.randomUUID();
46+
String username = "testUser";
47+
User user = new User(userUuid, username);
48+
49+
userRepository.save(user);
50+
51+
Optional<User> userOptional = await(userRepository.getUser(userUuid));
52+
assertTrue(userOptional.isPresent());
53+
User retrievedUser = userOptional.get();
54+
assertEquals(retrievedUser.uuid(), userUuid);
55+
56+
userRepository.getPage(new Page(0, 10))
57+
.thenAccept(userPageResult -> assertTrue(userPageResult.users().stream().anyMatch(u -> u.uuid().equals(userUuid))));
58+
}
59+
60+
@AfterEach
61+
void tearDown() {
62+
if (this.databaseManager != null) {
63+
this.databaseManager.disconnect();
64+
}
65+
}
66+
67+
}

0 commit comments

Comments
 (0)