fix callback URL to use configurable public base
Separate callback URL generation from LISTEN_ADDR by introducing CALLBACK_BASE_URL with a localhost default for local development. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package ai_client_test
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"sync/atomic"
|
||||
@@ -112,3 +113,45 @@ func TestDispatch_AllRetriesFailed(t *testing.T) {
|
||||
t.Errorf("expected attempt_openclaw = 3, got %d", updated.AttemptOpenClaw)
|
||||
}
|
||||
}
|
||||
|
||||
func TestDispatch_UsesCallbackBaseURL(t *testing.T) {
|
||||
tdb := database.NewTestDB(t)
|
||||
|
||||
var callbackURL string
|
||||
mockServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
var payload map[string]any
|
||||
if err := json.NewDecoder(r.Body).Decode(&payload); err != nil {
|
||||
t.Fatalf("decode payload: %v", err)
|
||||
}
|
||||
val, _ := payload["callback_url"].(string)
|
||||
callbackURL = val
|
||||
w.WriteHeader(http.StatusOK)
|
||||
}))
|
||||
defer mockServer.Close()
|
||||
|
||||
cfg := &config.Config{
|
||||
OpenClawURL: mockServer.URL,
|
||||
ListenAddr: ":9999",
|
||||
CallbackBaseURL: "https://bridge.example.com/",
|
||||
}
|
||||
|
||||
task := &database.Task{
|
||||
TaskUUID: "uuid-callback-url",
|
||||
ThreadID: "thread-1",
|
||||
MessageID: "msg-callback@test.com",
|
||||
Sender: "user@test.com",
|
||||
Subject: "Callback test",
|
||||
BodyPlain: "Hello",
|
||||
Status: database.StatusReceived,
|
||||
}
|
||||
if err := database.CreateTask(tdb.DB, task); err != nil {
|
||||
t.Fatalf("create task: %v", err)
|
||||
}
|
||||
|
||||
dispatcher := ai_client.NewDispatcher(cfg, tdb.DB)
|
||||
dispatcher.Dispatch(task)
|
||||
|
||||
if callbackURL != "https://bridge.example.com/callback" {
|
||||
t.Fatalf("expected normalized callback URL, got %q", callbackURL)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user