<message> - Introduce Feishu and DingTalk adapters in the robot lifecycle for enhanced integration capabilities. - Update the integration dispatcher to include new adapters for handling events from Feishu and DingTalk. - Modify the configuration structure to support settings for both Feishu and DingTalk integrations. - Enhance the integration parsing logic to recognize and process configurations for Feishu and DingTalk.
70 lines
2.1 KiB
Go
70 lines
2.1 KiB
Go
package feishu
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
// TestE2E_01_BotCredentials verifies the Feishu app credentials by
|
|
// sending a simple text message send request (if a chat_id is available).
|
|
func TestE2E_01_BotCredentials(t *testing.T) {
|
|
skipIfNoCreds(t)
|
|
b := testBot()
|
|
|
|
ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second)
|
|
defer cancel()
|
|
|
|
// Verify credentials by attempting to send a message.
|
|
// This will fail with a descriptive error if credentials are invalid.
|
|
_, err := b.sendMessage(ctx, "open_id", "test_invalid_open_id", "text", `{"text":"e2e test"}`)
|
|
if err == nil {
|
|
t.Log("message send succeeded (unexpected, but credentials are valid)")
|
|
return
|
|
}
|
|
|
|
// We expect a Feishu API error (not a network error), which proves
|
|
// the credentials were accepted and the API was reached.
|
|
t.Logf("API response (expected error for invalid open_id): %v", err)
|
|
}
|
|
|
|
// TestE2E_02_SendMessage tests sending a real message if FEISHU_TEST_CHAT_ID is set.
|
|
func TestE2E_02_SendMessage(t *testing.T) {
|
|
skipIfNoCreds(t)
|
|
|
|
chatID := getChatID(t)
|
|
if chatID == "" {
|
|
t.Skip("no chat_id available for send test")
|
|
}
|
|
|
|
b := testBot()
|
|
ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second)
|
|
defer cancel()
|
|
|
|
msgID, err := b.SendTextMessage(ctx, chatID, "E2E test from Yao integration at "+time.Now().Format(time.RFC3339))
|
|
if err != nil {
|
|
t.Fatalf("SendTextMessage: %v", err)
|
|
}
|
|
t.Logf("OK sent message_id=%s to chat=%s", msgID, chatID)
|
|
}
|
|
|
|
// TestE2E_03_SendImage tests sending an image message.
|
|
func TestE2E_03_SendImage(t *testing.T) {
|
|
skipIfNoCreds(t)
|
|
|
|
chatID := getChatID(t)
|
|
if chatID == "" {
|
|
t.Skip("no chat_id available for image send test")
|
|
}
|
|
|
|
// Would need an uploaded image_key. Skip if not available.
|
|
t.Skip("image_key upload not implemented yet in test suite")
|
|
}
|
|
|
|
// getChatID attempts to retrieve a test chat ID from environment or skip.
|
|
func getChatID(t *testing.T) string {
|
|
t.Helper()
|
|
// For now we don't have a chat_id mechanism like Telegram's getUpdates.
|
|
// A chat_id can be obtained by having the bot in a group or by user messaging the bot first.
|
|
return ""
|
|
}
|