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
1 change: 1 addition & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ repositories {
configure(apiDependencies) {
serverApiVersion = '1.21.4-R0.1-SNAPSHOT'
mockBukkitServerApiVersion = '1.21'
mockBukkitVersion = '4.31.1'
}

dependencies {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ public Try<Void> load() {
for (final WorldGroup worldGroup : worldGroups) {
getGroupNames().put(worldGroup.getName().toLowerCase(), worldGroup);
}
Logging.fine("Loaded " + worldGroups.size() + " world groups from config.");
});
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -626,19 +626,19 @@ public boolean updatePlayer(Player player, PlayerProfile profile) {
/**
* Grouping for inventory sharables.
*/
public static final SharableGroup ALL_INVENTORY = new SharableGroup("inventory",
public static final Shares ALL_INVENTORY = new SharableGroup("inventory",
fromSharables(INVENTORY, ARMOR, ENDER_CHEST, OFF_HAND), "inv", "inventories");

/**
* Grouping for experience sharables.
*/
public static final SharableGroup ALL_EXPERIENCE = new SharableGroup("experience",
public static final Shares ALL_EXPERIENCE = new SharableGroup("experience",
fromSharables(EXPERIENCE, TOTAL_EXPERIENCE, LEVEL), "exp", "level");

/**
* Grouping for air/breath related sharables.
*/
public static final SharableGroup AIR = new SharableGroup("air",
public static final Shares AIR = new SharableGroup("air",
fromSharables(REMAINING_AIR, MAXIMUM_AIR), "breath");

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package org.mvplugins.multiverse.inventories

import org.junit.jupiter.api.Test
import org.mvplugins.multiverse.inventories.commands.InventoriesCommand
import org.mvplugins.multiverse.inventories.config.InventoriesConfig
import org.mvplugins.multiverse.inventories.listeners.InventoriesListener
import org.mvplugins.multiverse.inventories.profile.ProfileDataSource
import org.mvplugins.multiverse.inventories.profile.container.ProfileContainerStoreProvider
import org.mvplugins.multiverse.inventories.profile.group.WorldGroupManager
import kotlin.test.assertEquals
import kotlin.test.assertNotNull

class InjectionTest : TestWithMockBukkit() {

@Test
fun `InventoriesCommand are available as a service`() {
assertEquals(5, serviceLocator.getAllActiveServices(InventoriesCommand::class.java).size)
}

@Test
fun `InventoriesConfig is available as a service`() {
assertNotNull(serviceLocator.getActiveService(InventoriesConfig::class.java))
}

@Test
fun `InventoriesListener is available as a service`() {
assertNotNull(serviceLocator.getActiveService(InventoriesListener::class.java))
}

@Test
fun `ProfileDataSource is available as a service`() {
assertNotNull(serviceLocator.getActiveService(ProfileDataSource::class.java))
}

@Test
fun `ProfileContainerStoreProvider is available as a service`() {
assertNotNull(serviceLocator.getActiveService(ProfileContainerStoreProvider::class.java))
}

@Test
fun `WorldGroupManager is available as a service`() {
assertNotNull(serviceLocator.getActiveService(WorldGroupManager::class.java))
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,15 @@ import com.dumptruckman.minecraft.util.Logging
import org.bukkit.Location
import org.bukkit.configuration.MemorySection
import org.bukkit.configuration.file.YamlConfiguration
import org.bukkit.configuration.serialization.ConfigurationSerialization
import org.mockbukkit.mockbukkit.MockBukkit
import org.mockbukkit.mockbukkit.inventory.ItemStackMock
import org.mvplugins.multiverse.core.MultiverseCore
import org.mvplugins.multiverse.core.inject.PluginServiceLocator
import org.mvplugins.multiverse.inventories.mock.MVServerMock
import java.io.File
import java.nio.file.Path
import kotlin.io.path.absolutePathString
import kotlin.test.*

/**
Expand All @@ -22,6 +27,8 @@ abstract class TestWithMockBukkit {

@BeforeTest
fun setUpMockBukkit() {
ConfigurationSerialization.registerClass(ItemStackMock::class.java)

server = MockBukkit.mock(MVServerMock())
multiverseCore = MockBukkit.load(MultiverseCore::class.java)
multiverseInventories = MockBukkit.load(MultiverseInventories::class.java)
Expand All @@ -32,11 +39,20 @@ abstract class TestWithMockBukkit {

@AfterTest
fun tearDownMockBukkit() {
server.pluginManager.disablePlugin(multiverseInventories)
server.pluginManager.disablePlugin(multiverseCore)
MockBukkit.unmock()
}

fun getResourceAsText(path: String): String? = object {}.javaClass.getResource(path)?.readText()

fun writeResourceToConfigFile(resourcePath: String, configPath: String) {
val configResource = getResourceAsText(resourcePath)
assertNotNull(configResource)
File(Path.of(multiverseInventories.dataFolder.absolutePath, configPath).absolutePathString())
.writeText(configResource)
}

fun assertConfigEquals(expectedPath: String, actualPath: String) {
val actualString = multiverseInventories.dataFolder.toPath().resolve(actualPath).toFile().readText()
val expectedString = getResourceAsText(expectedPath)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package org.mvplugins.multiverse.inventories.commands

import org.mockbukkit.mockbukkit.command.ConsoleCommandSenderMock
import org.mockbukkit.mockbukkit.entity.PlayerMock
import org.mvplugins.multiverse.inventories.TestWithMockBukkit
import kotlin.test.BeforeTest

abstract class AbstractCommandTest : TestWithMockBukkit() {

protected lateinit var console: ConsoleCommandSenderMock
protected lateinit var player: PlayerMock

@BeforeTest
fun setUpCommand() {
console = server.consoleSender
player = server.addPlayer("benwoo1110");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package org.mvplugins.multiverse.inventories.commands

import org.mvplugins.multiverse.inventories.config.InventoriesConfig
import org.mvplugins.multiverse.inventories.share.Sharables
import kotlin.test.BeforeTest
import kotlin.test.Test
import kotlin.test.assertFalse
import kotlin.test.assertTrue

class ToggleCommandTest : AbstractCommandTest() {

private lateinit var config : InventoriesConfig

@BeforeTest
fun setUp() {
config = serviceLocator.getActiveService(InventoriesConfig::class.java).takeIf { it != null } ?: run {
throw IllegalStateException("InventoriesConfig is not available as a service") }
}

@Test
fun `Toggle last_location on and off`() {
assertFalse(config.optionalShares.contains(Sharables.LAST_LOCATION))
server.dispatchCommand(console, "mvinv toggle last_location")
assertTrue(config.optionalShares.contains(Sharables.LAST_LOCATION))
server.dispatchCommand(console, "mvinv toggle last_location")
assertFalse(config.optionalShares.contains(Sharables.LAST_LOCATION))
}

@Test
fun `Toggle economy on and off`() {
assertFalse(config.optionalShares.contains(Sharables.ECONOMY))
server.dispatchCommand(console, "mvinv toggle economy")
assertTrue(config.optionalShares.contains(Sharables.ECONOMY))
server.dispatchCommand(console, "mvinv toggle economy")
assertFalse(config.optionalShares.contains(Sharables.ECONOMY))
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package org.mvplugins.multiverse.inventories.gameplay

import org.mvplugins.multiverse.inventories.TestWithMockBukkit

class GameModeChangeTest : TestWithMockBukkit() {
//TODO
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
package org.mvplugins.multiverse.inventories.gameplay

import org.bukkit.Material
import org.bukkit.inventory.ItemStack
import org.mockbukkit.mockbukkit.entity.PlayerMock
import org.mvplugins.multiverse.core.world.WorldManager
import org.mvplugins.multiverse.core.world.options.CreateWorldOptions
import org.mvplugins.multiverse.inventories.TestWithMockBukkit
import org.mvplugins.multiverse.inventories.profile.ProfileDataSource
import org.mvplugins.multiverse.inventories.profile.group.WorldGroupManager
import java.nio.file.Path
import kotlin.test.BeforeTest
import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertFalse
import kotlin.test.assertNotEquals
import kotlin.test.assertTrue

class PlayerNameChangeTest : TestWithMockBukkit() {

private lateinit var profileDataSource: ProfileDataSource
private lateinit var player: PlayerMock

@BeforeTest
fun setUp() {
profileDataSource = serviceLocator.getService(ProfileDataSource::class.java).takeIf { it != null } ?: run {
throw IllegalStateException("ProfileDataSource is not available as a service") }

val worldManager = serviceLocator.getActiveService(WorldManager::class.java).takeIf { it != null } ?: run {
throw IllegalStateException("WorldManager is not available as a service") }
assertTrue(worldManager.createWorld(CreateWorldOptions.worldName("world")).isSuccess)
assertTrue(worldManager.createWorld(CreateWorldOptions.worldName("world_nether")).isSuccess)
assertTrue(worldManager.createWorld(CreateWorldOptions.worldName("test")).isSuccess)

val worldGroupManager = serviceLocator.getActiveService(WorldGroupManager::class.java).takeIf { it != null } ?: run {
throw IllegalStateException("WorldGroupManager is not available as a service") }
writeResourceToConfigFile("/gameplay/name_change_groups.yml", "groups.yml")
assertTrue(worldGroupManager.load().isSuccess)

player = server.addPlayer("Benji_0224")
}

@Test
fun `Player name changes`() {
val stack = ItemStack.of(Material.STONE_BRICKS, 5)
player.health = 5.0
player.inventory.setItem(0, stack)

server.getWorld("world_nether")?.let { player.teleport(it.spawnLocation) }
assertEquals(5.0, player.health)
assertEquals(stack, player.inventory.getItem(0))

server.getWorld("test")?.let { player.teleport(it.spawnLocation) }
assertNotEquals(5.0, player.health)
assertNotEquals(stack, player.inventory.getItem(0))

assertTrue(player.disconnect())
player.name = "benthecat10"
assertTrue(player.reconnect())

server.getWorld("world")?.let { player.teleport(it.spawnLocation) }
assertEquals(5.0, player.health)
assertEquals(stack, player.inventory.getItem(0))

// check files
assertTrue(Path.of(multiverseInventories.dataFolder.absolutePath, "worlds", "world", "benthecat10.json").toFile().exists())
assertTrue(Path.of(multiverseInventories.dataFolder.absolutePath, "worlds", "world_nether", "benthecat10.json").toFile().exists())
assertTrue(Path.of(multiverseInventories.dataFolder.absolutePath, "worlds", "test", "benthecat10.json").toFile().exists())
assertTrue(Path.of(multiverseInventories.dataFolder.absolutePath, "groups", "default", "benthecat10.json").toFile().exists())
assertTrue(Path.of(multiverseInventories.dataFolder.absolutePath, "groups", "test", "benthecat10.json").toFile().exists())

assertFalse(Path.of(multiverseInventories.dataFolder.absolutePath, "worlds", "world", "Benji_0224.json").toFile().exists())
assertFalse(Path.of(multiverseInventories.dataFolder.absolutePath, "worlds", "world_nether", "Benji_0224.json").toFile().exists())
assertFalse(Path.of(multiverseInventories.dataFolder.absolutePath, "worlds", "test", "Benji_0224.json").toFile().exists())
assertFalse(Path.of(multiverseInventories.dataFolder.absolutePath, "groups", "default", "Benji_0224.json").toFile().exists())
assertFalse(Path.of(multiverseInventories.dataFolder.absolutePath, "groups", "test", "Benji_0224.json").toFile().exists())

// check player profile
assertEquals("benthecat10", profileDataSource.getGlobalProfile(player)?.lastKnownName)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package org.mvplugins.multiverse.inventories.gameplay

import com.dumptruckman.minecraft.util.Logging
import org.bukkit.Material
import org.bukkit.inventory.ItemStack
import org.mvplugins.multiverse.core.world.WorldManager
import org.mvplugins.multiverse.core.world.options.CreateWorldOptions
import org.mvplugins.multiverse.inventories.TestWithMockBukkit
import kotlin.test.*

class WorldChangeTest : TestWithMockBukkit() {

@BeforeTest
fun setUp() {
val worldManager = serviceLocator.getActiveService(WorldManager::class.java).takeIf { it != null } ?: run {
throw IllegalStateException("WorldManager is not available as a service") }
assertTrue(worldManager.createWorld(CreateWorldOptions.worldName("world1")).isSuccess)
assertTrue(worldManager.createWorld(CreateWorldOptions.worldName("world2")).isSuccess)
assertTrue(worldManager.createWorld(CreateWorldOptions.worldName("world3")).isSuccess)
assertTrue(worldManager.createWorld(CreateWorldOptions.worldName("world4")).isSuccess)
}

@Test
fun `Test shares`() {
writeResourceToConfigFile("/gameplay/world_change_groups.yml", "groups.yml")
multiverseInventories.reloadConfig()
val player = server.addPlayer("Benji_0224")
Logging.fine("player world: " + server.getPlayer("Benji_0224")?.world?.name)
val stack = ItemStack.of(Material.STONE_BRICKS, 64)
player.inventory.setItem(0, stack)
server.getWorld("world2")?.let { player.teleport(it.spawnLocation) }
assertEquals(stack, player.inventory.getItem(0))
server.getWorld("world4")?.let { player.teleport(it.spawnLocation) }
assertNotEquals(stack, player.inventory.getItem(0))
server.getWorld("world2")?.let { player.teleport(it.spawnLocation) }
assertEquals(stack, player.inventory.getItem(0))
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package org.mvplugins.multiverse.inventories.profile

import org.mvplugins.multiverse.inventories.TestWithMockBukkit

class ProfileContainerTest : TestWithMockBukkit() {
//TODO
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package org.mvplugins.multiverse.inventories.profile

import org.mvplugins.multiverse.inventories.TestWithMockBukkit

class ProfileDataSourceTest : TestWithMockBukkit() {
//TODO
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package org.mvplugins.multiverse.inventories.profile

import org.mvplugins.multiverse.core.world.WorldManager
import org.mvplugins.multiverse.core.world.options.CreateWorldOptions
import org.mvplugins.multiverse.inventories.TestWithMockBukkit
import org.mvplugins.multiverse.inventories.profile.group.WorldGroupManager
import org.mvplugins.multiverse.inventories.share.Sharables
import kotlin.test.BeforeTest
import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertTrue

class WorldGroupManagerTest : TestWithMockBukkit() {

private lateinit var worldGroupManager: WorldGroupManager

@BeforeTest
fun setUp() {
worldGroupManager =
serviceLocator.getActiveService(WorldGroupManager::class.java).takeIf { it != null } ?: run {
throw IllegalStateException("WorldGroupManager is not available as a service")
}

val worldManager = serviceLocator.getActiveService(WorldManager::class.java).takeIf { it != null } ?: run {
throw IllegalStateException("WorldManager is not available as a service")
}
assertTrue(worldManager.createWorld(CreateWorldOptions.worldName("world")).isSuccess)
assertTrue(worldManager.createWorld(CreateWorldOptions.worldName("world_nether")).isSuccess)
}

@Test
fun `First run creates default group`() {
writeResourceToConfigFile("/group/empty.yml", "groups.yml")
assertTrue(worldGroupManager.load().isSuccess)
worldGroupManager.createDefaultGroup()
assertEquals("default", worldGroupManager.defaultGroup.name)
assertEquals(setOf("world", "world_nether"), worldGroupManager.defaultGroup.worlds)
assertConfigEquals("/group/default_group.yml", "groups.yml")
}

@Test
fun `Create a new group`() {
val group = worldGroupManager.newEmptyGroup("test")
group.addWorld("test1")
group.addWorld("test2")
group.shares.setSharing(Sharables.ALL_INVENTORY, true)
worldGroupManager.updateGroup(group)
assertConfigEquals("/group/test_group.yml", "groups.yml")
}
}
12 changes: 12 additions & 0 deletions src/test/resources/gameplay/name_change_groups.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
groups:
default:
worlds:
- world
- world_nether
shares:
- all
test:
worlds:
- test
shares:
- all
Loading