mirror of
https://github.com/sipeed/picoclaw.git
synced 2026-08-04 01:19:36 +00:00
9eadffda1e
Unit tests prove an out-of-tree channel type becomes valid and decodable after RegisterChannelSettings, including the full InitChannelList -> GetDecoded path that previously failed with "unknown type".
55 lines
1.7 KiB
Go
55 lines
1.7 KiB
Go
package config
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
// customChannelSettings stands in for an out-of-tree channel's settings struct.
|
|
type customChannelSettings struct {
|
|
Token string `json:"token"`
|
|
}
|
|
|
|
// TestRegisterChannelSettings verifies the public registration hook makes a
|
|
// previously-unknown channel type valid and decodable — the behavior out-of-tree
|
|
// channels rely on (they call RegisterChannelSettings from init()).
|
|
func TestRegisterChannelSettings(t *testing.T) {
|
|
const typ = "custom_test_channel"
|
|
|
|
assert.False(t, isValidChannelType(typ), "type should be unknown before registration")
|
|
|
|
RegisterChannelSettings(typ, customChannelSettings{})
|
|
|
|
assert.True(t, isValidChannelType(typ), "type should be valid after registration")
|
|
|
|
got := newChannelSettings(typ)
|
|
_, ok := got.(*customChannelSettings)
|
|
assert.Truef(t, ok, "newChannelSettings(%q) = %T, want *customChannelSettings", typ, got)
|
|
}
|
|
|
|
// TestRegisterChannelSettings_InitChannelList verifies that a config carrying a
|
|
// registered out-of-tree channel type passes InitChannelList and decodes its
|
|
// settings — the full path that previously errored with "unknown type".
|
|
func TestRegisterChannelSettings_InitChannelList(t *testing.T) {
|
|
const typ = "custom_initlist_channel"
|
|
RegisterChannelSettings(typ, customChannelSettings{})
|
|
|
|
channels := ChannelsConfig{
|
|
"mychan": {
|
|
Type: typ,
|
|
Enabled: true,
|
|
Settings: RawNode(`{"token":"secret-123"}`),
|
|
},
|
|
}
|
|
|
|
require.NoError(t, InitChannelList(channels))
|
|
|
|
decoded, err := channels["mychan"].GetDecoded()
|
|
require.NoError(t, err)
|
|
cfg, ok := decoded.(*customChannelSettings)
|
|
require.True(t, ok)
|
|
assert.Equal(t, "secret-123", cfg.Token)
|
|
}
|