package mcpdocs
import (
"strings"
"testing"
)
const testMCPServerPageHTML = `
GitHub MCP Server | Docker Hub
developer-tools
GitHub MCP Server
Tools
search_reposSearch repositories.
open_prCreate pull requests.
Resources
Prompts
summarize_prSummarize pull requests.
`
func TestParseServerPage(t *testing.T) {
parser := NewParser()
server, err := parser.ParseServerPage(testMCPServerPageHTML, "https://hub.docker.com/mcp/server/github")
if err != nil {
t.Fatalf("ParseServerPage failed: %v", err)
}
if server.Name != "GitHub MCP Server" {
t.Fatalf("unexpected server name: %q", server.Name)
}
if server.Description == "" {
t.Fatal("expected non-empty description")
}
if strings.TrimSpace(server.Category) != "developer-tools" {
t.Fatalf("unexpected category: %q", server.Category)
}
if len(server.Tools) != 2 {
t.Fatalf("expected 2 tools, got %d", len(server.Tools))
}
if len(server.Resources) != 1 {
t.Fatalf("expected 1 resource, got %d", len(server.Resources))
}
if len(server.Prompts) != 1 {
t.Fatalf("expected 1 prompt, got %d", len(server.Prompts))
}
}
func TestParseHubPage(t *testing.T) {
parser := NewParser()
html := `
`
servers, err := parser.ParseHubPage(html)
if err != nil {
t.Fatalf("ParseHubPage failed: %v", err)
}
if len(servers) != 2 {
t.Fatalf("expected 2 servers, got %d", len(servers))
}
if servers[0].DocURL != "https://hub.docker.com/mcp/server/github" {
t.Fatalf("unexpected resolved URL: %q", servers[0].DocURL)
}
}
func TestResolveURL(t *testing.T) {
got := resolveURL("https://hub.docker.com", "/mcp/server/github")
if got != "https://hub.docker.com/mcp/server/github" {
t.Fatalf("resolveURL returned %q", got)
}
}