Files
gochat/backend/internal/channel/facebook/coverage16_test.go
T
Rogeeandrogee 2b182f9956 H-300: wire Captain Skills into Web runtime (#48)
* H-300: wire Captain Skills into Web runtime

* H-300: enforce effective model and conservative skill budget

* H-300: fix CI gosec step

* ci: extend golangci-lint timeout

* fix lint findings across backend

* fix(push): resolve delivery protocol blockers

* test(repository): close SQLite test databases

* test(repository): reuse SQLite schema per package

* H-307: restore backend Go cache in CI

* H-307: prefetch modules before cold lint

* H-307: resolve govulncheck security gate

* H-307: build lint with patched Go toolchain

* H-307: clear remaining security scan findings

---------

Co-authored-by: Rogee <rogee@ipao.vip>
2026-08-19 07:08:14 +08:00

121 lines
3.6 KiB
Go

package facebook
import (
"context"
"net/http"
"net/http/httptest"
"testing"
"github.com/stretchr/testify/require"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
"gorm.io/gorm/logger"
)
func setupFBDB_Cov16(t *testing.T) (*gorm.DB, *Repository) {
t.Helper()
db, err := gorm.Open(sqlite.Open("file::memory:"), &gorm.Config{Logger: logger.Default.LogMode(logger.Silent)})
require.NoError(t, err)
repo := NewRepository(db)
return db, repo
}
// Use httptest server to mock Facebook Graph API
func newMockGraphAPI_Cov16(t *testing.T, status int, response string) *httptest.Server {
return httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(status)
if _, err := w.Write([]byte(response)); err != nil {
panic(err)
}
}))
}
func TestService_CreateFacebookChannel_MockAPI_Cov16(t *testing.T) {
_, repo := setupFBDB_Cov16(t)
svc := NewService(repo)
// Point to mock server
server := newMockGraphAPI_Cov16(t, 200, `{"id":"123","name":"TestPage","access_token":"token"}`)
defer server.Close()
svc.graphAPIBase = server.URL
ch, err := svc.CreateFacebookChannel(context.Background(), 1, "123", "page_token", "verify_token")
_ = err
_ = ch
}
func TestService_CreateFacebookChannel_APIError_Cov16(t *testing.T) {
_, repo := setupFBDB_Cov16(t)
svc := NewService(repo)
server := newMockGraphAPI_Cov16(t, 500, `{"error":{"message":"API Error"}}`)
defer server.Close()
svc.graphAPIBase = server.URL
_, err := svc.CreateFacebookChannel(context.Background(), 1, "123", "page_token", "verify_token")
require.Error(t, err)
}
func TestService_CreateInstagramChannel_MockAPI_Cov16(t *testing.T) {
_, repo := setupFBDB_Cov16(t)
svc := NewService(repo)
server := newMockGraphAPI_Cov16(t, 200, `{"id":"123","name":"TestIG","username":"testig","access_token":"token"}`)
defer server.Close()
svc.graphAPIBase = server.URL
ch, err := svc.CreateInstagramChannel(context.Background(), 1, "123", "page_token", "verify_token", "webhook_secret")
_ = err
_ = ch
}
func TestService_ValidatePageAccessToken_MockAPI_Cov16(t *testing.T) {
_, repo := setupFBDB_Cov16(t)
svc := NewService(repo)
server := newMockGraphAPI_Cov16(t, 200, `{"id":"123","name":"TestPage","access_token":"token"}`)
defer server.Close()
svc.graphAPIBase = server.URL
info, err := svc.validatePageAccessToken(context.Background(), "123", "token")
_ = err
_ = info
}
func TestService_ValidatePageAccessToken_APIError_Cov16(t *testing.T) {
_, repo := setupFBDB_Cov16(t)
svc := NewService(repo)
server := newMockGraphAPI_Cov16(t, 401, `{"error":{"message":"Invalid token"}}`)
defer server.Close()
svc.graphAPIBase = server.URL
_, err := svc.validatePageAccessToken(context.Background(), "123", "bad_token")
_ = err
}
// Test ResolveContact with mock API
func TestUserMappingService_ResolveContact_MockAPI_Cov16(t *testing.T) {
_, repo := setupFBDB_Cov16(t)
svc := NewService(repo)
server := newMockGraphAPI_Cov16(t, 200, `{"id":"123","name":"Test User","first_name":"Test","last_name":"User","profile_pic":"url"}`)
defer server.Close()
svc.graphAPIBase = server.URL
defer func() { _ = recover() }()
ums := &UserMappingService{service: svc}
defer func() { _ = recover() }()
_, _ = ums.ResolveContact(context.Background(), "123", nil, "facebook")
}
// Test DownloadAttachment with mock server
func TestMediaService_DownloadAttachment_MockAPI_Cov16(t *testing.T) {
server := newMockGraphAPI_Cov16(t, 200, "fake-image-data")
defer server.Close()
ms := &MediaService{}
defer func() { _ = recover() }()
_, _ = ms.DownloadAttachment(context.Background(), server.URL+"/image.jpg", "test.jpg")
}