147 lines
3.9 KiB
Go
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)
|
|
}
|