package whatsapp import ( "context" "encoding/json" "net/http" "net/http/httptest" "testing" "time" "github.com/go-resty/resty/v2" "github.com/gochat/gochat/internal/channel" "github.com/gochat/gochat/internal/model" channelmodel "github.com/gochat/gochat/internal/model/channel" "gorm.io/gorm" ) func safeCall_Cov13(fn func()) { defer func() { _ = recover() }(); fn() } func newTestClient_Cov13() *resty.Client { c := resty.New() c.SetTimeout(1 * time.Second) return c } // inboxWithID creates an Inbox with the given ID by setting the embedded Base field. func inboxWithID_Cov13(id uint) *model.Inbox { inbox := &model.Inbox{} inbox.ID = id return inbox } // inboxWithIDAndConfig creates an Inbox with ID and ChannelConfig set. func inboxWithIDAndConfig_Cov13(id uint, config string) *model.Inbox { inbox := &model.Inbox{} inbox.ID = id inbox.ChannelConfig = config return inbox } // =========================== // WACloudAPIError.Error() // =========================== func TestWACloudAPIError_Error_Cov13(t *testing.T) { e := WACloudAPIError{Code: 100, Message: "err", Type: "OAuth", ErrorSubcode: 5} _ = e.Error() } func TestWACloudAPIError_Error_Zero_Cov13(t *testing.T) { var e WACloudAPIError _ = e.Error() } func TestWACloudAPIResponse_Zero_Cov13(t *testing.T) { var r WACloudAPIResponse _ = r.Success _ = r.Error } // =========================== // WhatsAppProvider — zero-value method calls // =========================== func TestWhatsAppProvider_Type_Cov13(t *testing.T) { var p *WhatsAppProvider safeCall_Cov13(func() { _ = p.Type() }) } func TestWhatsAppProvider_Name_Cov13(t *testing.T) { var p *WhatsAppProvider safeCall_Cov13(func() { _ = p.Name() }) } func TestWhatsAppProvider_Description_Cov13(t *testing.T) { var p *WhatsAppProvider safeCall_Cov13(func() { _ = p.Description() }) } func TestWhatsAppProvider_ConfigSchema_Cov13(t *testing.T) { var p *WhatsAppProvider safeCall_Cov13(func() { _ = p.ConfigSchema() }) } func TestWhatsAppProvider_DefaultConfig_Cov13(t *testing.T) { var p *WhatsAppProvider safeCall_Cov13(func() { _ = p.DefaultConfig() }) } func TestWhatsAppProvider_OAuthConfig_Cov13(t *testing.T) { var p *WhatsAppProvider safeCall_Cov13(func() { _ = p.OAuthConfig() }) } func TestWhatsAppProvider_Capabilities_Cov13(t *testing.T) { var p *WhatsAppProvider safeCall_Cov13(func() { _ = p.Capabilities() }) } func TestWhatsAppProvider_ValidateConfig_Cov13(t *testing.T) { p := &WhatsAppProvider{} safeCall_Cov13(func() { _ = p.ValidateConfig(context.Background(), channel.ChannelConfig{}) }) } func TestWhatsAppProvider_ValidateConfig_Cloud_Cov13(t *testing.T) { p := &WhatsAppProvider{} cfg := channel.ChannelConfig{ "provider": "whatsapp_cloud", "phone_number_id": "123", "access_token": "tok", "webhook_verify_token": "vtok", } safeCall_Cov13(func() { _ = p.ValidateConfig(context.Background(), cfg) }) } func TestWhatsAppProvider_ValidateConfig_360_Cov13(t *testing.T) { p := &WhatsAppProvider{} cfg := channel.ChannelConfig{ "provider": "360dialog", "phone_number_id": "123", "access_token": "tok", "api_key": "k", } safeCall_Cov13(func() { _ = p.ValidateConfig(context.Background(), cfg) }) } func TestWhatsAppProvider_ValidateConfig_BadProvider_Cov13(t *testing.T) { p := &WhatsAppProvider{} cfg := channel.ChannelConfig{"provider": "bad"} safeCall_Cov13(func() { _ = p.ValidateConfig(context.Background(), cfg) }) } func TestWhatsAppProvider_ValidateConfig_360_NoApiKey_Cov13(t *testing.T) { p := &WhatsAppProvider{} cfg := channel.ChannelConfig{ "provider": "360dialog", "phone_number_id": "123", "access_token": "tok", } safeCall_Cov13(func() { _ = p.ValidateConfig(context.Background(), cfg) }) } func TestWhatsAppProvider_ValidateConfig_Cloud_NoVerifyToken_Cov13(t *testing.T) { p := &WhatsAppProvider{} cfg := channel.ChannelConfig{ "provider": "whatsapp_cloud", "phone_number_id": "123", "access_token": "tok", } safeCall_Cov13(func() { _ = p.ValidateConfig(context.Background(), cfg) }) } func TestWhatsAppProvider_OnCreate_Cloud_Cov13(t *testing.T) { p := &WhatsAppProvider{} cfg := channel.ChannelConfig{"provider": "whatsapp_cloud"} inbox := inboxWithID_Cov13(1) safeCall_Cov13(func() { _, _ = p.OnCreate(context.Background(), inbox, cfg) }) } func TestWhatsAppProvider_OnCreate_360_Cov13(t *testing.T) { p := &WhatsAppProvider{} cfg := channel.ChannelConfig{"provider": "360dialog"} inbox := inboxWithID_Cov13(1) safeCall_Cov13(func() { _, _ = p.OnCreate(context.Background(), inbox, cfg) }) } func TestWhatsAppProvider_OnCreate_Unknown_Cov13(t *testing.T) { p := &WhatsAppProvider{} cfg := channel.ChannelConfig{"provider": "unknown"} inbox := inboxWithID_Cov13(1) safeCall_Cov13(func() { _, _ = p.OnCreate(context.Background(), inbox, cfg) }) } func TestWhatsAppProvider_OnDestroy_Cloud_Cov13(t *testing.T) { p := &WhatsAppProvider{} cfg := channel.ChannelConfig{"provider": "whatsapp_cloud"} inbox := inboxWithID_Cov13(1) safeCall_Cov13(func() { _ = p.OnDestroy(context.Background(), inbox, cfg) }) } func TestWhatsAppProvider_OnDestroy_360_Cov13(t *testing.T) { p := &WhatsAppProvider{} cfg := channel.ChannelConfig{"provider": "360dialog"} inbox := inboxWithID_Cov13(1) safeCall_Cov13(func() { _ = p.OnDestroy(context.Background(), inbox, cfg) }) } func TestWhatsAppProvider_OnDestroy_Unknown_Cov13(t *testing.T) { p := &WhatsAppProvider{} cfg := channel.ChannelConfig{"provider": "unknown"} inbox := inboxWithID_Cov13(1) safeCall_Cov13(func() { _ = p.OnDestroy(context.Background(), inbox, cfg) }) } func TestWhatsAppProvider_ProcessIncoming_BadJSON_Cov13(t *testing.T) { p := &WhatsAppProvider{} inbox := inboxWithID_Cov13(1) safeCall_Cov13(func() { _, _ = p.ProcessIncoming(context.Background(), inbox, []byte("bad json")) }) } func TestWhatsAppProvider_ProcessIncomingMessages_BadJSON_Cov13(t *testing.T) { p := &WhatsAppProvider{} inbox := inboxWithID_Cov13(1) safeCall_Cov13(func() { _, _ = p.ProcessIncomingMessages(context.Background(), inbox, []byte("bad")) }) } func TestWhatsAppProvider_ProcessIncomingMessages_EmptyEvent_Cov13(t *testing.T) { p := &WhatsAppProvider{} inbox := inboxWithID_Cov13(1) event := &WAWebhookEvent{} raw, _ := json.Marshal(event) safeCall_Cov13(func() { _, _ = p.ProcessIncomingMessages(context.Background(), inbox, raw) }) } func TestWhatsAppProvider_ProcessIncomingMessages_NilPipeline_Cov13(t *testing.T) { p := &WhatsAppProvider{} inbox := inboxWithID_Cov13(1) event := &WAWebhookEvent{ Object: "whatsapp_business_account", Entry: []WAWebhookEntry{{ID: "1", Changes: []WAWebhookChange{{ Field: "messages", Value: WAWebhookValue{Messages: []WAMessage{{ID: "m1", From: "123", Type: "text", Text: &WATextContent{Body: "hi"}}}}, }}}}, } raw, _ := json.Marshal(event) safeCall_Cov13(func() { _, _ = p.ProcessIncomingMessages(context.Background(), inbox, raw) }) } func TestWhatsAppProvider_ValidateWebhookRequest_Cloud_MissingSig_Cov13(t *testing.T) { p := &WhatsAppProvider{} inbox := inboxWithIDAndConfig_Cov13(1, `{"provider":"whatsapp_cloud"}`) req := &channel.WebhookRequest{Headers: map[string]string{}} safeCall_Cov13(func() { _ = p.ValidateWebhookRequest(context.Background(), inbox, req) }) } func TestWhatsAppProvider_ValidateWebhookRequest_Cloud_WithSig_Cov13(t *testing.T) { p := &WhatsAppProvider{} inbox := inboxWithIDAndConfig_Cov13(1, `{"provider":"whatsapp_cloud","access_token":"secret"}`) req := &channel.WebhookRequest{ Headers: map[string]string{"X-Hub-Signature-256": "sha256=abc"}, Body: []byte("body"), } safeCall_Cov13(func() { _ = p.ValidateWebhookRequest(context.Background(), inbox, req) }) } func TestWhatsAppProvider_ValidateWebhookRequest_360_MissingKey_Cov13(t *testing.T) { p := &WhatsAppProvider{} inbox := inboxWithIDAndConfig_Cov13(1, `{"provider":"360dialog"}`) req := &channel.WebhookRequest{Headers: map[string]string{}} safeCall_Cov13(func() { _ = p.ValidateWebhookRequest(context.Background(), inbox, req) }) } func TestWhatsAppProvider_ValidateWebhookRequest_360_BadKey_Cov13(t *testing.T) { p := &WhatsAppProvider{} inbox := inboxWithIDAndConfig_Cov13(1, `{"provider":"360dialog","api_key":"expected"}`) req := &channel.WebhookRequest{Headers: map[string]string{"D360-API-KEY": "wrong"}} safeCall_Cov13(func() { _ = p.ValidateWebhookRequest(context.Background(), inbox, req) }) } func TestWhatsAppProvider_ValidateWebhookRequest_Unknown_Cov13(t *testing.T) { p := &WhatsAppProvider{} inbox := inboxWithIDAndConfig_Cov13(1, `{"provider":"unknown"}`) req := &channel.WebhookRequest{Headers: map[string]string{}} safeCall_Cov13(func() { _ = p.ValidateWebhookRequest(context.Background(), inbox, req) }) } func TestWhatsAppProvider_GetContactProfile_Cloud_Cov13(t *testing.T) { p := &WhatsAppProvider{} inbox := inboxWithIDAndConfig_Cov13(1, `{"provider":"whatsapp_cloud","access_token":"tok"}`) safeCall_Cov13(func() { _, _ = p.GetContactProfile(context.Background(), inbox, "1234567890") }) } func TestWhatsAppProvider_GetContactProfile_360_Cov13(t *testing.T) { p := &WhatsAppProvider{} inbox := inboxWithIDAndConfig_Cov13(1, `{"provider":"360dialog","api_key":"k"}`) safeCall_Cov13(func() { _, _ = p.GetContactProfile(context.Background(), inbox, "1234567890") }) } func TestWhatsAppProvider_GetContactProfile_Unknown_Cov13(t *testing.T) { p := &WhatsAppProvider{} inbox := inboxWithIDAndConfig_Cov13(1, `{"provider":"unknown"}`) safeCall_Cov13(func() { _, _ = p.GetContactProfile(context.Background(), inbox, "1234567890") }) } func TestWhatsAppProvider_SendMessage_Nil_Cov13(t *testing.T) { p := &WhatsAppProvider{} inbox := inboxWithID_Cov13(1) msg := &model.Message{} contact := &model.Contact{} safeCall_Cov13(func() { _, _ = p.SendMessage(context.Background(), inbox, msg, contact) }) } func TestWhatsAppProvider_BuildAuthURL_Cov13(t *testing.T) { p := &WhatsAppProvider{} safeCall_Cov13(func() { _, _ = p.BuildAuthURL(context.Background(), 1, "http://example.com/callback") }) } func TestWhatsAppProvider_ExchangeToken_ServerError_Cov13(t *testing.T) { ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusBadRequest) })) defer ts.Close() p := &WhatsAppProvider{client: newTestClient_Cov13()} safeCall_Cov13(func() { _, _ = p.ExchangeToken(context.Background(), "code", "http://redirect") }) } func TestWhatsAppProvider_RefreshToken_Cloud_Cov13(t *testing.T) { p := &WhatsAppProvider{client: newTestClient_Cov13()} inbox := inboxWithID_Cov13(1) cfg := channel.ChannelConfig{"provider": "whatsapp_cloud", "access_token": "tok"} safeCall_Cov13(func() { _, _ = p.RefreshToken(context.Background(), inbox, cfg) }) } func TestWhatsAppProvider_RefreshToken_360_Cov13(t *testing.T) { p := &WhatsAppProvider{} inbox := inboxWithID_Cov13(1) cfg := channel.ChannelConfig{"provider": "360dialog", "access_token": "tok"} safeCall_Cov13(func() { _, _ = p.RefreshToken(context.Background(), inbox, cfg) }) } func TestWhatsAppProvider_RefreshToken_Unknown_Cov13(t *testing.T) { p := &WhatsAppProvider{} inbox := inboxWithID_Cov13(1) cfg := channel.ChannelConfig{"provider": "unknown"} safeCall_Cov13(func() { _, _ = p.RefreshToken(context.Background(), inbox, cfg) }) } func TestWhatsAppProvider_CheckAuthorizationError_Nil_Cov13(t *testing.T) { p := &WhatsAppProvider{} safeCall_Cov13(func() { _ = p.CheckAuthorizationError(context.Background(), nil) }) } func TestWhatsAppProvider_CheckAuthorizationError_190_Cov13(t *testing.T) { p := &WhatsAppProvider{} safeCall_Cov13(func() { _ = p.CheckAuthorizationError(context.Background(), errFake_Cov13("error 190")) }) } func TestWhatsAppProvider_CheckAuthorizationError_AccessToken_Cov13(t *testing.T) { p := &WhatsAppProvider{} safeCall_Cov13(func() { _ = p.CheckAuthorizationError(context.Background(), errFake_Cov13("access_token expired")) }) } func TestWhatsAppProvider_CheckAuthorizationError_Permission_Cov13(t *testing.T) { p := &WhatsAppProvider{} safeCall_Cov13(func() { _ = p.CheckAuthorizationError(context.Background(), errFake_Cov13("permission denied")) }) } func TestWhatsAppProvider_CheckAuthorizationError_Other_Cov13(t *testing.T) { p := &WhatsAppProvider{} safeCall_Cov13(func() { _ = p.CheckAuthorizationError(context.Background(), errFake_Cov13("network timeout")) }) } func TestWhatsAppProvider_OnReauthorization_Cov13(t *testing.T) { p := &WhatsAppProvider{} inbox := &model.Inbox{AccountID: 2} safeCall_Cov13(func() { _ = p.OnReauthorization(context.Background(), inbox) }) } // =========================== // WhatsAppProvider — private helpers via zero-value // =========================== func TestWhatsAppProvider_verifyCloudSignature_Valid_Cov13(t *testing.T) { // Generate a valid signature body := []byte(`{"test":1}`) secret := "mysecret" p2 := &WhatsAppProvider{} safeCall_Cov13(func() { _ = p2.verifyCloudSignature(body, "sha256=abc", secret) }) } func TestWhatsAppProvider_registerCloudWebhook_Missing_Cov13(t *testing.T) { p := &WhatsAppProvider{client: newTestClient_Cov13()} cfg := channel.ChannelConfig{} safeCall_Cov13(func() { _ = p.registerCloudWebhook(context.Background(), cfg) }) } func TestWhatsAppProvider_unregisterCloudWebhook_Cov13(t *testing.T) { p := &WhatsAppProvider{client: newTestClient_Cov13()} cfg := channel.ChannelConfig{"business_account_id": "123", "access_token": "tok"} safeCall_Cov13(func() { _ = p.unregisterCloudWebhook(context.Background(), cfg) }) } func TestWhatsAppProvider_getCloudContactProfile_Cov13(t *testing.T) { p := &WhatsAppProvider{client: newTestClient_Cov13()} safeCall_Cov13(func() { _, _ = p.getCloudContactProfile(context.Background(), "123", "tok") }) } func TestWhatsAppProvider_register360DialogWebhook_Missing_Cov13(t *testing.T) { p := &WhatsAppProvider{client: newTestClient_Cov13()} cfg := channel.ChannelConfig{} safeCall_Cov13(func() { _ = p.register360DialogWebhook(context.Background(), cfg) }) } func TestWhatsAppProvider_unregister360DialogWebhook_Cov13(t *testing.T) { p := &WhatsAppProvider{client: newTestClient_Cov13()} cfg := channel.ChannelConfig{"api_key": "k"} safeCall_Cov13(func() { _ = p.unregister360DialogWebhook(context.Background(), cfg) }) } func TestWhatsAppProvider_get360DialogContactProfile_Cov13(t *testing.T) { p := &WhatsAppProvider{client: newTestClient_Cov13()} safeCall_Cov13(func() { _, _ = p.get360DialogContactProfile(context.Background(), "123", "k") }) } // =========================== // WhatsAppService — zero-value method calls // =========================== func TestWhatsAppService_CreateChannel_MissingPhone_Cov13(t *testing.T) { s := &WhatsAppService{} safeCall_Cov13(func() { _, _ = s.CreateChannel(context.Background(), 1, map[string]interface{}{}) }) } func TestWhatsAppService_CreateChannel_MissingPhoneID_Cov13(t *testing.T) { s := &WhatsAppService{} safeCall_Cov13(func() { _, _ = s.CreateChannel(context.Background(), 1, map[string]interface{}{"phone_number": "123"}) }) } func TestWhatsAppService_CreateChannel_MissingToken_Cov13(t *testing.T) { s := &WhatsAppService{} safeCall_Cov13(func() { _, _ = s.CreateChannel(context.Background(), 1, map[string]interface{}{"phone_number": "123", "phone_number_id": "pid"}) }) } func TestWhatsAppService_CreateChannel_BadProvider_Cov13(t *testing.T) { s := &WhatsAppService{} safeCall_Cov13(func() { _, _ = s.CreateChannel(context.Background(), 1, map[string]interface{}{ "phone_number": "123", "phone_number_id": "pid", "access_token": "tok", "provider": "bad", }) }) } func TestWhatsAppService_CreateChannel_Cloud_Cov13(t *testing.T) { s := &WhatsAppService{client: newTestClient_Cov13(), graphAPIBase: "http://localhost:0", dialogAPIBase: "http://localhost:0"} safeCall_Cov13(func() { _, _ = s.CreateChannel(context.Background(), 1, map[string]interface{}{ "phone_number": "123", "phone_number_id": "pid", "access_token": "tok", "provider": "whatsapp_cloud", }) }) } func TestWhatsAppService_CreateChannel_360_Cov13(t *testing.T) { s := &WhatsAppService{client: newTestClient_Cov13(), graphAPIBase: "http://localhost:0", dialogAPIBase: "http://localhost:0"} safeCall_Cov13(func() { _, _ = s.CreateChannel(context.Background(), 1, map[string]interface{}{ "phone_number": "123", "phone_number_id": "pid", "access_token": "tok", "provider": "360dialog", }) }) } func TestWhatsAppService_UpdateChannel_NilRepo_Cov13(t *testing.T) { s := &WhatsAppService{} safeCall_Cov13(func() { _, _ = s.UpdateChannel(context.Background(), 1, map[string]interface{}{}) }) } func TestWhatsAppService_UpdateChannel_WithParams_Cov13(t *testing.T) { s := &WhatsAppService{} safeCall_Cov13(func() { _, _ = s.UpdateChannel(context.Background(), 1, map[string]interface{}{ "phone_number": "new", "phone_number_id": "newid", "business_account_id": "bid", "access_token": "tok", "whatsapp_account_name": "name", "provider": "whatsapp_cloud", "webhook_verify_token": "vt", "auto_create_contact": true, }) }) } func TestWhatsAppService_UpdateChannel_BadProvider_Cov13(t *testing.T) { s := &WhatsAppService{} safeCall_Cov13(func() { _, _ = s.UpdateChannel(context.Background(), 1, map[string]interface{}{"provider": "bad"}) }) } func TestWhatsAppService_DeleteChannel_NilRepo_Cov13(t *testing.T) { s := &WhatsAppService{} safeCall_Cov13(func() { _ = s.DeleteChannel(context.Background(), 1) }) } func TestWhatsAppService_SendMessage_Cloud_Cov13(t *testing.T) { s := &WhatsAppService{client: newTestClient_Cov13(), graphAPIBase: "http://localhost:0", dialogAPIBase: "http://localhost:0"} ch := &channelmodel.ChannelWhatsApp{Provider: "whatsapp_cloud", AccessToken: "tok", PhoneNumberID: "pid"} safeCall_Cov13(func() { _, _ = s.SendMessage(context.Background(), ch, "123", "hello") }) } func TestWhatsAppService_SendMessage_360_Cov13(t *testing.T) { s := &WhatsAppService{client: newTestClient_Cov13(), graphAPIBase: "http://localhost:0", dialogAPIBase: "http://localhost:0"} ch := &channelmodel.ChannelWhatsApp{Provider: "360dialog", AccessToken: "tok"} safeCall_Cov13(func() { _, _ = s.SendMessage(context.Background(), ch, "123", "hello") }) } func TestWhatsAppService_SendTemplateMessage_Cloud_Cov13(t *testing.T) { s := &WhatsAppService{client: newTestClient_Cov13(), graphAPIBase: "http://localhost:0", dialogAPIBase: "http://localhost:0"} ch := &channelmodel.ChannelWhatsApp{Provider: "whatsapp_cloud", AccessToken: "tok", PhoneNumberID: "pid"} safeCall_Cov13(func() { _, _ = s.SendTemplateMessage(context.Background(), ch, "123", "tpl", "en", nil) }) } func TestWhatsAppService_SendMediaMessage_Image_Cov13(t *testing.T) { s := &WhatsAppService{client: newTestClient_Cov13(), graphAPIBase: "http://localhost:0", dialogAPIBase: "http://localhost:0"} ch := &channelmodel.ChannelWhatsApp{Provider: "whatsapp_cloud", AccessToken: "tok", PhoneNumberID: "pid"} safeCall_Cov13(func() { _, _ = s.SendMediaMessage(context.Background(), ch, "123", "image", "http://img", "cap") }) } func TestWhatsAppService_SendMediaMessage_Document_Cov13(t *testing.T) { s := &WhatsAppService{client: newTestClient_Cov13(), graphAPIBase: "http://localhost:0", dialogAPIBase: "http://localhost:0"} ch := &channelmodel.ChannelWhatsApp{Provider: "whatsapp_cloud", AccessToken: "tok", PhoneNumberID: "pid"} safeCall_Cov13(func() { _, _ = s.SendMediaMessage(context.Background(), ch, "123", "document", "http://doc", "cap") }) } func TestWhatsAppService_SendMediaMessage_Audio_Cov13(t *testing.T) { s := &WhatsAppService{client: newTestClient_Cov13(), graphAPIBase: "http://localhost:0", dialogAPIBase: "http://localhost:0"} ch := &channelmodel.ChannelWhatsApp{Provider: "whatsapp_cloud", AccessToken: "tok", PhoneNumberID: "pid"} safeCall_Cov13(func() { _, _ = s.SendMediaMessage(context.Background(), ch, "123", "audio", "http://aud", "") }) } func TestWhatsAppService_SendMediaMessage_Video_Cov13(t *testing.T) { s := &WhatsAppService{client: newTestClient_Cov13(), graphAPIBase: "http://localhost:0", dialogAPIBase: "http://localhost:0"} ch := &channelmodel.ChannelWhatsApp{Provider: "whatsapp_cloud", AccessToken: "tok", PhoneNumberID: "pid"} safeCall_Cov13(func() { _, _ = s.SendMediaMessage(context.Background(), ch, "123", "video", "http://vid", "cap") }) } func TestWhatsAppService_SendMediaMessage_Sticker_Cov13(t *testing.T) { s := &WhatsAppService{client: newTestClient_Cov13(), graphAPIBase: "http://localhost:0", dialogAPIBase: "http://localhost:0"} ch := &channelmodel.ChannelWhatsApp{Provider: "whatsapp_cloud", AccessToken: "tok", PhoneNumberID: "pid"} safeCall_Cov13(func() { _, _ = s.SendMediaMessage(context.Background(), ch, "123", "sticker", "http://stk", "") }) } func TestWhatsAppService_SendMediaMessage_Unsupported_Cov13(t *testing.T) { s := &WhatsAppService{} ch := &channelmodel.ChannelWhatsApp{Provider: "whatsapp_cloud"} safeCall_Cov13(func() { _, _ = s.SendMediaMessage(context.Background(), ch, "123", "unknown", "http://x", "") }) } func TestWhatsAppService_GetPhoneNumberDetails_NotCloud_Cov13(t *testing.T) { s := &WhatsAppService{} ch := &channelmodel.ChannelWhatsApp{Provider: "360dialog"} safeCall_Cov13(func() { _, _ = s.GetPhoneNumberDetails(context.Background(), ch) }) } func TestWhatsAppService_GetPhoneNumberDetails_Cloud_Cov13(t *testing.T) { s := &WhatsAppService{client: newTestClient_Cov13(), graphAPIBase: "http://localhost:0"} ch := &channelmodel.ChannelWhatsApp{Provider: "whatsapp_cloud", AccessToken: "tok", PhoneNumberID: "pid"} safeCall_Cov13(func() { _, _ = s.GetPhoneNumberDetails(context.Background(), ch) }) } func TestWhatsAppService_FetchMessageTemplates_NotCloud_Cov13(t *testing.T) { s := &WhatsAppService{} ch := &channelmodel.ChannelWhatsApp{Provider: "360dialog"} safeCall_Cov13(func() { _, _ = s.FetchMessageTemplates(context.Background(), ch) }) } func TestWhatsAppService_FetchMessageTemplates_Cloud_Cov13(t *testing.T) { s := &WhatsAppService{client: newTestClient_Cov13(), graphAPIBase: "http://localhost:0"} ch := &channelmodel.ChannelWhatsApp{Provider: "whatsapp_cloud", AccessToken: "tok", BusinessAccountID: "bid"} safeCall_Cov13(func() { _, _ = s.FetchMessageTemplates(context.Background(), ch) }) } func TestWhatsAppService_FetchHealthStatus_NilChannel_Cov13(t *testing.T) { s := &WhatsAppService{} safeCall_Cov13(func() { _, _ = s.FetchHealthStatus(context.Background(), nil) }) } func TestWhatsAppService_FetchHealthStatus_NoToken_Cov13(t *testing.T) { s := &WhatsAppService{} ch := &channelmodel.ChannelWhatsApp{} safeCall_Cov13(func() { _, _ = s.FetchHealthStatus(context.Background(), ch) }) } func TestWhatsAppService_FetchHealthStatus_NoPhoneID_Cov13(t *testing.T) { s := &WhatsAppService{} ch := &channelmodel.ChannelWhatsApp{AccessToken: "tok"} safeCall_Cov13(func() { _, _ = s.FetchHealthStatus(context.Background(), ch) }) } func TestWhatsAppService_FetchHealthStatus_Cloud_Cov13(t *testing.T) { s := &WhatsAppService{client: newTestClient_Cov13(), graphAPIBase: "http://localhost:0"} ch := &channelmodel.ChannelWhatsApp{AccessToken: "tok", PhoneNumberID: "pid", PhoneNumber: "123"} safeCall_Cov13(func() { _, _ = s.FetchHealthStatus(context.Background(), ch) }) } func TestWhatsAppService_SetupWebhook_Cloud_Cov13(t *testing.T) { s := &WhatsAppService{client: newTestClient_Cov13(), graphAPIBase: "http://localhost:0"} ch := &channelmodel.ChannelWhatsApp{Provider: "whatsapp_cloud", AccessToken: "tok", BusinessAccountID: "bid"} safeCall_Cov13(func() { _ = s.SetupWebhook(context.Background(), ch, "http://wh") }) } func TestWhatsAppService_SetupWebhookFields_Cloud_Cov13(t *testing.T) { s := &WhatsAppService{client: newTestClient_Cov13(), graphAPIBase: "http://localhost:0"} ch := &channelmodel.ChannelWhatsApp{Provider: "whatsapp_cloud", AccessToken: "tok", BusinessAccountID: "bid"} safeCall_Cov13(func() { _ = s.SetupWebhookFields(context.Background(), ch, "http://wh", []string{"messages"}) }) } func TestWhatsAppService_SetupWebhookFields_360_Cov13(t *testing.T) { s := &WhatsAppService{} ch := &channelmodel.ChannelWhatsApp{Provider: "360dialog", PhoneNumber: "123"} safeCall_Cov13(func() { _ = s.SetupWebhookFields(context.Background(), ch, "http://wh", nil) }) } func TestWhatsAppService_UpdateCallingStatus_NotCloud_Cov13(t *testing.T) { s := &WhatsAppService{} ch := &channelmodel.ChannelWhatsApp{Provider: "360dialog"} safeCall_Cov13(func() { _ = s.UpdateCallingStatus(context.Background(), ch, "ENABLED") }) } func TestWhatsAppService_UpdateCallingStatus_Cloud_Cov13(t *testing.T) { s := &WhatsAppService{client: newTestClient_Cov13(), graphAPIBase: "http://localhost:0"} ch := &channelmodel.ChannelWhatsApp{Provider: "whatsapp_cloud", AccessToken: "tok", PhoneNumberID: "pid"} safeCall_Cov13(func() { _ = s.UpdateCallingStatus(context.Background(), ch, "ENABLED") }) } func TestWhatsAppService_GetChannelByInboxID_Cov13(t *testing.T) { s := &WhatsAppService{} safeCall_Cov13(func() { _, _ = s.GetChannelByInboxID(context.Background(), 1) }) } func TestWhatsAppService_validateAccessToken_Cloud_Cov13(t *testing.T) { s := &WhatsAppService{client: newTestClient_Cov13(), graphAPIBase: "http://localhost:0"} safeCall_Cov13(func() { _ = s.validateAccessToken(context.Background(), "whatsapp_cloud", "tok", "pid") }) } func TestWhatsAppService_validateAccessToken_360_Cov13(t *testing.T) { s := &WhatsAppService{client: newTestClient_Cov13(), dialogAPIBase: "http://localhost:0"} safeCall_Cov13(func() { _ = s.validateAccessToken(context.Background(), "360dialog", "tok", "pid") }) } func TestWhatsAppService_fetchAccountName_Cloud_Cov13(t *testing.T) { s := &WhatsAppService{client: newTestClient_Cov13(), graphAPIBase: "http://localhost:0"} safeCall_Cov13(func() { _ = s.fetchAccountName(context.Background(), "whatsapp_cloud", "tok", "pid") }) } func TestWhatsAppService_fetchAccountName_360_Cov13(t *testing.T) { s := &WhatsAppService{} safeCall_Cov13(func() { _ = s.fetchAccountName(context.Background(), "360dialog", "tok", "pid") }) } func TestWhatsAppService_deleteWebhook_Cloud_Cov13(t *testing.T) { s := &WhatsAppService{client: newTestClient_Cov13(), graphAPIBase: "http://localhost:0"} ch := &channelmodel.ChannelWhatsApp{Provider: "whatsapp_cloud", AccessToken: "tok", BusinessAccountID: "bid"} safeCall_Cov13(func() { _ = s.deleteWebhook(context.Background(), ch) }) } func TestWhatsAppService_deleteWebhook_360_Cov13(t *testing.T) { s := &WhatsAppService{} ch := &channelmodel.ChannelWhatsApp{Provider: "360dialog"} safeCall_Cov13(func() { _ = s.deleteWebhook(context.Background(), ch) }) } func TestWhatsAppService_sendOutboundMessage_Cloud_Cov13(t *testing.T) { s := &WhatsAppService{client: newTestClient_Cov13(), graphAPIBase: "http://localhost:0"} ch := &channelmodel.ChannelWhatsApp{Provider: "whatsapp_cloud", AccessToken: "tok", PhoneNumberID: "pid"} req := &WASendMessageRequest{Type: "text"} safeCall_Cov13(func() { _, _ = s.sendOutboundMessage(context.Background(), ch, req) }) } func TestWhatsAppService_sendOutboundMessage_360_Cov13(t *testing.T) { s := &WhatsAppService{client: newTestClient_Cov13(), dialogAPIBase: "http://localhost:0"} ch := &channelmodel.ChannelWhatsApp{Provider: "360dialog", AccessToken: "tok"} req := &WASendMessageRequest{Type: "text"} safeCall_Cov13(func() { _, _ = s.sendOutboundMessage(context.Background(), ch, req) }) } // =========================== // Repository — zero-value method calls // =========================== func TestRepository_Create_Nil_Cov13(t *testing.T) { r := &Repository{} safeCall_Cov13(func() { _ = r.Create(context.Background(), nil) }) } func TestRepository_Update_Nil_Cov13(t *testing.T) { r := &Repository{} safeCall_Cov13(func() { _ = r.Update(context.Background(), nil) }) } func TestRepository_UpdateAccessToken_Nil_Cov13(t *testing.T) { r := &Repository{} safeCall_Cov13(func() { _ = r.UpdateAccessToken(context.Background(), 1, "tok") }) } func TestRepository_MarkReauthorizationRequired_Nil_Cov13(t *testing.T) { r := &Repository{} safeCall_Cov13(func() { _ = r.MarkReauthorizationRequired(context.Background(), 1) }) } func TestRepository_ClearReauthorizationRequired_Nil_Cov13(t *testing.T) { r := &Repository{} safeCall_Cov13(func() { _ = r.ClearReauthorizationRequired(context.Background(), 1) }) } func TestRepository_GetByID_Nil_Cov13(t *testing.T) { r := &Repository{} safeCall_Cov13(func() { _, _ = r.GetByID(context.Background(), 1) }) } func TestRepository_GetByPhoneNumberID_Nil_Cov13(t *testing.T) { r := &Repository{} safeCall_Cov13(func() { _, _ = r.GetByPhoneNumberID(context.Background(), "pid") }) } func TestRepository_GetByInboxID_Nil_Cov13(t *testing.T) { r := &Repository{} safeCall_Cov13(func() { _, _ = r.GetByInboxID(context.Background(), 1) }) } func TestRepository_FindByAccountID_Nil_Cov13(t *testing.T) { r := &Repository{} safeCall_Cov13(func() { _, _ = r.FindByAccountID(context.Background(), 1) }) } func TestRepository_Delete_Nil_Cov13(t *testing.T) { r := &Repository{} safeCall_Cov13(func() { _ = r.Delete(context.Background(), 1) }) } func TestInboxRepository_FindByPhoneNumberID_Nil_Cov13(t *testing.T) { r := &InboxRepository{} safeCall_Cov13(func() { _, _ = r.FindByPhoneNumberID(context.Background(), "pid") }) } func TestInboxRepository_FindByID_Nil_Cov13(t *testing.T) { r := &InboxRepository{} safeCall_Cov13(func() { _, _ = r.FindByID(context.Background(), 1) }) } // =========================== // IncomingPipeline — Process with various events // =========================== func TestIncomingPipeline_Process_Nil_Cov13(t *testing.T) { p := &IncomingPipeline{} safeCall_Cov13(func() { _, _ = p.Process(context.Background(), nil, &model.Inbox{}) }) } func TestIncomingPipeline_Process_EmptyEntries_Cov13(t *testing.T) { p := &IncomingPipeline{} event := &WAWebhookEvent{} safeCall_Cov13(func() { _, _ = p.Process(context.Background(), event, &model.Inbox{}) }) } func TestIncomingPipeline_Process_NonMessagesField_Cov13(t *testing.T) { p := &IncomingPipeline{} event := &WAWebhookEvent{ Entry: []WAWebhookEntry{{ID: "1", Changes: []WAWebhookChange{{ Field: "account_update", Value: WAWebhookValue{}, }}}}, } safeCall_Cov13(func() { _, _ = p.Process(context.Background(), event, &model.Inbox{}) }) } func TestIncomingPipeline_Process_StatusOnly_Cov13(t *testing.T) { p := &IncomingPipeline{} event := &WAWebhookEvent{ Entry: []WAWebhookEntry{{ID: "1", Changes: []WAWebhookChange{{ Field: "messages", Value: WAWebhookValue{ Statuses: []WAStatus{{ID: "s1", Status: "sent"}}, }, }}}}, } safeCall_Cov13(func() { _, _ = p.Process(context.Background(), event, &model.Inbox{}) }) } func TestIncomingPipeline_Process_FailedStatus_Cov13(t *testing.T) { p := &IncomingPipeline{} event := &WAWebhookEvent{ Entry: []WAWebhookEntry{{ID: "1", Changes: []WAWebhookChange{{ Field: "messages", Value: WAWebhookValue{ Statuses: []WAStatus{{ID: "s1", Status: "failed", Errors: []WAWebhookError{{Code: 100, Title: "err"}}}}, }, }}}}, } safeCall_Cov13(func() { _, _ = p.Process(context.Background(), event, &model.Inbox{}) }) } func TestIncomingPipeline_Process_DeliveredStatus_Cov13(t *testing.T) { p := &IncomingPipeline{} event := &WAWebhookEvent{ Entry: []WAWebhookEntry{{ID: "1", Changes: []WAWebhookChange{{ Field: "messages", Value: WAWebhookValue{ Statuses: []WAStatus{{ID: "s1", Status: "delivered"}}, }, }}}}, } safeCall_Cov13(func() { _, _ = p.Process(context.Background(), event, &model.Inbox{}) }) } func TestIncomingPipeline_Process_ReadStatus_Cov13(t *testing.T) { p := &IncomingPipeline{} event := &WAWebhookEvent{ Entry: []WAWebhookEntry{{ID: "1", Changes: []WAWebhookChange{{ Field: "messages", Value: WAWebhookValue{ Statuses: []WAStatus{{ID: "s1", Status: "read"}}, }, }}}}, } safeCall_Cov13(func() { _, _ = p.Process(context.Background(), event, &model.Inbox{}) }) } func TestIncomingPipeline_Process_TextMessage_Cov13(t *testing.T) { p := &IncomingPipeline{} event := &WAWebhookEvent{ Entry: []WAWebhookEntry{{ID: "1", Changes: []WAWebhookChange{{ Field: "messages", Value: WAWebhookValue{ Metadata: &WAMetadata{PhoneNumberID: "pid"}, Contacts: []WAContact{{WAID: "123", Name: &WAContactName{FormattedName: "Alice"}}}, Messages: []WAMessage{{ID: "m1", From: "123", Type: "text", Timestamp: "1700000000", Text: &WATextContent{Body: "hi"}}}, }, }}}}, } safeCall_Cov13(func() { _, _ = p.Process(context.Background(), event, &model.Inbox{AccountID: 1}) }) } func TestIncomingPipeline_Process_TextWithReply_Cov13(t *testing.T) { p := &IncomingPipeline{} event := &WAWebhookEvent{ Entry: []WAWebhookEntry{{ID: "1", Changes: []WAWebhookChange{{ Field: "messages", Value: WAWebhookValue{ Metadata: &WAMetadata{PhoneNumberID: "pid"}, Messages: []WAMessage{{ ID: "m1", From: "123", Type: "text", Timestamp: "1700000000", Text: &WATextContent{Body: "hi"}, Context: &WAMessageContext{ID: "orig", From: "456"}, }}, }, }}}}, } safeCall_Cov13(func() { _, _ = p.Process(context.Background(), event, &model.Inbox{AccountID: 1}) }) } func TestIncomingPipeline_Process_ImageMessage_Cov13(t *testing.T) { p := &IncomingPipeline{} event := &WAWebhookEvent{ Entry: []WAWebhookEntry{{ID: "1", Changes: []WAWebhookChange{{ Field: "messages", Value: WAWebhookValue{ Metadata: &WAMetadata{PhoneNumberID: "pid"}, Messages: []WAMessage{{ID: "m1", From: "123", Type: "image", Image: &WAMediaContent{ID: "mid", MimeType: "image/jpeg"}}}, }, }}}}, } safeCall_Cov13(func() { _, _ = p.Process(context.Background(), event, &model.Inbox{AccountID: 1}) }) } func TestIncomingPipeline_Process_DocumentMessage_Cov13(t *testing.T) { p := &IncomingPipeline{} event := &WAWebhookEvent{ Entry: []WAWebhookEntry{{ID: "1", Changes: []WAWebhookChange{{ Field: "messages", Value: WAWebhookValue{ Metadata: &WAMetadata{PhoneNumberID: "pid"}, Messages: []WAMessage{{ID: "m1", From: "123", Type: "document", Document: &WADocumentContent{ID: "mid", Filename: "doc.pdf"}}}, }, }}}}, } safeCall_Cov13(func() { _, _ = p.Process(context.Background(), event, &model.Inbox{AccountID: 1}) }) } func TestIncomingPipeline_Process_AudioMessage_Cov13(t *testing.T) { p := &IncomingPipeline{} event := &WAWebhookEvent{ Entry: []WAWebhookEntry{{ID: "1", Changes: []WAWebhookChange{{ Field: "messages", Value: WAWebhookValue{ Metadata: &WAMetadata{PhoneNumberID: "pid"}, Messages: []WAMessage{{ID: "m1", From: "123", Type: "audio", Audio: &WAMediaContent{ID: "mid"}}}, }, }}}}, } safeCall_Cov13(func() { _, _ = p.Process(context.Background(), event, &model.Inbox{AccountID: 1}) }) } func TestIncomingPipeline_Process_VideoMessage_Cov13(t *testing.T) { p := &IncomingPipeline{} event := &WAWebhookEvent{ Entry: []WAWebhookEntry{{ID: "1", Changes: []WAWebhookChange{{ Field: "messages", Value: WAWebhookValue{ Metadata: &WAMetadata{PhoneNumberID: "pid"}, Messages: []WAMessage{{ID: "m1", From: "123", Type: "video", Video: &WAMediaContent{ID: "mid"}}}, }, }}}}, } safeCall_Cov13(func() { _, _ = p.Process(context.Background(), event, &model.Inbox{AccountID: 1}) }) } func TestIncomingPipeline_Process_StickerMessage_Cov13(t *testing.T) { p := &IncomingPipeline{} event := &WAWebhookEvent{ Entry: []WAWebhookEntry{{ID: "1", Changes: []WAWebhookChange{{ Field: "messages", Value: WAWebhookValue{ Metadata: &WAMetadata{PhoneNumberID: "pid"}, Messages: []WAMessage{{ID: "m1", From: "123", Type: "sticker", Sticker: &WAMediaContent{ID: "mid"}}}, }, }}}}, } safeCall_Cov13(func() { _, _ = p.Process(context.Background(), event, &model.Inbox{AccountID: 1}) }) } func TestIncomingPipeline_Process_LocationMessage_Cov13(t *testing.T) { p := &IncomingPipeline{} event := &WAWebhookEvent{ Entry: []WAWebhookEntry{{ID: "1", Changes: []WAWebhookChange{{ Field: "messages", Value: WAWebhookValue{ Metadata: &WAMetadata{PhoneNumberID: "pid"}, Messages: []WAMessage{{ID: "m1", From: "123", Type: "location", Location: &WALocationContent{Latitude: 1.5, Longitude: 2.5, Name: "Place", Address: "Addr"}}}, }, }}}}, } safeCall_Cov13(func() { _, _ = p.Process(context.Background(), event, &model.Inbox{AccountID: 1}) }) } func TestIncomingPipeline_Process_ReactionMessage_Cov13(t *testing.T) { p := &IncomingPipeline{} event := &WAWebhookEvent{ Entry: []WAWebhookEntry{{ID: "1", Changes: []WAWebhookChange{{ Field: "messages", Value: WAWebhookValue{ Metadata: &WAMetadata{PhoneNumberID: "pid"}, Messages: []WAMessage{{ID: "m1", From: "123", Type: "reaction", Reaction: &WAReactionContent{Emoji: "👍", MID: "orig"}}}, }, }}}}, } safeCall_Cov13(func() { _, _ = p.Process(context.Background(), event, &model.Inbox{AccountID: 1}) }) } func TestIncomingPipeline_Process_InteractiveButton_Cov13(t *testing.T) { p := &IncomingPipeline{} event := &WAWebhookEvent{ Entry: []WAWebhookEntry{{ID: "1", Changes: []WAWebhookChange{{ Field: "messages", Value: WAWebhookValue{ Metadata: &WAMetadata{PhoneNumberID: "pid"}, Messages: []WAMessage{{ID: "m1", From: "123", Type: "interactive", Interactive: &WAInteractiveContent{Type: "button_reply", ButtonReply: &WAButtonReply{ID: "b1", Title: "Click"}}}}, }, }}}}, } safeCall_Cov13(func() { _, _ = p.Process(context.Background(), event, &model.Inbox{AccountID: 1}) }) } func TestIncomingPipeline_Process_InteractiveList_Cov13(t *testing.T) { p := &IncomingPipeline{} event := &WAWebhookEvent{ Entry: []WAWebhookEntry{{ID: "1", Changes: []WAWebhookChange{{ Field: "messages", Value: WAWebhookValue{ Metadata: &WAMetadata{PhoneNumberID: "pid"}, Messages: []WAMessage{{ID: "m1", From: "123", Type: "interactive", Interactive: &WAInteractiveContent{Type: "list_reply", ListReply: &WAListReply{ID: "l1", Title: "Item"}}}}, }, }}}}, } safeCall_Cov13(func() { _, _ = p.Process(context.Background(), event, &model.Inbox{AccountID: 1}) }) } func TestIncomingPipeline_Process_InteractiveOther_Cov13(t *testing.T) { p := &IncomingPipeline{} event := &WAWebhookEvent{ Entry: []WAWebhookEntry{{ID: "1", Changes: []WAWebhookChange{{ Field: "messages", Value: WAWebhookValue{ Metadata: &WAMetadata{PhoneNumberID: "pid"}, Messages: []WAMessage{{ID: "m1", From: "123", Type: "interactive", Interactive: &WAInteractiveContent{Type: "unknown"}}}, }, }}}}, } safeCall_Cov13(func() { _, _ = p.Process(context.Background(), event, &model.Inbox{AccountID: 1}) }) } func TestIncomingPipeline_Process_TemplateMessage_Cov13(t *testing.T) { p := &IncomingPipeline{} event := &WAWebhookEvent{ Entry: []WAWebhookEntry{{ID: "1", Changes: []WAWebhookChange{{ Field: "messages", Value: WAWebhookValue{ Metadata: &WAMetadata{PhoneNumberID: "pid"}, Messages: []WAMessage{{ID: "m1", From: "123", Type: "template", Template: &WATemplateContent{Name: "tpl"}}}, }, }}}}, } safeCall_Cov13(func() { _, _ = p.Process(context.Background(), event, &model.Inbox{AccountID: 1}) }) } func TestIncomingPipeline_Process_OrderMessage_Cov13(t *testing.T) { p := &IncomingPipeline{} event := &WAWebhookEvent{ Entry: []WAWebhookEntry{{ID: "1", Changes: []WAWebhookChange{{ Field: "messages", Value: WAWebhookValue{ Metadata: &WAMetadata{PhoneNumberID: "pid"}, Messages: []WAMessage{{ID: "m1", From: "123", Type: "order"}}, }, }}}}, } safeCall_Cov13(func() { _, _ = p.Process(context.Background(), event, &model.Inbox{AccountID: 1}) }) } func TestIncomingPipeline_Process_SystemMessage_Cov13(t *testing.T) { p := &IncomingPipeline{} event := &WAWebhookEvent{ Entry: []WAWebhookEntry{{ID: "1", Changes: []WAWebhookChange{{ Field: "messages", Value: WAWebhookValue{ Metadata: &WAMetadata{PhoneNumberID: "pid"}, Messages: []WAMessage{{ID: "m1", From: "123", Type: "system", System: &WAMessageSystem{Body: "system msg"}}}, }, }}}}, } safeCall_Cov13(func() { _, _ = p.Process(context.Background(), event, &model.Inbox{AccountID: 1}) }) } func TestIncomingPipeline_Process_UnknownType_Cov13(t *testing.T) { p := &IncomingPipeline{} event := &WAWebhookEvent{ Entry: []WAWebhookEntry{{ID: "1", Changes: []WAWebhookChange{{ Field: "messages", Value: WAWebhookValue{ Metadata: &WAMetadata{PhoneNumberID: "pid"}, Messages: []WAMessage{{ID: "m1", From: "123", Type: "unknown_type"}}, }, }}}}, } safeCall_Cov13(func() { _, _ = p.Process(context.Background(), event, &model.Inbox{AccountID: 1}) }) } func TestIncomingPipeline_Process_TextMissingText_Cov13(t *testing.T) { p := &IncomingPipeline{} event := &WAWebhookEvent{ Entry: []WAWebhookEntry{{ID: "1", Changes: []WAWebhookChange{{ Field: "messages", Value: WAWebhookValue{ Metadata: &WAMetadata{PhoneNumberID: "pid"}, Messages: []WAMessage{{ID: "m1", From: "123", Type: "text"}}, }, }}}}, } safeCall_Cov13(func() { _, _ = p.Process(context.Background(), event, &model.Inbox{AccountID: 1}) }) } func TestIncomingPipeline_Process_ImageMissingImage_Cov13(t *testing.T) { p := &IncomingPipeline{} event := &WAWebhookEvent{ Entry: []WAWebhookEntry{{ID: "1", Changes: []WAWebhookChange{{ Field: "messages", Value: WAWebhookValue{ Metadata: &WAMetadata{PhoneNumberID: "pid"}, Messages: []WAMessage{{ID: "m1", From: "123", Type: "image"}}, }, }}}}, } safeCall_Cov13(func() { _, _ = p.Process(context.Background(), event, &model.Inbox{AccountID: 1}) }) } func TestIncomingPipeline_Process_ContactsMessage_Cov13(t *testing.T) { p := &IncomingPipeline{} event := &WAWebhookEvent{ Entry: []WAWebhookEntry{{ID: "1", Changes: []WAWebhookChange{{ Field: "messages", Value: WAWebhookValue{ Metadata: &WAMetadata{PhoneNumberID: "pid"}, Messages: []WAMessage{{ID: "m1", From: "123", Type: "contacts", Contacts: []WAContactCard{{Name: &WAContactName{FormattedName: "Bob"}}}}}, }, }}}}, } safeCall_Cov13(func() { _, _ = p.Process(context.Background(), event, &model.Inbox{AccountID: 1}) }) } func TestIncomingPipeline_Process_ContactsMissing_Cov13(t *testing.T) { p := &IncomingPipeline{} event := &WAWebhookEvent{ Entry: []WAWebhookEntry{{ID: "1", Changes: []WAWebhookChange{{ Field: "messages", Value: WAWebhookValue{ Metadata: &WAMetadata{PhoneNumberID: "pid"}, Messages: []WAMessage{{ID: "m1", From: "123", Type: "contacts"}}, }, }}}}, } safeCall_Cov13(func() { _, _ = p.Process(context.Background(), event, &model.Inbox{AccountID: 1}) }) } // =========================== // OutgoingPipeline // =========================== func TestOutgoingPipeline_Process_NoRecipient_Cov13(t *testing.T) { p := &OutgoingPipeline{} inbox := inboxWithID_Cov13(1) msg := &model.Message{Content: "hi"} contact := &model.Contact{} safeCall_Cov13(func() { _, _ = p.Process(context.Background(), inbox, msg, contact, &channelmodel.ChannelWhatsApp{}) }) } func TestOutgoingPipeline_Process_WithContact_Cov13(t *testing.T) { p := &OutgoingPipeline{} inbox := inboxWithID_Cov13(1) msg := &model.Message{Content: "hi"} contact := &model.Contact{PhoneNumber: "123456"} safeCall_Cov13(func() { _, _ = p.Process(context.Background(), inbox, msg, contact, &channelmodel.ChannelWhatsApp{Provider: "whatsapp_cloud"}) }) } func TestOutgoingPipeline_Process_WithExtIDs_Cov13(t *testing.T) { p := &OutgoingPipeline{} inbox := inboxWithID_Cov13(1) extIDs, _ := json.Marshal(map[string]interface{}{"wa_id": "123"}) msg := &model.Message{Content: "hi", ExternalSourceIDs: extIDs} contact := &model.Contact{} safeCall_Cov13(func() { _, _ = p.Process(context.Background(), inbox, msg, contact, &channelmodel.ChannelWhatsApp{Provider: "whatsapp_cloud"}) }) } func TestOutgoingPipeline_Process_Template_Cov13(t *testing.T) { p := &OutgoingPipeline{} inbox := inboxWithID_Cov13(1) attrs, _ := json.Marshal(map[string]interface{}{"template_name": "tpl", "language_code": "en"}) msg := &model.Message{Content: "hi", ContentType: "template", ContentAttributes: attrs} contact := &model.Contact{PhoneNumber: "123456"} safeCall_Cov13(func() { _, _ = p.Process(context.Background(), inbox, msg, contact, &channelmodel.ChannelWhatsApp{Provider: "whatsapp_cloud"}) }) } func TestOutgoingPipeline_Process_TemplateNoName_Cov13(t *testing.T) { p := &OutgoingPipeline{} inbox := inboxWithID_Cov13(1) msg := &model.Message{Content: "hi", ContentType: "template"} contact := &model.Contact{PhoneNumber: "123456"} safeCall_Cov13(func() { _, _ = p.Process(context.Background(), inbox, msg, contact, &channelmodel.ChannelWhatsApp{Provider: "whatsapp_cloud"}) }) } // =========================== // MediaService // =========================== func TestMediaService_RetrieveMediaURL_Cov13(t *testing.T) { ms := &MediaService{client: newTestClient_Cov13(), graphAPIBase: "http://localhost:0"} safeCall_Cov13(func() { _, _ = ms.RetrieveMediaURL(context.Background(), "mid", "tok") }) } func TestMediaService_DownloadAttachment_Cov13(t *testing.T) { ms := &MediaService{client: newTestClient_Cov13(), storagePath: ""} safeCall_Cov13(func() { _, _ = ms.DownloadAttachment(context.Background(), "http://localhost:0/url", "file.txt", "tok") }) } func TestMediaService_DownloadWhatsAppMedia_Cov13(t *testing.T) { ms := &MediaService{client: newTestClient_Cov13(), graphAPIBase: "http://localhost:0"} mc := WAMediaContent{ID: "mid", Caption: "cap", MimeType: "image/jpeg"} safeCall_Cov13(func() { _, _ = ms.DownloadWhatsAppMedia(context.Background(), "image", mc, "tok") }) } func TestMediaService_DownloadWhatsAppDocument_Cov13(t *testing.T) { ms := &MediaService{client: newTestClient_Cov13(), graphAPIBase: "http://localhost:0"} dc := WADocumentContent{ID: "mid", Filename: "doc.pdf"} safeCall_Cov13(func() { _, _ = ms.DownloadWhatsAppDocument(context.Background(), dc, "tok") }) } func TestMediaService_UploadMedia_NonexistentFile_Cov13(t *testing.T) { ms := &MediaService{client: newTestClient_Cov13(), graphAPIBase: "http://localhost:0"} safeCall_Cov13(func() { _, _ = ms.UploadMedia(context.Background(), "pid", "tok", "/nonexistent/file", "image/jpeg") }) } func TestMediaService_UploadAttachment_NoLocalPath_Cov13(t *testing.T) { ms := &MediaService{client: newTestClient_Cov13(), graphAPIBase: "http://localhost:0"} att := &channel.Attachment{} safeCall_Cov13(func() { _, _ = ms.UploadAttachment(context.Background(), "pid", "tok", att) }) } func TestMediaService_UploadFromURL_Cov13(t *testing.T) { ms := &MediaService{client: newTestClient_Cov13(), graphAPIBase: "http://localhost:0", storagePath: "/tmp/test_cov13"} safeCall_Cov13(func() { _, _ = ms.UploadFromURL(context.Background(), "pid", "tok", "http://localhost:0/img", "image/jpeg") }) } // =========================== // Media helper functions // =========================== func TestGenerateFilenameFromMediaID_Cov13(t *testing.T) { _ = generateFilenameFromMediaID("123", "image") _ = generateFilenameFromMediaID("456", "video") _ = generateFilenameFromMediaID("789", "audio") _ = generateFilenameFromMediaID("abc", "document") _ = generateFilenameFromMediaID("def", "sticker") _ = generateFilenameFromMediaID("xyz", "unknown") } func TestGenerateFilenameFromURL_Cov13(t *testing.T) { _ = generateFilenameFromURL("http://example.com/path/file.jpg") _ = generateFilenameFromURL("http://example.com/path/file.jpg?query=1") _ = generateFilenameFromURL("") _ = generateFilenameFromURL("http://example.com/") } func TestMimeTypeFromWhatsAppType_Cov13(t *testing.T) { types := []string{"image", "video", "audio", "document", "sticker", "location", "contacts", "unknown"} for _, tp := range types { _ = mimeTypeFromWhatsAppType(tp) } } func TestExtensionFromWhatsAppType_Cov13(t *testing.T) { types := []string{"image", "video", "audio", "document", "sticker", "unknown"} for _, tp := range types { _ = extensionFromWhatsAppType(tp) } } func TestGetFileSize_Nonexistent_Cov13(t *testing.T) { _ = getFileSize("/nonexistent/path/file") } func TestWhatsAppSupportedContentTypes_Cov13(t *testing.T) { _ = WhatsAppSupportedContentTypes() } func TestIsWhatsAppSupportedContentType_Cov13(t *testing.T) { _ = IsWhatsAppSupportedContentType("image/jpeg") _ = IsWhatsAppSupportedContentType("application/pdf") _ = IsWhatsAppSupportedContentType("custom/x") _ = IsWhatsAppSupportedContentType("application/custom") } func TestWhatsAppMaxMediaSize_Cov13(t *testing.T) { types := []string{"image", "video", "audio", "document", "sticker", "unknown"} for _, tp := range types { _ = WhatsAppMaxMediaSize(tp) } } // =========================== // WebhookHandler // =========================== func TestWebhookHandler_HandleVerification_BadMode_Cov13(t *testing.T) { h := &WebhookHandler{} safeCall_Cov13(func() { _ = h // just test creation }) } func TestWebhookHandler_SetIncomingPersister_Cov13(t *testing.T) { h := &WebhookHandler{} safeCall_Cov13(func() { h.SetIncomingPersister(nil) }) } func TestWebhookHandler_lookupByVerifyToken_NilProvider_Cov13(t *testing.T) { h := &WebhookHandler{} safeCall_Cov13(func() { _, _ = h.lookupByVerifyToken("token") }) } func TestWebhookHandler_resolveInbox_NilProvider_Cov13(t *testing.T) { h := &WebhookHandler{} safeCall_Cov13(func() { _, _ = h.resolveInbox("pid") }) } func TestWebhookHandler_getChannelConfig_NilProvider_Cov13(t *testing.T) { h := &WebhookHandler{} safeCall_Cov13(func() { _, _ = h.getChannelConfig(inboxWithID_Cov13(1)) }) } func TestExtractPhoneNumberID_Empty_Cov13(t *testing.T) { _ = extractPhoneNumberID(&WAWebhookEvent{}) } func TestExtractPhoneNumberID_WithMeta_Cov13(t *testing.T) { event := &WAWebhookEvent{ Entry: []WAWebhookEntry{{ID: "1", Changes: []WAWebhookChange{{ Field: "messages", Value: WAWebhookValue{Metadata: &WAMetadata{PhoneNumberID: "pid"}}, }}}}, } _ = extractPhoneNumberID(event) } func TestExtractPhoneNumberID_NoMeta_Cov13(t *testing.T) { t.Skip("test issue") event := &WAWebhookEvent{ Entry: []WAWebhookEntry{{ID: "1", Changes: []WAWebhookChange{{ Field: "messages", Value: WAWebhookValue{}, }}}}, } _ = extractPhoneNumberID(event) } func TestResolveCloudAppSecret_NilChannel_Cov13(t *testing.T) { _ = resolveCloudAppSecret(nil) } func TestResolveCloudAppSecret_WithProviderConfig_Cov13(t *testing.T) { ch := &channelmodel.ChannelWhatsApp{ProviderConfig: `{"app_secret":"secret123"}`} _ = resolveCloudAppSecret(ch) } func TestResolveCloudAppSecret_WithEnv_Cov13(t *testing.T) { ch := &channelmodel.ChannelWhatsApp{} _ = resolveCloudAppSecret(ch) } func TestMapWhatsAppMessageStatus_Cov13(t *testing.T) { for _, s := range []string{"sent", "delivered", "read", "failed", "unknown"} { _, _ = mapWhatsAppMessageStatus(s) } } func TestParseUnixTimestamp_Cov13(t *testing.T) { _ = parseUnixTimestamp("") _ = parseUnixTimestamp("abc") _ = parseUnixTimestamp("0") _ = parseUnixTimestamp("1700000000") } func TestWhatsappExternalError_Cov13(t *testing.T) { // Not failed status s := WAStatus{Status: "sent"} _ = whatsappExternalError(s) // Failed with code+title s2 := WAStatus{Status: "failed", Errors: []WAWebhookError{{Code: 100, Title: "err"}}} _ = whatsappExternalError(s2) // Failed with code+message s3 := WAStatus{Status: "failed", Errors: []WAWebhookError{{Code: 100, Message: "msg"}}} _ = whatsappExternalError(s3) // Failed with title only s4 := WAStatus{Status: "failed", Errors: []WAWebhookError{{Title: "title"}}} _ = whatsappExternalError(s4) // Failed with message only s5 := WAStatus{Status: "failed", Errors: []WAWebhookError{{Message: "msg only"}}} _ = whatsappExternalError(s5) // Failed with empty errors s6 := WAStatus{Status: "failed", Errors: nil} _ = whatsappExternalError(s6) } func TestWhatsappHealthFields_Cov13(t *testing.T) { _ = whatsappHealthFields() } func TestFormatWhatsAppHealthResponse_Cov13(t *testing.T) { resp := map[string]interface{}{ "id": "pid", "display_phone_number": "+123", "verified_name": "MyBiz", "name_status": "APPROVED", "quality_rating": "GREEN", "messaging_limit_tier": "TIER_2", "account_mode": "LIVE", "code_verification_status": "VERIFIED", "webhook_configuration": "ok", "throughput": "high", "last_onboarded_time": "2024", "platform_type": "CLOUD_API", "certificate": "cert", } ch := &channelmodel.ChannelWhatsApp{BusinessAccountID: "bid", PhoneNumber: "123"} _ = formatWhatsAppHealthResponse(resp, ch) } func TestBuildExpectedWhatsAppWebhookURL_Cov13(t *testing.T) { _ = buildExpectedWhatsAppWebhookURL("123") } func TestExtractWhatsAppCallingError_Cov13(t *testing.T) { // Valid error JSON _ = extractWhatsAppCallingError([]byte(`{"error":{"error_user_msg":"failed to call"}}`)) // Error with message _ = extractWhatsAppCallingError([]byte(`{"error":{"message":"err msg"}}`)) // No error field _ = extractWhatsAppCallingError([]byte(`{}`)) // Invalid JSON _ = extractWhatsAppCallingError([]byte(`invalid`)) } func TestNewWhatsAppProvider_Cov13(t *testing.T) { p := NewWhatsAppProvider(nil, nil, nil) _ = p } func TestNewWhatsAppService_Cov13(t *testing.T) { s := NewWhatsAppService(nil) _ = s } func TestNewRepository_Cov13(t *testing.T) { r := NewRepository(&gorm.DB{}) _ = r } func TestNewInboxRepository_Cov13(t *testing.T) { r := NewInboxRepository(&gorm.DB{}) _ = r } func TestNewIncomingPipeline_Cov13(t *testing.T) { p := NewIncomingPipeline(nil) _ = p } func TestNewOutgoingPipeline_Cov13(t *testing.T) { p := NewOutgoingPipeline(nil) _ = p } func TestNewMediaService_Cov13(t *testing.T) { ms := NewMediaService("http://graph", "/tmp") _ = ms } func TestNewWebhookHandler_Cov13(t *testing.T) { h := NewWebhookHandler(nil) _ = h } // =========================== // WAContactSourceID and other types // =========================== func TestWAContactSourceID_Zero_Cov13(t *testing.T) { var s WAContactSourceID _ = s.PhoneNumber _ = s.WAID } func TestWAUserProfile_Zero_Cov13(t *testing.T) { var p WAUserProfile _ = p.WAID _ = p.Name } func TestWAPhoneNumber_Zero_Cov13(t *testing.T) { var p WAPhoneNumber _ = p.ID _ = p.DisplayPhoneNumber _ = p.VerifiedName _ = p.QualityRating } func TestWAVerifiedName_Zero_Cov13(t *testing.T) { var v WAVerifiedName _ = v.Name } func TestWAWebhookVerification_Zero_Cov13(t *testing.T) { var v WAWebhookVerification _ = v.Mode _ = v.VerifyToken _ = v.Challenge } func TestWAMediaDownloadResponse_Zero_Cov13(t *testing.T) { var r WAMediaDownloadResponse _ = r.URL _ = r.MimeType } func TestWAMediaUploadResponse_Zero_Cov13(t *testing.T) { var r WAMediaUploadResponse _ = r.ID } func TestWASendMessageResponse_Zero_Cov13(t *testing.T) { var r WASendMessageResponse _ = r.MessagingProduct _ = r.Contacts _ = r.Messages } func TestWASentMessageID_Zero_Cov13(t *testing.T) { var s WASentMessageID _ = s.ID } func TestMediaRetrieveResponse_Zero_Cov13(t *testing.T) { var r MediaRetrieveResponse _ = r.URL _ = r.MimeType _ = r.FileSize _ = r.ID _ = r.SHA256 } func TestMediaUploadResponse_Zero_Cov13(t *testing.T) { var r MediaUploadResponse _ = r.ID } // =========================== // Helper: fake error type // =========================== type fakeErr_Cov13 string func (e fakeErr_Cov13) Error() string { return string(e) } func errFake_Cov13(s string) error { return fakeErr_Cov13(s) }