234 lines
No EOL
6.2 KiB
Go
234 lines
No EOL
6.2 KiB
Go
package model
|
|
|
|
import (
|
|
"testing"
|
|
)
|
|
|
|
func TestChannel_HasEnabledPlugin(t *testing.T) {
|
|
t.Run("EnableAllPlugins false - plugin not in map", func(t *testing.T) {
|
|
channel := &Channel{
|
|
ID: 1,
|
|
Platform: "telegram",
|
|
PlatformChannelID: "123456",
|
|
Enabled: true,
|
|
EnableAllPlugins: false,
|
|
Plugins: make(map[string]*ChannelPlugin),
|
|
}
|
|
|
|
// Plugin not in map should return false
|
|
result := channel.HasEnabledPlugin("nonexistent.plugin")
|
|
if result {
|
|
t.Errorf("Expected HasEnabledPlugin to return false for nonexistent plugin, got true")
|
|
}
|
|
})
|
|
|
|
t.Run("EnableAllPlugins false - plugin disabled", func(t *testing.T) {
|
|
channel := &Channel{
|
|
ID: 1,
|
|
Platform: "telegram",
|
|
PlatformChannelID: "123456",
|
|
Enabled: true,
|
|
EnableAllPlugins: false,
|
|
Plugins: map[string]*ChannelPlugin{
|
|
"test.plugin": {
|
|
ID: 1,
|
|
ChannelID: 1,
|
|
PluginID: "test.plugin",
|
|
Enabled: false,
|
|
Config: make(map[string]any),
|
|
},
|
|
},
|
|
}
|
|
|
|
// Disabled plugin should return false
|
|
result := channel.HasEnabledPlugin("test.plugin")
|
|
if result {
|
|
t.Errorf("Expected HasEnabledPlugin to return false for disabled plugin, got true")
|
|
}
|
|
})
|
|
|
|
t.Run("EnableAllPlugins false - plugin enabled", func(t *testing.T) {
|
|
channel := &Channel{
|
|
ID: 1,
|
|
Platform: "telegram",
|
|
PlatformChannelID: "123456",
|
|
Enabled: true,
|
|
EnableAllPlugins: false,
|
|
Plugins: map[string]*ChannelPlugin{
|
|
"test.plugin": {
|
|
ID: 1,
|
|
ChannelID: 1,
|
|
PluginID: "test.plugin",
|
|
Enabled: true,
|
|
Config: make(map[string]any),
|
|
},
|
|
},
|
|
}
|
|
|
|
// Enabled plugin should return true
|
|
result := channel.HasEnabledPlugin("test.plugin")
|
|
if !result {
|
|
t.Errorf("Expected HasEnabledPlugin to return true for enabled plugin, got false")
|
|
}
|
|
})
|
|
|
|
t.Run("EnableAllPlugins true - plugin not in map", func(t *testing.T) {
|
|
channel := &Channel{
|
|
ID: 1,
|
|
Platform: "telegram",
|
|
PlatformChannelID: "123456",
|
|
Enabled: true,
|
|
EnableAllPlugins: true,
|
|
Plugins: make(map[string]*ChannelPlugin),
|
|
}
|
|
|
|
// When EnableAllPlugins is true, any plugin should be considered enabled
|
|
result := channel.HasEnabledPlugin("nonexistent.plugin")
|
|
if !result {
|
|
t.Errorf("Expected HasEnabledPlugin to return true when EnableAllPlugins is true, got false")
|
|
}
|
|
})
|
|
|
|
t.Run("EnableAllPlugins true - plugin disabled", func(t *testing.T) {
|
|
channel := &Channel{
|
|
ID: 1,
|
|
Platform: "telegram",
|
|
PlatformChannelID: "123456",
|
|
Enabled: true,
|
|
EnableAllPlugins: true,
|
|
Plugins: map[string]*ChannelPlugin{
|
|
"test.plugin": {
|
|
ID: 1,
|
|
ChannelID: 1,
|
|
PluginID: "test.plugin",
|
|
Enabled: false,
|
|
Config: make(map[string]any),
|
|
},
|
|
},
|
|
}
|
|
|
|
// When EnableAllPlugins is true, even disabled plugins should be considered enabled
|
|
result := channel.HasEnabledPlugin("test.plugin")
|
|
if !result {
|
|
t.Errorf("Expected HasEnabledPlugin to return true when EnableAllPlugins is true (even for disabled plugin), got false")
|
|
}
|
|
})
|
|
|
|
t.Run("EnableAllPlugins true - plugin enabled", func(t *testing.T) {
|
|
channel := &Channel{
|
|
ID: 1,
|
|
Platform: "telegram",
|
|
PlatformChannelID: "123456",
|
|
Enabled: true,
|
|
EnableAllPlugins: true,
|
|
Plugins: map[string]*ChannelPlugin{
|
|
"test.plugin": {
|
|
ID: 1,
|
|
ChannelID: 1,
|
|
PluginID: "test.plugin",
|
|
Enabled: true,
|
|
Config: make(map[string]any),
|
|
},
|
|
},
|
|
}
|
|
|
|
// When EnableAllPlugins is true, enabled plugins should also return true
|
|
result := channel.HasEnabledPlugin("test.plugin")
|
|
if !result {
|
|
t.Errorf("Expected HasEnabledPlugin to return true when EnableAllPlugins is true, got false")
|
|
}
|
|
})
|
|
|
|
t.Run("EnableAllPlugins true - multiple plugins", func(t *testing.T) {
|
|
channel := &Channel{
|
|
ID: 1,
|
|
Platform: "telegram",
|
|
PlatformChannelID: "123456",
|
|
Enabled: true,
|
|
EnableAllPlugins: true,
|
|
Plugins: map[string]*ChannelPlugin{
|
|
"plugin1": {
|
|
ID: 1,
|
|
ChannelID: 1,
|
|
PluginID: "plugin1",
|
|
Enabled: true,
|
|
Config: make(map[string]any),
|
|
},
|
|
"plugin2": {
|
|
ID: 2,
|
|
ChannelID: 1,
|
|
PluginID: "plugin2",
|
|
Enabled: false,
|
|
Config: make(map[string]any),
|
|
},
|
|
},
|
|
}
|
|
|
|
// All plugins should be enabled when EnableAllPlugins is true
|
|
testCases := []string{"plugin1", "plugin2", "plugin3", "any.plugin"}
|
|
for _, pluginID := range testCases {
|
|
result := channel.HasEnabledPlugin(pluginID)
|
|
if !result {
|
|
t.Errorf("Expected HasEnabledPlugin('%s') to return true when EnableAllPlugins is true, got false", pluginID)
|
|
}
|
|
}
|
|
})
|
|
}
|
|
|
|
func TestChannelName(t *testing.T) {
|
|
t.Run("Returns PlatformChannelID when ChannelRaw is nil", func(t *testing.T) {
|
|
channel := &Channel{
|
|
PlatformChannelID: "test-id",
|
|
ChannelRaw: nil,
|
|
}
|
|
|
|
result := channel.ChannelName()
|
|
if result != "test-id" {
|
|
t.Errorf("Expected channel name to be 'test-id', got '%s'", result)
|
|
}
|
|
})
|
|
|
|
t.Run("Returns name from ChannelRaw when available", func(t *testing.T) {
|
|
channel := &Channel{
|
|
PlatformChannelID: "test-id",
|
|
ChannelRaw: map[string]interface{}{
|
|
"name": "Test Channel",
|
|
},
|
|
}
|
|
|
|
result := channel.ChannelName()
|
|
if result != "Test Channel" {
|
|
t.Errorf("Expected channel name to be 'Test Channel', got '%s'", result)
|
|
}
|
|
})
|
|
|
|
t.Run("Returns title from nested chat object (Telegram style)", func(t *testing.T) {
|
|
channel := &Channel{
|
|
PlatformChannelID: "test-id",
|
|
ChannelRaw: map[string]interface{}{
|
|
"chat": map[string]interface{}{
|
|
"title": "Telegram Group",
|
|
},
|
|
},
|
|
}
|
|
|
|
result := channel.ChannelName()
|
|
if result != "Telegram Group" {
|
|
t.Errorf("Expected channel name to be 'Telegram Group', got '%s'", result)
|
|
}
|
|
})
|
|
|
|
t.Run("Falls back to PlatformChannelID when no valid name found", func(t *testing.T) {
|
|
channel := &Channel{
|
|
PlatformChannelID: "fallback-id",
|
|
ChannelRaw: map[string]interface{}{
|
|
"other_field": "value",
|
|
},
|
|
}
|
|
|
|
result := channel.ChannelName()
|
|
if result != "fallback-id" {
|
|
t.Errorf("Expected channel name to fallback to 'fallback-id', got '%s'", result)
|
|
}
|
|
})
|
|
} |