* 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>
121 lines
3.6 KiB
Go
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")
|
|
}
|