summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/LunaticChat.kt38
-rw-r--r--platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/command/setting/SettingHandler.kt43
-rw-r--r--platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/command/setting/SettingKey.kt47
-rw-r--r--platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/command/setting/handler/ChannelMessageNoticeSettingHandler.kt53
-rw-r--r--platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/command/setting/handler/DirectMessageNoticeSettingHandler.kt53
-rw-r--r--platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/command/setting/handler/JapaneseConversionSettingHandler.kt53
-rw-r--r--platform-paper/src/test/kotlin/dev/m1sk9/lunaticChat/paper/command/setting/SettingHandlerRegistryTest.kt16
-rw-r--r--platform-paper/src/test/kotlin/dev/m1sk9/lunaticChat/paper/command/setting/SettingHandlerTest.kt106
-rw-r--r--platform-paper/src/test/kotlin/dev/m1sk9/lunaticChat/paper/command/setting/handler/SettingHandlerTest.kt191
9 files changed, 196 insertions, 404 deletions
diff --git a/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/LunaticChat.kt b/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/LunaticChat.kt
index e006299..f0bbc2c 100644
--- a/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/LunaticChat.kt
+++ b/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/LunaticChat.kt
@@ -10,10 +10,9 @@ import dev.m1sk9.lunaticChat.paper.command.impl.ReplyCommand
import dev.m1sk9.lunaticChat.paper.command.impl.TellCommand
import dev.m1sk9.lunaticChat.paper.command.impl.lc.LunaticChatCommand
import dev.m1sk9.lunaticChat.paper.command.impl.lcv.VelocityStatusCommand
+import dev.m1sk9.lunaticChat.paper.command.setting.SettingHandler
import dev.m1sk9.lunaticChat.paper.command.setting.SettingHandlerRegistry
-import dev.m1sk9.lunaticChat.paper.command.setting.handler.ChannelMessageNoticeSettingHandler
-import dev.m1sk9.lunaticChat.paper.command.setting.handler.DirectMessageNoticeSettingHandler
-import dev.m1sk9.lunaticChat.paper.command.setting.handler.JapaneseConversionSettingHandler
+import dev.m1sk9.lunaticChat.paper.command.setting.SettingKey
import dev.m1sk9.lunaticChat.paper.common.UpdateCheckResult
import dev.m1sk9.lunaticChat.paper.common.UpdateChecker
import dev.m1sk9.lunaticChat.paper.config.ConfigManager
@@ -109,31 +108,16 @@ class LunaticChat :
val commandRegistry = CommandRegistry(this)
val settingHandlerRegistry = SettingHandlerRegistry()
- // Always register DM notification setting
- settingHandlerRegistry.register(
- DirectMessageNoticeSettingHandler(
- services.playerSettingsManager,
- services.languageManager,
- ),
- )
-
- // Always register channel message notification setting if channel is enabled
- if (services.channelManager != null) {
- settingHandlerRegistry.register(
- ChannelMessageNoticeSettingHandler(
- services.playerSettingsManager,
- services.languageManager,
- ),
- )
- }
-
- // Conditionally register Japanese conversion setting
- if (services.romajiConverter != null) {
+ // DM notification is always available; the other two follow their feature
+ val enabledSettings =
+ buildList {
+ add(SettingKey.Notice)
+ if (services.channelManager != null) add(SettingKey.ChNotice)
+ if (services.romajiConverter != null) add(SettingKey.Japanese)
+ }
+ enabledSettings.forEach { key ->
settingHandlerRegistry.register(
- JapaneseConversionSettingHandler(
- services.playerSettingsManager,
- services.languageManager,
- ),
+ SettingHandler(key, services.playerSettingsManager, services.languageManager),
)
}
diff --git a/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/command/setting/SettingHandler.kt b/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/command/setting/SettingHandler.kt
index c36257c..7b1fcdd 100644
--- a/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/command/setting/SettingHandler.kt
+++ b/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/command/setting/SettingHandler.kt
@@ -2,18 +2,21 @@ package dev.m1sk9.lunaticChat.paper.command.setting
import dev.m1sk9.lunaticChat.engine.command.CommandResult
import dev.m1sk9.lunaticChat.paper.command.core.CommandContext
+import dev.m1sk9.lunaticChat.paper.i18n.LanguageManager
+import dev.m1sk9.lunaticChat.paper.i18n.MessageFormatter
+import dev.m1sk9.lunaticChat.paper.settings.PlayerSettingsManager
/**
- * Interface for handling individual setting operations.
- * Each setting (japanese, notice, etc.) implements this interface to provide
- * its own logic for getting, setting, and displaying status.
+ * Reads and writes one player setting, identified by [key].
+ *
+ * Everything that differs between settings lives on the [SettingKey]; this class is the shared
+ * mechanism that applies it.
*/
-interface SettingHandler {
- /**
- * The setting key this handler manages.
- */
- val key: SettingKey
-
+class SettingHandler(
+ val key: SettingKey,
+ private val settingsManager: PlayerSettingsManager,
+ private val languageManager: LanguageManager,
+) {
/**
* Enables or disables the setting for a player.
*
@@ -24,7 +27,14 @@ interface SettingHandler {
fun execute(
ctx: CommandContext,
enable: Boolean,
- ): CommandResult
+ ): CommandResult {
+ val player = ctx.requirePlayer()
+ val settings = settingsManager.getSettings(player.uniqueId)
+ settingsManager.updateSettings(key.write(settings, enable))
+
+ player.sendMessage(MessageFormatter.formatSuccess(message(key.toggleMessageKey, enable)))
+ return CommandResult.Success
+ }
/**
* Shows the current status of the setting for a player.
@@ -32,5 +42,16 @@ interface SettingHandler {
* @param ctx The command context containing player information
* @return Command result indicating success or failure
*/
- fun showStatus(ctx: CommandContext): CommandResult
+ fun showStatus(ctx: CommandContext): CommandResult {
+ val player = ctx.requirePlayer()
+ val settings = settingsManager.getSettings(player.uniqueId)
+
+ player.sendMessage(MessageFormatter.format(message(key.statusMessageKey, key.read(settings))))
+ return CommandResult.Success
+ }
+
+ private fun message(
+ messageKey: String,
+ enabled: Boolean,
+ ): String = languageManager.getMessage(messageKey, mapOf("toggle" to languageManager.getToggleText(enabled)))
}
diff --git a/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/command/setting/SettingKey.kt b/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/command/setting/SettingKey.kt
index 076a7aa..2106cc5 100644
--- a/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/command/setting/SettingKey.kt
+++ b/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/command/setting/SettingKey.kt
@@ -1,29 +1,68 @@
package dev.m1sk9.lunaticChat.paper.command.setting
+import dev.m1sk9.lunaticChat.engine.settings.PlayerChatSettings
+
/**
* Sealed class representing all available setting keys.
- * Each setting key has a unique identifier used in command arguments.
+ *
+ * A setting is fully described here: the literal it is typed as, the messages that report it, and
+ * how it is read from and written to [PlayerChatSettings]. [SettingHandler] is the one mechanism
+ * that drives all of them.
+ *
+ * @property key Unique identifier used in command arguments
+ * @property toggleMessageKey Language key for the message confirming a change
+ * @property statusMessageKey Language key for the message reporting the current value
*/
sealed class SettingKey(
val key: String,
+ val toggleMessageKey: String,
+ val statusMessageKey: String,
) {
+ abstract fun read(settings: PlayerChatSettings): Boolean
+
+ abstract fun write(
+ settings: PlayerChatSettings,
+ enabled: Boolean,
+ ): PlayerChatSettings
+
/**
* Japanese romaji conversion setting
* Command: /lc setting japanese <on|off>
*/
- data object Japanese : SettingKey("japanese")
+ data object Japanese : SettingKey("japanese", "romajiConversion.toggle", "romajiConversion.status") {
+ override fun read(settings: PlayerChatSettings) = settings.japaneseConversionEnabled
+
+ override fun write(
+ settings: PlayerChatSettings,
+ enabled: Boolean,
+ ) = settings.copy(japaneseConversionEnabled = enabled)
+ }
/**
* Direct message notification setting
* Command: /lc setting notice <on|off>
*/
- data object Notice : SettingKey("notice")
+ data object Notice : SettingKey("notice", "directMessage.noticeToggle", "directMessage.noticeStatus") {
+ override fun read(settings: PlayerChatSettings) = settings.directMessageNotificationEnabled
+
+ override fun write(
+ settings: PlayerChatSettings,
+ enabled: Boolean,
+ ) = settings.copy(directMessageNotificationEnabled = enabled)
+ }
/**
* Channel message notification setting
* Command: /lc setting chNotice <on|off>
*/
- data object ChNotice : SettingKey("chNotice")
+ data object ChNotice : SettingKey("chNotice", "channelMessage.noticeToggle", "channelMessage.noticeStatus") {
+ override fun read(settings: PlayerChatSettings) = settings.channelMessageNotificationEnabled
+
+ override fun write(
+ settings: PlayerChatSettings,
+ enabled: Boolean,
+ ) = settings.copy(channelMessageNotificationEnabled = enabled)
+ }
companion object {
/**
diff --git a/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/command/setting/handler/ChannelMessageNoticeSettingHandler.kt b/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/command/setting/handler/ChannelMessageNoticeSettingHandler.kt
deleted file mode 100644
index 8867e7c..0000000
--- a/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/command/setting/handler/ChannelMessageNoticeSettingHandler.kt
+++ /dev/null
@@ -1,53 +0,0 @@
-package dev.m1sk9.lunaticChat.paper.command.setting.handler
-
-import dev.m1sk9.lunaticChat.engine.command.CommandResult
-import dev.m1sk9.lunaticChat.paper.command.core.CommandContext
-import dev.m1sk9.lunaticChat.paper.command.setting.SettingHandler
-import dev.m1sk9.lunaticChat.paper.command.setting.SettingKey
-import dev.m1sk9.lunaticChat.paper.i18n.LanguageManager
-import dev.m1sk9.lunaticChat.paper.i18n.MessageFormatter
-import dev.m1sk9.lunaticChat.paper.settings.PlayerSettingsManager
-
-/**
- * Handles the channel message notification setting.
- * Manages enabling/disabling channel message notifications for players.
- */
-class ChannelMessageNoticeSettingHandler(
- private val settingsManager: PlayerSettingsManager,
- private val languageManager: LanguageManager,
-) : SettingHandler {
- override val key: SettingKey = SettingKey.ChNotice
-
- override fun execute(
- ctx: CommandContext,
- enable: Boolean,
- ): CommandResult {
- val player = ctx.requirePlayer()
- val currentSettings = settingsManager.getSettings(player.uniqueId)
- val updatedSettings = currentSettings.copy(channelMessageNotificationEnabled = enable)
- settingsManager.updateSettings(updatedSettings)
-
- val toggleText = languageManager.getToggleText(enable)
- val message =
- MessageFormatter.formatSuccess(
- languageManager.getMessage("channelMessage.noticeToggle", mapOf("toggle" to toggleText)),
- )
-
- player.sendMessage(message)
- return CommandResult.Success
- }
-
- override fun showStatus(ctx: CommandContext): CommandResult {
- val player = ctx.requirePlayer()
- val settings = settingsManager.getSettings(player.uniqueId)
-
- val toggleText = languageManager.getToggleText(settings.channelMessageNotificationEnabled)
- val message =
- MessageFormatter.format(
- languageManager.getMessage("channelMessage.noticeStatus", mapOf("toggle" to toggleText)),
- )
-
- player.sendMessage(message)
- return CommandResult.Success
- }
-}
diff --git a/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/command/setting/handler/DirectMessageNoticeSettingHandler.kt b/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/command/setting/handler/DirectMessageNoticeSettingHandler.kt
deleted file mode 100644
index 1564615..0000000
--- a/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/command/setting/handler/DirectMessageNoticeSettingHandler.kt
+++ /dev/null
@@ -1,53 +0,0 @@
-package dev.m1sk9.lunaticChat.paper.command.setting.handler
-
-import dev.m1sk9.lunaticChat.engine.command.CommandResult
-import dev.m1sk9.lunaticChat.paper.command.core.CommandContext
-import dev.m1sk9.lunaticChat.paper.command.setting.SettingHandler
-import dev.m1sk9.lunaticChat.paper.command.setting.SettingKey
-import dev.m1sk9.lunaticChat.paper.i18n.LanguageManager
-import dev.m1sk9.lunaticChat.paper.i18n.MessageFormatter
-import dev.m1sk9.lunaticChat.paper.settings.PlayerSettingsManager
-
-/**
- * Handles the direct message notification setting.
- * Manages enabling/disabling DM notifications for players.
- */
-class DirectMessageNoticeSettingHandler(
- private val settingsManager: PlayerSettingsManager,
- private val languageManager: LanguageManager,
-) : SettingHandler {
- override val key: SettingKey = SettingKey.Notice
-
- override fun execute(
- ctx: CommandContext,
- enable: Boolean,
- ): CommandResult {
- val player = ctx.requirePlayer()
- val currentSettings = settingsManager.getSettings(player.uniqueId)
- val updatedSettings = currentSettings.copy(directMessageNotificationEnabled = enable)
- settingsManager.updateSettings(updatedSettings)
-
- val toggleText = languageManager.getToggleText(enable)
- val message =
- MessageFormatter.formatSuccess(
- languageManager.getMessage("directMessage.noticeToggle", mapOf("toggle" to toggleText)),
- )
-
- player.sendMessage(message)
- return CommandResult.Success
- }
-
- override fun showStatus(ctx: CommandContext): CommandResult {
- val player = ctx.requirePlayer()
- val settings = settingsManager.getSettings(player.uniqueId)
-
- val toggleText = languageManager.getToggleText(settings.directMessageNotificationEnabled)
- val message =
- MessageFormatter.format(
- languageManager.getMessage("directMessage.noticeStatus", mapOf("toggle" to toggleText)),
- )
-
- player.sendMessage(message)
- return CommandResult.Success
- }
-}
diff --git a/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/command/setting/handler/JapaneseConversionSettingHandler.kt b/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/command/setting/handler/JapaneseConversionSettingHandler.kt
deleted file mode 100644
index 2c682ba..0000000
--- a/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/command/setting/handler/JapaneseConversionSettingHandler.kt
+++ /dev/null
@@ -1,53 +0,0 @@
-package dev.m1sk9.lunaticChat.paper.command.setting.handler
-
-import dev.m1sk9.lunaticChat.engine.command.CommandResult
-import dev.m1sk9.lunaticChat.paper.command.core.CommandContext
-import dev.m1sk9.lunaticChat.paper.command.setting.SettingHandler
-import dev.m1sk9.lunaticChat.paper.command.setting.SettingKey
-import dev.m1sk9.lunaticChat.paper.i18n.LanguageManager
-import dev.m1sk9.lunaticChat.paper.i18n.MessageFormatter
-import dev.m1sk9.lunaticChat.paper.settings.PlayerSettingsManager
-
-/**
- * Handles the Japanese romaji conversion setting.
- * Manages enabling/disabling Japanese conversion for players.
- */
-class JapaneseConversionSettingHandler(
- private val settingsManager: PlayerSettingsManager,
- private val languageManager: LanguageManager,
-) : SettingHandler {
- override val key: SettingKey = SettingKey.Japanese
-
- override fun execute(
- ctx: CommandContext,
- enable: Boolean,
- ): CommandResult {
- val player = ctx.requirePlayer()
- val currentSettings = settingsManager.getSettings(player.uniqueId)
- val updatedSettings = currentSettings.copy(japaneseConversionEnabled = enable)
- settingsManager.updateSettings(updatedSettings)
-
- val toggleText = languageManager.getToggleText(enable)
- val message =
- MessageFormatter.formatSuccess(
- languageManager.getMessage("romajiConversion.toggle", mapOf("toggle" to toggleText)),
- )
-
- player.sendMessage(message)
- return CommandResult.Success
- }
-
- override fun showStatus(ctx: CommandContext): CommandResult {
- val player = ctx.requirePlayer()
- val settings = settingsManager.getSettings(player.uniqueId)
-
- val toggleText = languageManager.getToggleText(settings.japaneseConversionEnabled)
- val message =
- MessageFormatter.format(
- languageManager.getMessage("romajiConversion.status", mapOf("toggle" to toggleText)),
- )
-
- player.sendMessage(message)
- return CommandResult.Success
- }
-}
diff --git a/platform-paper/src/test/kotlin/dev/m1sk9/lunaticChat/paper/command/setting/SettingHandlerRegistryTest.kt b/platform-paper/src/test/kotlin/dev/m1sk9/lunaticChat/paper/command/setting/SettingHandlerRegistryTest.kt
index 52927a8..e05426e 100644
--- a/platform-paper/src/test/kotlin/dev/m1sk9/lunaticChat/paper/command/setting/SettingHandlerRegistryTest.kt
+++ b/platform-paper/src/test/kotlin/dev/m1sk9/lunaticChat/paper/command/setting/SettingHandlerRegistryTest.kt
@@ -1,7 +1,8 @@
package dev.m1sk9.lunaticChat.paper.command.setting
-import dev.m1sk9.lunaticChat.engine.command.CommandResult
-import dev.m1sk9.lunaticChat.paper.command.core.CommandContext
+import dev.m1sk9.lunaticChat.paper.i18n.LanguageManager
+import dev.m1sk9.lunaticChat.paper.settings.PlayerSettingsManager
+import io.mockk.mockk
import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertNull
@@ -9,16 +10,7 @@ import kotlin.test.assertTrue
class SettingHandlerRegistryTest {
private fun createMockHandler(settingKey: SettingKey): SettingHandler =
- object : SettingHandler {
- override val key: SettingKey = settingKey
-
- override fun execute(
- ctx: CommandContext,
- enable: Boolean,
- ): CommandResult = CommandResult.Success
-
- override fun showStatus(ctx: CommandContext): CommandResult = CommandResult.Success
- }
+ SettingHandler(settingKey, mockk<PlayerSettingsManager>(relaxed = true), mockk<LanguageManager>(relaxed = true))
@Test
fun `register should make handler retrievable`() {
diff --git a/platform-paper/src/test/kotlin/dev/m1sk9/lunaticChat/paper/command/setting/SettingHandlerTest.kt b/platform-paper/src/test/kotlin/dev/m1sk9/lunaticChat/paper/command/setting/SettingHandlerTest.kt
new file mode 100644
index 0000000..3e80ba0
--- /dev/null
+++ b/platform-paper/src/test/kotlin/dev/m1sk9/lunaticChat/paper/command/setting/SettingHandlerTest.kt
@@ -0,0 +1,106 @@
+package dev.m1sk9.lunaticChat.paper.command.setting
+
+import dev.m1sk9.lunaticChat.engine.command.CommandResult
+import dev.m1sk9.lunaticChat.paper.TestUtils
+import dev.m1sk9.lunaticChat.paper.command.core.CommandContext
+import dev.m1sk9.lunaticChat.paper.i18n.LanguageManager
+import dev.m1sk9.lunaticChat.paper.settings.PlayerSettingsManager
+import io.mockk.every
+import io.mockk.mockk
+import io.mockk.verify
+import net.kyori.adventure.text.Component
+import java.util.UUID
+import kotlin.test.Test
+import kotlin.test.assertEquals
+import kotlin.test.assertFalse
+import kotlin.test.assertIs
+import kotlin.test.assertTrue
+
+class SettingHandlerTest {
+ private val testUUID = UUID.fromString("00000001-0000-0000-0000-000000000000")
+
+ private class Fixture(
+ key: SettingKey,
+ uuid: UUID,
+ ) {
+ val ctx = mockk<CommandContext>(relaxed = true)
+ val settingsManager = mockk<PlayerSettingsManager>(relaxed = true)
+ val languageManager = mockk<LanguageManager>(relaxed = true)
+ val handler: SettingHandler
+
+ init {
+ every { ctx.requirePlayer() } returns TestUtils.createMockPlayer(uuid = uuid, name = "TestPlayer")
+ every { settingsManager.getSettings(uuid) } returns TestUtils.createTestPlayerSettings(uuid = uuid)
+ every { languageManager.getMessage(any(), any()) } returns "test message"
+ every { languageManager.getToggleText(any()) } returns "ON"
+ handler = SettingHandler(key, settingsManager, languageManager)
+ }
+ }
+
+ private fun eachKey(assertion: (SettingKey, Fixture) -> Unit) =
+ SettingKey.values().forEach { key -> assertion(key, Fixture(key, testUUID)) }
+
+ @Test
+ fun `execute enable writes the setting as enabled`() =
+ eachKey { key, f ->
+ assertIs<CommandResult.Success>(f.handler.execute(f.ctx, true))
+ verify { f.settingsManager.updateSettings(match { key.read(it) }) }
+ }
+
+ @Test
+ fun `execute disable writes the setting as disabled`() =
+ eachKey { key, f ->
+ assertIs<CommandResult.Success>(f.handler.execute(f.ctx, false))
+ verify { f.settingsManager.updateSettings(match { !key.read(it) }) }
+ }
+
+ @Test
+ fun `execute reports the change with the toggle message`() =
+ eachKey { key, f ->
+ f.handler.execute(f.ctx, true)
+
+ val player = f.ctx.requirePlayer()
+ verify { f.languageManager.getMessage(key.toggleMessageKey, mapOf("toggle" to "ON")) }
+ verify { player.sendMessage(any<Component>()) }
+ }
+
+ @Test
+ fun `showStatus reports the current value with the status message`() =
+ eachKey { key, f ->
+ assertIs<CommandResult.Success>(f.handler.showStatus(f.ctx))
+
+ val player = f.ctx.requirePlayer()
+ verify { f.languageManager.getMessage(key.statusMessageKey, mapOf("toggle" to "ON")) }
+ verify { player.sendMessage(any<Component>()) }
+ }
+
+ @Test
+ fun `handler exposes the key it was built for`() = eachKey { key, f -> assertEquals(key, f.handler.key) }
+
+ @Test
+ fun `each key round-trips through write and read`() {
+ val settings = TestUtils.createTestPlayerSettings(uuid = testUUID)
+
+ SettingKey.values().forEach { key ->
+ assertTrue(key.read(key.write(settings, true)), key.key)
+ assertFalse(key.read(key.write(settings, false)), key.key)
+ }
+ }
+
+ @Test
+ fun `writing one key leaves the other settings untouched`() {
+ val original = TestUtils.createTestPlayerSettings(uuid = testUUID)
+
+ SettingKey.values().forEach { key ->
+ val flipped = key.write(original, !key.read(original))
+
+ SettingKey.values().filterNot { it == key }.forEach { other ->
+ assertEquals(
+ other.read(original),
+ other.read(flipped),
+ "${other.key} changed while writing ${key.key}",
+ )
+ }
+ }
+ }
+}
diff --git a/platform-paper/src/test/kotlin/dev/m1sk9/lunaticChat/paper/command/setting/handler/SettingHandlerTest.kt b/platform-paper/src/test/kotlin/dev/m1sk9/lunaticChat/paper/command/setting/handler/SettingHandlerTest.kt
deleted file mode 100644
index 1967e1c..0000000
--- a/platform-paper/src/test/kotlin/dev/m1sk9/lunaticChat/paper/command/setting/handler/SettingHandlerTest.kt
+++ /dev/null
@@ -1,191 +0,0 @@
-package dev.m1sk9.lunaticChat.paper.command.setting.handler
-
-import dev.m1sk9.lunaticChat.engine.command.CommandResult
-import dev.m1sk9.lunaticChat.paper.TestUtils
-import dev.m1sk9.lunaticChat.paper.command.core.CommandContext
-import dev.m1sk9.lunaticChat.paper.command.setting.SettingKey
-import dev.m1sk9.lunaticChat.paper.i18n.LanguageManager
-import dev.m1sk9.lunaticChat.paper.settings.PlayerSettingsManager
-import io.mockk.every
-import io.mockk.mockk
-import io.mockk.verify
-import net.kyori.adventure.text.Component
-import java.util.UUID
-import kotlin.test.Test
-import kotlin.test.assertIs
-
-class SettingHandlerTest {
- private val testUUID = UUID.fromString("00000001-0000-0000-0000-000000000000")
-
- private fun createDependencies(): Triple<CommandContext, PlayerSettingsManager, LanguageManager> {
- val player = TestUtils.createMockPlayer(uuid = testUUID, name = "TestPlayer")
- val ctx = mockk<CommandContext>(relaxed = true)
- every { ctx.requirePlayer() } returns player
-
- val settingsManager = mockk<PlayerSettingsManager>(relaxed = true)
- every { settingsManager.getSettings(testUUID) } returns
- TestUtils.createTestPlayerSettings(uuid = testUUID)
-
- val languageManager = mockk<LanguageManager>(relaxed = true)
- every { languageManager.getMessage(any(), any()) } returns "test message"
- every { languageManager.getToggleText(any()) } returns "ON"
-
- return Triple(ctx, settingsManager, languageManager)
- }
-
- // --- JapaneseConversionSettingHandler ---
-
- @Test
- fun `JapaneseConversionSettingHandler key should be Japanese`() {
- val (_, settingsManager, languageManager) = createDependencies()
- val handler = JapaneseConversionSettingHandler(settingsManager, languageManager)
- assertIs<SettingKey.Japanese>(handler.key)
- }
-
- @Test
- fun `JapaneseConversionSettingHandler execute enable should return Success`() {
- val (ctx, settingsManager, languageManager) = createDependencies()
- val handler = JapaneseConversionSettingHandler(settingsManager, languageManager)
-
- val result = handler.execute(ctx, true)
-
- assertIs<CommandResult.Success>(result)
- verify { settingsManager.updateSettings(match { it.japaneseConversionEnabled }) }
- }
-
- @Test
- fun `JapaneseConversionSettingHandler execute disable should return Success`() {
- val (ctx, settingsManager, languageManager) = createDependencies()
- val handler = JapaneseConversionSettingHandler(settingsManager, languageManager)
-
- val result = handler.execute(ctx, false)
-
- assertIs<CommandResult.Success>(result)
- verify { settingsManager.updateSettings(match { !it.japaneseConversionEnabled }) }
- }
-
- @Test
- fun `JapaneseConversionSettingHandler showStatus should return Success`() {
- val (ctx, settingsManager, languageManager) = createDependencies()
- val handler = JapaneseConversionSettingHandler(settingsManager, languageManager)
-
- val result = handler.showStatus(ctx)
-
- assertIs<CommandResult.Success>(result)
- }
-
- @Test
- fun `JapaneseConversionSettingHandler execute should send message to player`() {
- val (ctx, settingsManager, languageManager) = createDependencies()
- val handler = JapaneseConversionSettingHandler(settingsManager, languageManager)
-
- handler.execute(ctx, true)
-
- val player = ctx.requirePlayer()
- verify { player.sendMessage(any<Component>()) }
- }
-
- // --- DirectMessageNoticeSettingHandler ---
-
- @Test
- fun `DirectMessageNoticeSettingHandler key should be Notice`() {
- val (_, settingsManager, languageManager) = createDependencies()
- val handler = DirectMessageNoticeSettingHandler(settingsManager, languageManager)
- assertIs<SettingKey.Notice>(handler.key)
- }
-
- @Test
- fun `DirectMessageNoticeSettingHandler execute enable should return Success`() {
- val (ctx, settingsManager, languageManager) = createDependencies()
- val handler = DirectMessageNoticeSettingHandler(settingsManager, languageManager)
-
- val result = handler.execute(ctx, true)
-
- assertIs<CommandResult.Success>(result)
- verify { settingsManager.updateSettings(match { it.directMessageNotificationEnabled }) }
- }
-
- @Test
- fun `DirectMessageNoticeSettingHandler execute disable should return Success`() {
- val (ctx, settingsManager, languageManager) = createDependencies()
- val handler = DirectMessageNoticeSettingHandler(settingsManager, languageManager)
-
- val result = handler.execute(ctx, false)
-
- assertIs<CommandResult.Success>(result)
- verify { settingsManager.updateSettings(match { !it.directMessageNotificationEnabled }) }
- }
-
- @Test
- fun `DirectMessageNoticeSettingHandler showStatus should return Success`() {
- val (ctx, settingsManager, languageManager) = createDependencies()
- val handler = DirectMessageNoticeSettingHandler(settingsManager, languageManager)
-
- val result = handler.showStatus(ctx)
-
- assertIs<CommandResult.Success>(result)
- }
-
- @Test
- fun `DirectMessageNoticeSettingHandler execute should send message to player`() {
- val (ctx, settingsManager, languageManager) = createDependencies()
- val handler = DirectMessageNoticeSettingHandler(settingsManager, languageManager)
-
- handler.execute(ctx, true)
-
- val player = ctx.requirePlayer()
- verify { player.sendMessage(any<Component>()) }
- }
-
- // --- ChannelMessageNoticeSettingHandler ---
-
- @Test
- fun `ChannelMessageNoticeSettingHandler key should be ChNotice`() {
- val (_, settingsManager, languageManager) = createDependencies()
- val handler = ChannelMessageNoticeSettingHandler(settingsManager, languageManager)
- assertIs<SettingKey.ChNotice>(handler.key)
- }
-
- @Test
- fun `ChannelMessageNoticeSettingHandler execute enable should return Success`() {
- val (ctx, settingsManager, languageManager) = createDependencies()
- val handler = ChannelMessageNoticeSettingHandler(settingsManager, languageManager)
-
- val result = handler.execute(ctx, true)
-
- assertIs<CommandResult.Success>(result)
- verify { settingsManager.updateSettings(match { it.channelMessageNotificationEnabled }) }
- }
-
- @Test
- fun `ChannelMessageNoticeSettingHandler execute disable should return Success`() {
- val (ctx, settingsManager, languageManager) = createDependencies()
- val handler = ChannelMessageNoticeSettingHandler(settingsManager, languageManager)
-
- val result = handler.execute(ctx, false)
-
- assertIs<CommandResult.Success>(result)
- verify { settingsManager.updateSettings(match { !it.channelMessageNotificationEnabled }) }
- }
-
- @Test
- fun `ChannelMessageNoticeSettingHandler showStatus should return Success`() {
- val (ctx, settingsManager, languageManager) = createDependencies()
- val handler = ChannelMessageNoticeSettingHandler(settingsManager, languageManager)
-
- val result = handler.showStatus(ctx)
-
- assertIs<CommandResult.Success>(result)
- }
-
- @Test
- fun `ChannelMessageNoticeSettingHandler execute should send message to player`() {
- val (ctx, settingsManager, languageManager) = createDependencies()
- val handler = ChannelMessageNoticeSettingHandler(settingsManager, languageManager)
-
- handler.execute(ctx, true)
-
- val player = ctx.requirePlayer()
- verify { player.sendMessage(any<Component>()) }
- }
-}