package traces
import (
"context"
"io"
"net/http"
"net/http/httptest"
"strings"
"testing"
"time"
"last9-mcp/internal/auth"
"last9-mcp/internal/constants"
"last9-mcp/internal/models"
"github.com/modelcontextprotocol/go-sdk/mcp"
)
func TestGetTraceAttributesHandler_InvalidTimeOrder(t *testing.T) {
requestCount := 0
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
requestCount++
w.Header().Set(constants.HeaderContentType, constants.HeaderContentTypeJSON)
_, _ = io.WriteString(w, `{"status":"success","data":[]}`)
}))
defer server.Close()
cfg := models.Config{
APIBaseURL: server.URL,
TokenManager: &auth.TokenManager{
AccessToken: "test-token",
ExpiresAt: time.Now().Add(24 * time.Hour),
},
}
handler := NewGetTraceAttributesHandler(server.Client(), cfg)
_, _, err := handler(context.Background(), &mcp.CallToolRequest{}, GetTraceAttributesArgs{
StartTimeISO: "2026-02-09T16:04:05Z",
EndTimeISO: "2026-02-09T15:04:05Z",
})
if err == nil {
t.Fatalf("expected error for inverted time range, got nil")
}
if !strings.Contains(err.Error(), "start_time_iso must be before or equal to end_time_iso") {
t.Fatalf("expected specific time-order error, got: %v", err)
}
if requestCount != 0 {
t.Fatalf("expected no upstream requests on validation failure, got %d", requestCount)
}
}