Align GoChat with Chatwoot frontend contracts
This commit is contained in:
@@ -4,6 +4,7 @@ import (
|
||||
"bytes"
|
||||
"context"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"testing"
|
||||
@@ -23,20 +24,32 @@ import (
|
||||
)
|
||||
|
||||
type fakeFacebookCallbackProvider struct {
|
||||
longToken string
|
||||
pages []facebookchannel.FBPageInfo
|
||||
instagramID string
|
||||
longToken string
|
||||
pages []facebookchannel.FBPageInfo
|
||||
instagramID string
|
||||
tokenErr error
|
||||
pagesErr error
|
||||
instagramErr error
|
||||
}
|
||||
|
||||
func (f *fakeFacebookCallbackProvider) ExchangeLongLivedUserToken(context.Context, string) (string, error) {
|
||||
if f.tokenErr != nil {
|
||||
return "", f.tokenErr
|
||||
}
|
||||
return f.longToken, nil
|
||||
}
|
||||
|
||||
func (f *fakeFacebookCallbackProvider) ListFacebookPages(context.Context, string) ([]facebookchannel.FBPageInfo, error) {
|
||||
if f.pagesErr != nil {
|
||||
return nil, f.pagesErr
|
||||
}
|
||||
return f.pages, nil
|
||||
}
|
||||
|
||||
func (f *fakeFacebookCallbackProvider) FetchInstagramBusinessAccountID(context.Context, string) (string, error) {
|
||||
if f.instagramErr != nil {
|
||||
return "", f.instagramErr
|
||||
}
|
||||
return f.instagramID, nil
|
||||
}
|
||||
|
||||
@@ -76,6 +89,9 @@ func TestFacebookCallbacks_RegisterFacebookPage(t *testing.T) {
|
||||
assert.Equal(t, "Facebook", payload["name"])
|
||||
assert.Equal(t, "facebook", payload["channel_type"])
|
||||
assert.Equal(t, "page-1", payload["page_id"])
|
||||
assert.Equal(t, false, payload["enable_auto_assignment"])
|
||||
assert.NotContains(t, payload, "success")
|
||||
assert.NotContains(t, payload, "data")
|
||||
|
||||
var channel channelmodel.ChannelFacebook
|
||||
require.NoError(t, db.First(&channel).Error)
|
||||
@@ -83,6 +99,17 @@ func TestFacebookCallbacks_RegisterFacebookPage(t *testing.T) {
|
||||
assert.Equal(t, "user-token", channel.UserAccessToken)
|
||||
assert.Equal(t, "page-token", channel.PageAccessToken)
|
||||
assert.Equal(t, "ig-123", channel.InstagramBusinessAccountID)
|
||||
|
||||
var inbox model.Inbox
|
||||
require.NoError(t, db.First(&inbox, uint(payload["id"].(float64))).Error)
|
||||
assert.Equal(t, account.ID, inbox.AccountID)
|
||||
assert.Equal(t, "Facebook", inbox.Name)
|
||||
assert.Equal(t, "facebook", inbox.ChannelType)
|
||||
assert.Equal(t, channel.ID, inbox.ChannelID)
|
||||
var config map[string]any
|
||||
require.NoError(t, json.Unmarshal([]byte(inbox.ChannelConfig), &config))
|
||||
assert.Equal(t, "page-1", config["page_id"])
|
||||
assert.Equal(t, "page-token", config["page_access_token"])
|
||||
}
|
||||
|
||||
func TestFacebookCallbacks_FacebookPagesMarksExistingPages(t *testing.T) {
|
||||
@@ -111,6 +138,20 @@ func TestFacebookCallbacks_FacebookPagesMarksExistingPages(t *testing.T) {
|
||||
assert.False(t, payload.Data.PageDetails[1].Exists)
|
||||
}
|
||||
|
||||
func TestFacebookCallbacks_FacebookPagesReturns422ProviderFailure(t *testing.T) {
|
||||
provider := &fakeFacebookCallbackProvider{tokenErr: errors.New("facebook token exchange failed")}
|
||||
router, db := setupFacebookCallbackTest(t, provider)
|
||||
account := model.Account{Name: "Acme", Active: true}
|
||||
require.NoError(t, db.Create(&account).Error)
|
||||
|
||||
rec := performFacebookCallbackRequest(t, router, http.MethodPost, "/api/v1/accounts/1/callbacks/facebook_pages.json", map[string]any{"omniauth_token": "bad-token"})
|
||||
require.Equal(t, http.StatusUnprocessableEntity, rec.Code)
|
||||
|
||||
var payload map[string]any
|
||||
require.NoError(t, json.Unmarshal(rec.Body.Bytes(), &payload))
|
||||
assert.Equal(t, "facebook token exchange failed", payload["error"])
|
||||
}
|
||||
|
||||
func TestFacebookCallbacks_ReauthorizePageUpdatesMatchingPage(t *testing.T) {
|
||||
provider := &fakeFacebookCallbackProvider{longToken: "long-user-token", instagramID: "ig-456", pages: []facebookchannel.FBPageInfo{{ID: "page-1", Name: "Renamed", AccessToken: "new-page-token"}}}
|
||||
router, db := setupFacebookCallbackTest(t, provider)
|
||||
@@ -138,6 +179,7 @@ func TestFacebookCallbacks_ReauthorizePageUpdatesMatchingPage(t *testing.T) {
|
||||
var config map[string]any
|
||||
require.NoError(t, json.Unmarshal([]byte(updatedInbox.ChannelConfig), &config))
|
||||
assert.Equal(t, "new-page-token", config["page_access_token"])
|
||||
assert.Equal(t, "Renamed", config["page_name"])
|
||||
}
|
||||
|
||||
func TestFacebookCallbacks_ReauthorizePageReturns422WhenPageMissing(t *testing.T) {
|
||||
|
||||
Reference in New Issue
Block a user