From 9eadffda1e7d026122b5e4d800068b79c0b22847 Mon Sep 17 00:00:00 2001 From: Carlos Prados Date: Sun, 14 Jun 2026 12:07:54 +0200 Subject: [PATCH] test(config): cover RegisterChannelSettings hook 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". --- pkg/config/register_channel_settings_test.go | 54 ++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 pkg/config/register_channel_settings_test.go diff --git a/pkg/config/register_channel_settings_test.go b/pkg/config/register_channel_settings_test.go new file mode 100644 index 00000000..3ecdd74e --- /dev/null +++ b/pkg/config/register_channel_settings_test.go @@ -0,0 +1,54 @@ +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) +}