Align CCIP catalog UX with 11-lane config-ready routes, document the no-key public API decision, and enable browser WalletConnect pairing with backend session registration and deploy-time project ID wiring. Co-authored-by: Cursor <cursoragent@cursor.com>
114 lines
3.4 KiB
Go
114 lines
3.4 KiB
Go
package rest
|
|
|
|
import (
|
|
"encoding/json"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"os"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestHandleWalletConnectConfig(t *testing.T) {
|
|
t.Setenv("WALLETCONNECT_PROJECT_ID", "test-project-id")
|
|
server := NewServer(nil, 138)
|
|
|
|
req := httptest.NewRequest(http.MethodGet, "/api/v1/walletconnect/config", nil)
|
|
rec := httptest.NewRecorder()
|
|
server.handleWalletConnectConfig(rec, req)
|
|
|
|
if rec.Code != http.StatusOK {
|
|
t.Fatalf("expected 200, got %d", rec.Code)
|
|
}
|
|
|
|
var payload map[string]interface{}
|
|
if err := json.Unmarshal(rec.Body.Bytes(), &payload); err != nil {
|
|
t.Fatalf("decode response: %v", err)
|
|
}
|
|
if payload["projectId"] != "test-project-id" {
|
|
t.Fatalf("expected project id, got %#v", payload["projectId"])
|
|
}
|
|
if payload["fallbackAuth"] != "/api/v1/auth/wallet" {
|
|
t.Fatalf("expected fallback auth path, got %#v", payload["fallbackAuth"])
|
|
}
|
|
}
|
|
|
|
func TestHandleWalletConnectConnectDisabled(t *testing.T) {
|
|
t.Setenv("WALLETCONNECT_PROJECT_ID", "")
|
|
server := NewServer(nil, 138)
|
|
|
|
req := httptest.NewRequest(http.MethodPost, "/api/v1/walletconnect/connect", strings.NewReader("{}"))
|
|
rec := httptest.NewRecorder()
|
|
server.handleWalletConnectConnect(rec, req)
|
|
|
|
if rec.Code != http.StatusNotImplemented {
|
|
t.Fatalf("expected 501, got %d", rec.Code)
|
|
}
|
|
}
|
|
|
|
func TestHandleWalletConnectConnectClientMode(t *testing.T) {
|
|
t.Setenv("WALLETCONNECT_PROJECT_ID", "test-project-id")
|
|
server := NewServer(nil, 138)
|
|
|
|
req := httptest.NewRequest(http.MethodPost, "/api/v1/walletconnect/connect", strings.NewReader("{}"))
|
|
rec := httptest.NewRecorder()
|
|
server.handleWalletConnectConnect(rec, req)
|
|
|
|
if rec.Code != http.StatusOK {
|
|
t.Fatalf("expected 200, got %d", rec.Code)
|
|
}
|
|
|
|
var payload map[string]interface{}
|
|
if err := json.Unmarshal(rec.Body.Bytes(), &payload); err != nil {
|
|
t.Fatalf("decode response: %v", err)
|
|
}
|
|
if payload["status"] != "client" {
|
|
t.Fatalf("expected client status, got %#v", payload["status"])
|
|
}
|
|
}
|
|
|
|
func TestHandleWalletConnectSessionMissing(t *testing.T) {
|
|
server := NewServer(nil, 138)
|
|
|
|
req := httptest.NewRequest(http.MethodGet, "/api/v1/walletconnect/session/demo-session", nil)
|
|
rec := httptest.NewRecorder()
|
|
server.handleWalletConnectSession(rec, req)
|
|
|
|
if rec.Code != http.StatusNotFound {
|
|
t.Fatalf("expected 404, got %d", rec.Code)
|
|
}
|
|
}
|
|
|
|
func TestHandleWalletConnectSessionRegister(t *testing.T) {
|
|
server := NewServer(nil, 138)
|
|
|
|
body := strings.NewReader(`{"sessionId":"wc-demo","address":"0x4A666F96fC8764181194447A7dFdb7d471b301C8","chainId":138}`)
|
|
req := httptest.NewRequest(http.MethodPost, "/api/v1/walletconnect/session", body)
|
|
rec := httptest.NewRecorder()
|
|
server.handleWalletConnectSessionRegister(rec, req)
|
|
|
|
if rec.Code != http.StatusOK {
|
|
t.Fatalf("expected 200, got %d body=%s", rec.Code, rec.Body.String())
|
|
}
|
|
|
|
getReq := httptest.NewRequest(http.MethodGet, "/api/v1/walletconnect/session/wc-demo", nil)
|
|
getRec := httptest.NewRecorder()
|
|
server.handleWalletConnectSession(getRec, getReq)
|
|
if getRec.Code != http.StatusOK {
|
|
t.Fatalf("expected lookup 200, got %d", getRec.Code)
|
|
}
|
|
}
|
|
|
|
func TestHandleWalletConnectRootIndex(t *testing.T) {
|
|
_ = os.Setenv("WALLETCONNECT_PROJECT_ID", "")
|
|
server := NewServer(nil, 138)
|
|
|
|
req := httptest.NewRequest(http.MethodGet, "/api/v1/walletconnect", nil)
|
|
rec := httptest.NewRecorder()
|
|
server.handleWalletConnectRoot(rec, req)
|
|
|
|
if rec.Code != http.StatusOK {
|
|
t.Fatalf("expected 200, got %d", rec.Code)
|
|
}
|
|
}
|