package mcpdocs import ( "strings" "testing" ) const testMCPServerPageHTML = ` GitHub MCP Server | Docker Hub developer-tools

GitHub MCP Server

Tools

Resources

Prompts

` 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 := `

GitHub MCP Server

MCP server for GitHub automation.

Slack MCP Server

MCP server for Slack workflows.

` 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) } }