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) w.Write([]byte(response)) })) } 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") }