Files
ginimageApi/app/mcp/server_test.go
Beyhan Oğur e04ba85564 first commit
2026-04-26 21:40:14 +03:00

103 lines
2.8 KiB
Go

package mcp
import (
"bytes"
"encoding/json"
"github.com/gin-gonic/gin"
"net/http"
"net/http/httptest"
"strings"
"testing"
)
// TestHTTPHandlerToolsList tests POST /mcp tools/list request
func TestHTTPHandlerToolsList(t *testing.T) {
gin.SetMode(gin.TestMode)
router := gin.New()
router.POST("/mcp", HTTPHandler())
payload := map[string]interface{}{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/list",
}
body, _ := json.Marshal(payload)
req := httptest.NewRequest("POST", "/mcp", bytes.NewReader(body))
req.Header.Set("Content-Type", "application/json")
w := httptest.NewRecorder()
router.ServeHTTP(w, req)
if w.Code != http.StatusOK {
t.Errorf("expected status 200, got %d", w.Code)
}
}
// TestHTTPHandlerAPIOverviewTool tests tools/call api_overview
func TestHTTPHandlerAPIOverviewTool(t *testing.T) {
gin.SetMode(gin.TestMode)
router := gin.New()
router.POST("/mcp", HTTPHandler())
payload := map[string]interface{}{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": map[string]interface{}{
"name": "api_overview",
"arguments": map[string]interface{}{},
},
}
body, _ := json.Marshal(payload)
req := httptest.NewRequest("POST", "/mcp", bytes.NewReader(body))
req.Header.Set("Content-Type", "application/json")
w := httptest.NewRecorder()
router.ServeHTTP(w, req)
if w.Code != http.StatusOK {
t.Errorf("expected status 200, got %d", w.Code)
}
}
// TestHTTPHandlerInvalidJSON tests invalid JSON request
func TestHTTPHandlerInvalidJSON(t *testing.T) {
gin.SetMode(gin.TestMode)
router := gin.New()
router.POST("/mcp", HTTPHandler())
req := httptest.NewRequest("POST", "/mcp", strings.NewReader("invalid json"))
req.Header.Set("Content-Type", "application/json")
w := httptest.NewRecorder()
router.ServeHTTP(w, req)
if w.Code != http.StatusBadRequest {
t.Errorf("expected status 400, got %d", w.Code)
}
}
// TestStreamableHTTPDELETEHandler tests DELETE response
func TestStreamableHTTPDELETEHandler(t *testing.T) {
gin.SetMode(gin.TestMode)
router := gin.New()
router.DELETE("/api/v1/mcp", StreamableHTTPDELETEHandler())
req := httptest.NewRequest("DELETE", "/api/v1/mcp", nil)
w := httptest.NewRecorder()
router.ServeHTTP(w, req)
if w.Code != http.StatusMethodNotAllowed {
t.Errorf("expected status 405, got %d", w.Code)
}
}
// TestMCPInitialize tests initialize method
func TestMCPInitialize(t *testing.T) {
gin.SetMode(gin.TestMode)
router := gin.New()
router.POST("/mcp", HTTPHandler())
payload := map[string]interface{}{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
}
body, _ := json.Marshal(payload)
req := httptest.NewRequest("POST", "/mcp", bytes.NewReader(body))
req.Header.Set("Content-Type", "application/json")
w := httptest.NewRecorder()
router.ServeHTTP(w, req)
if w.Code != http.StatusOK {
t.Errorf("expected status 200, got %d", w.Code)
}
}