package facebook import ( "context" "testing" "github.com/gochat/gochat/internal/channel" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) // --- FacebookProvider identity tests --- func TestNewFacebookProvider(t *testing.T) { p := NewFacebookProvider() assert.NotNil(t, p) } func TestFacebookProvider_Type(t *testing.T) { p := NewFacebookProvider() assert.Equal(t, channel.ChannelFacebook, p.Type()) } func TestFacebookProvider_Name(t *testing.T) { p := NewFacebookProvider() assert.Equal(t, "Facebook Messenger", p.Name()) } func TestFacebookProvider_Description(t *testing.T) { p := NewFacebookProvider() assert.Contains(t, p.Description(), "Facebook") } func TestFacebookProvider_DefaultConfig(t *testing.T) { p := NewFacebookProvider() cfg := p.DefaultConfig() assert.NotNil(t, cfg) assert.Contains(t, cfg, "page_id") assert.Contains(t, cfg, "page_access_token") } func TestFacebookProvider_Capabilities(t *testing.T) { p := NewFacebookProvider() caps := p.Capabilities() assert.True(t, caps.SupportsAttachments) assert.True(t, caps.SupportsLocation) } func TestFacebookProvider_MapContentType(t *testing.T) { p := NewFacebookProvider() assert.Equal(t, "image", p.mapContentTypeToFBAttachmentType("image")) assert.Equal(t, "video", p.mapContentTypeToFBAttachmentType("video")) assert.Equal(t, "audio", p.mapContentTypeToFBAttachmentType("audio")) assert.Equal(t, "file", p.mapContentTypeToFBAttachmentType("file")) assert.Equal(t, "file", p.mapContentTypeToFBAttachmentType("unknown")) } func TestFacebookProvider_ConfigSchema(t *testing.T) { p := NewFacebookProvider() schema := p.ConfigSchema() assert.NotNil(t, schema) } func TestFacebookProvider_ValidateConfig(t *testing.T) { p := NewFacebookProvider() err := p.ValidateConfig(context.Background(), p.DefaultConfig()) // May or may not error depending on validation _ = err } // --- InstagramProvider identity tests --- func TestNewInstagramProvider(t *testing.T) { p := NewInstagramProvider() assert.NotNil(t, p) } func TestInstagramProvider_Type(t *testing.T) { p := NewInstagramProvider() assert.Equal(t, channel.ChannelInstagram, p.Type()) } func TestInstagramProvider_Name(t *testing.T) { p := NewInstagramProvider() assert.Equal(t, "Instagram DM", p.Name()) } func TestInstagramProvider_Description(t *testing.T) { p := NewInstagramProvider() assert.Contains(t, p.Description(), "Instagram") } func TestInstagramProvider_DefaultConfig(t *testing.T) { p := NewInstagramProvider() cfg := p.DefaultConfig() assert.NotNil(t, cfg) assert.Contains(t, cfg, "instagram_account_id") } func TestInstagramProvider_Capabilities(t *testing.T) { p := NewInstagramProvider() caps := p.Capabilities() assert.True(t, caps.SupportsAttachments) } func TestInstagramProvider_MapContentType(t *testing.T) { p := NewInstagramProvider() assert.Equal(t, "image", p.mapContentTypeToIGAttachmentType("image")) assert.Equal(t, "video", p.mapContentTypeToIGAttachmentType("video")) assert.Equal(t, "audio", p.mapContentTypeToIGAttachmentType("audio")) assert.Equal(t, "file", p.mapContentTypeToIGAttachmentType("file")) assert.Equal(t, "file", p.mapContentTypeToIGAttachmentType("unknown")) } // --- WebhookParser tests --- func TestNewWebhookParser(t *testing.T) { wp := NewWebhookParser() assert.NotNil(t, wp) } func TestWebhookParser_ParseWebhookPayload_InvalidJSON(t *testing.T) { wp := NewWebhookParser() _, err := wp.ParseWebhookPayload([]byte("invalid json")) require.Error(t, err) } func TestWebhookParser_ParseWebhookPayload_Empty(t *testing.T) { wp := NewWebhookParser() _, err := wp.ParseWebhookPayload([]byte(`{"object":"page","entry":[]}`)) require.NoError(t, err) } // --- MediaService tests --- func TestNewMediaService(t *testing.T) { ms := NewMediaService("https://graph.facebook.com/v18.0", "/tmp/test") assert.NotNil(t, ms) } // --- Service tests --- func TestNewService(t *testing.T) { s := NewService(nil) assert.NotNil(t, s) }