feat: allow enabling all plugins into a channel
This commit is contained in:
parent
899ac49336
commit
3b09a9dd47
10 changed files with 915 additions and 17 deletions
203
internal/db/db_test.go
Normal file
203
internal/db/db_test.go
Normal file
|
@ -0,0 +1,203 @@
|
|||
package db
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"git.nakama.town/fmartingr/butterrobot/internal/model"
|
||||
)
|
||||
|
||||
func TestEnableAllPlugins(t *testing.T) {
|
||||
// Create temporary database for testing with unique name
|
||||
dbFile := fmt.Sprintf("test_db_%d.db", time.Now().UnixNano())
|
||||
database, err := New(dbFile)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to create test database: %v", err)
|
||||
}
|
||||
defer func() {
|
||||
_ = database.Close()
|
||||
// Clean up test database file
|
||||
_ = os.Remove(dbFile)
|
||||
}()
|
||||
|
||||
t.Run("CreateChannel with EnableAllPlugins default false", func(t *testing.T) {
|
||||
channelRaw := map[string]interface{}{
|
||||
"name": "test-channel",
|
||||
}
|
||||
|
||||
channel, err := database.CreateChannel("telegram", "123456", true, channelRaw)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to create channel: %v", err)
|
||||
}
|
||||
|
||||
if channel.EnableAllPlugins {
|
||||
t.Errorf("Expected EnableAllPlugins to be false by default, got true")
|
||||
}
|
||||
|
||||
// Verify it's also false when retrieved from database
|
||||
retrieved, err := database.GetChannelByID(channel.ID)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to retrieve channel: %v", err)
|
||||
}
|
||||
|
||||
if retrieved.EnableAllPlugins {
|
||||
t.Errorf("Expected EnableAllPlugins to be false when retrieved from DB, got true")
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("UpdateChannelEnableAllPlugins", func(t *testing.T) {
|
||||
// Create a channel
|
||||
channelRaw := map[string]interface{}{
|
||||
"name": "test-channel-2",
|
||||
}
|
||||
|
||||
channel, err := database.CreateChannel("telegram", "123457", true, channelRaw)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to create channel: %v", err)
|
||||
}
|
||||
|
||||
// Update EnableAllPlugins to true
|
||||
err = database.UpdateChannelEnableAllPlugins(channel.ID, true)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to update EnableAllPlugins: %v", err)
|
||||
}
|
||||
|
||||
// Retrieve and verify
|
||||
retrieved, err := database.GetChannelByID(channel.ID)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to retrieve channel: %v", err)
|
||||
}
|
||||
|
||||
if !retrieved.EnableAllPlugins {
|
||||
t.Errorf("Expected EnableAllPlugins to be true after update, got false")
|
||||
}
|
||||
|
||||
// Update back to false
|
||||
err = database.UpdateChannelEnableAllPlugins(channel.ID, false)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to update EnableAllPlugins back to false: %v", err)
|
||||
}
|
||||
|
||||
// Retrieve and verify again
|
||||
retrieved, err = database.GetChannelByID(channel.ID)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to retrieve channel: %v", err)
|
||||
}
|
||||
|
||||
if retrieved.EnableAllPlugins {
|
||||
t.Errorf("Expected EnableAllPlugins to be false after second update, got true")
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("GetChannelByPlatform includes EnableAllPlugins", func(t *testing.T) {
|
||||
// Create a channel
|
||||
channelRaw := map[string]interface{}{
|
||||
"name": "test-channel-3",
|
||||
}
|
||||
|
||||
channel, err := database.CreateChannel("slack", "C123456", true, channelRaw)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to create channel: %v", err)
|
||||
}
|
||||
|
||||
// Enable all plugins
|
||||
err = database.UpdateChannelEnableAllPlugins(channel.ID, true)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to update EnableAllPlugins: %v", err)
|
||||
}
|
||||
|
||||
// Retrieve by platform
|
||||
retrieved, err := database.GetChannelByPlatform("slack", "C123456")
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to retrieve channel by platform: %v", err)
|
||||
}
|
||||
|
||||
if !retrieved.EnableAllPlugins {
|
||||
t.Errorf("Expected EnableAllPlugins to be true when retrieved by platform, got false")
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("GetAllChannels includes EnableAllPlugins", func(t *testing.T) {
|
||||
// Create multiple channels with different EnableAllPlugins settings
|
||||
channelRaw1 := map[string]interface{}{"name": "channel-1"}
|
||||
channelRaw2 := map[string]interface{}{"name": "channel-2"}
|
||||
|
||||
channel1, err := database.CreateChannel("platform1", "ch1", true, channelRaw1)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to create channel1: %v", err)
|
||||
}
|
||||
|
||||
channel2, err := database.CreateChannel("platform2", "ch2", true, channelRaw2)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to create channel2: %v", err)
|
||||
}
|
||||
|
||||
// Enable all plugins for channel2 only
|
||||
err = database.UpdateChannelEnableAllPlugins(channel2.ID, true)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to update EnableAllPlugins for channel2: %v", err)
|
||||
}
|
||||
|
||||
// Get all channels
|
||||
channels, err := database.GetAllChannels()
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to get all channels: %v", err)
|
||||
}
|
||||
|
||||
// Find our test channels
|
||||
var foundChannel1, foundChannel2 *model.Channel
|
||||
for _, ch := range channels {
|
||||
if ch.ID == channel1.ID {
|
||||
foundChannel1 = ch
|
||||
}
|
||||
if ch.ID == channel2.ID {
|
||||
foundChannel2 = ch
|
||||
}
|
||||
}
|
||||
|
||||
if foundChannel1 == nil {
|
||||
t.Fatalf("Channel1 not found in GetAllChannels result")
|
||||
}
|
||||
if foundChannel2 == nil {
|
||||
t.Fatalf("Channel2 not found in GetAllChannels result")
|
||||
}
|
||||
|
||||
if foundChannel1.EnableAllPlugins {
|
||||
t.Errorf("Expected channel1 EnableAllPlugins to be false, got true")
|
||||
}
|
||||
if !foundChannel2.EnableAllPlugins {
|
||||
t.Errorf("Expected channel2 EnableAllPlugins to be true, got false")
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("Migration applied correctly", func(t *testing.T) {
|
||||
// Test that we can create a channel and the enable_all_plugins column exists
|
||||
// This implicitly tests that migration 4 was applied correctly
|
||||
channelRaw := map[string]interface{}{
|
||||
"name": "migration-test-channel",
|
||||
}
|
||||
|
||||
channel, err := database.CreateChannel("test-platform", "migration-test", true, channelRaw)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to create channel after migration: %v", err)
|
||||
}
|
||||
|
||||
// Try to update EnableAllPlugins - this would fail if the column doesn't exist
|
||||
err = database.UpdateChannelEnableAllPlugins(channel.ID, true)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to update EnableAllPlugins - migration may not have been applied: %v", err)
|
||||
}
|
||||
|
||||
// Verify the value was set correctly
|
||||
retrieved, err := database.GetChannelByID(channel.ID)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to retrieve channel: %v", err)
|
||||
}
|
||||
|
||||
if !retrieved.EnableAllPlugins {
|
||||
t.Errorf("EnableAllPlugins should be true after update")
|
||||
}
|
||||
})
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue