diff --git a/golemcore/slack/plugin.yaml b/golemcore/slack/plugin.yaml
index f8d3416..7ce8c37 100644
--- a/golemcore/slack/plugin.yaml
+++ b/golemcore/slack/plugin.yaml
@@ -1,7 +1,7 @@
id: golemcore/slack
provider: golemcore
name: slack
-version: 1.0.1
+version: 1.0.2
pluginApiVersion: 1
engineVersion: ">=0.0.0 <1.0.0"
entrypoint: me.golemcore.plugins.golemcore.slack.SlackPluginBootstrap
diff --git a/golemcore/slack/pom.xml b/golemcore/slack/pom.xml
index 3d8190a..c338fd4 100644
--- a/golemcore/slack/pom.xml
+++ b/golemcore/slack/pom.xml
@@ -9,7 +9,7 @@
../../pom.xml
- 1.0.1
+ 1.0.2
golemcore-slack-plugin
golemcore/slack
Slack Socket Mode channel plugin with interactive approvals for GolemCore
diff --git a/golemcore/slack/src/main/java/me/golemcore/plugins/golemcore/slack/SlackPluginConfig.java b/golemcore/slack/src/main/java/me/golemcore/plugins/golemcore/slack/SlackPluginConfig.java
index 42ff3af..6913d20 100644
--- a/golemcore/slack/src/main/java/me/golemcore/plugins/golemcore/slack/SlackPluginConfig.java
+++ b/golemcore/slack/src/main/java/me/golemcore/plugins/golemcore/slack/SlackPluginConfig.java
@@ -1,5 +1,7 @@
package me.golemcore.plugins.golemcore.slack;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
@@ -10,6 +12,7 @@
import java.util.List;
import java.util.Set;
+@JsonIgnoreProperties(ignoreUnknown = true)
@Data
@NoArgsConstructor
@AllArgsConstructor
@@ -44,6 +47,7 @@ public void normalize() {
allowedChannelIds = normalizeIdentifiers(allowedChannelIds);
}
+ @JsonIgnore
public boolean isConfigured() {
return botToken != null && !botToken.isBlank()
&& appToken != null && !appToken.isBlank();
diff --git a/golemcore/slack/src/test/java/me/golemcore/plugins/golemcore/slack/SlackPluginConfigServiceTest.java b/golemcore/slack/src/test/java/me/golemcore/plugins/golemcore/slack/SlackPluginConfigServiceTest.java
new file mode 100644
index 0000000..989da9d
--- /dev/null
+++ b/golemcore/slack/src/test/java/me/golemcore/plugins/golemcore/slack/SlackPluginConfigServiceTest.java
@@ -0,0 +1,73 @@
+package me.golemcore.plugins.golemcore.slack;
+
+import me.golemcore.plugin.api.runtime.PluginConfigurationService;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.mockito.ArgumentCaptor;
+
+import java.util.Map;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.mockito.Mockito.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+class SlackPluginConfigServiceTest {
+
+ private PluginConfigurationService pluginConfigurationService;
+ private SlackPluginConfigService service;
+
+ @BeforeEach
+ void setUp() {
+ pluginConfigurationService = mock(PluginConfigurationService.class);
+ service = new SlackPluginConfigService(pluginConfigurationService);
+ }
+
+ @Test
+ void shouldIgnoreLegacyConfiguredFieldWhenReadingStoredPluginConfig() {
+ when(pluginConfigurationService.getPluginConfig(SlackPluginConfigService.PLUGIN_ID)).thenReturn(Map.of(
+ "enabled", true,
+ "botToken", "xoxb-test",
+ "appToken", "xapp-test",
+ "replyInThread", false,
+ "configured", true,
+ "allowedUserIds", java.util.List.of("U123"),
+ "allowedChannelIds", java.util.List.of("C123")));
+
+ SlackPluginConfig config = service.getConfig();
+
+ assertEquals("xoxb-test", config.getBotToken());
+ assertEquals("xapp-test", config.getAppToken());
+ assertFalse(Boolean.TRUE.equals(config.getReplyInThread()));
+ assertEquals(java.util.List.of("U123"), config.getAllowedUserIds());
+ assertEquals(java.util.List.of("C123"), config.getAllowedChannelIds());
+ }
+
+ @Test
+ void shouldPersistNormalizedPluginConfigWithoutComputedFields() {
+ SlackPluginConfig config = SlackPluginConfig.builder()
+ .enabled(true)
+ .botToken(" xoxb-token ")
+ .appToken(" xapp-token ")
+ .replyInThread(null)
+ .allowedUserIds(java.util.List.of(" U123 ", "", "U123"))
+ .allowedChannelIds(java.util.List.of(" C123 ", "C123"))
+ .build();
+
+ service.save(config);
+
+ ArgumentCaptor