Files
gochat/backend/internal/channel/facebook/coverage_test.go
T

147 lines
3.9 KiB
Go

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)
}