Skip to main content
Glama
hex_search_integration_test.exs2.88 kB
defmodule HexdocsMcp.Integration.HexSearchTest do use ExUnit.Case, async: true alias HexdocsMcp.HexSearch @moduletag :integration describe "search_packages/2 - real API" do test "searches all packages when no package specified" do {:ok, results} = HexSearch.search_packages("json", limit: 5) assert is_list(results) assert length(results) <= 5 Enum.each(results, fn result -> assert Map.has_key?(result, :name) assert Map.has_key?(result, :description) assert Map.has_key?(result, :downloads) assert Map.has_key?(result, :latest_version) assert Map.has_key?(result, :html_url) end) end test "searches within package versions when package specified" do {:ok, results} = HexSearch.search_packages("1.7", package: "phoenix", limit: 5) assert is_list(results) Enum.each(results, fn result -> assert Map.has_key?(result, :name) assert result.name == "phoenix" assert Map.has_key?(result, :version) assert Map.has_key?(result, :has_docs) assert Map.has_key?(result, :inserted_at) end) end test "gets specific version info when package and version specified" do {:ok, results} = HexSearch.search_packages("info", package: "phoenix", version: "1.7.0") assert is_list(results) assert length(results) == 1 [result] = results assert result.name == "phoenix" assert result.version == "1.7.0" assert Map.has_key?(result, :has_docs) assert Map.has_key?(result, :package_url) end test "respects sort option" do {:ok, results_downloads} = HexSearch.search_packages("test", sort: "downloads", limit: 5) {:ok, results_name} = HexSearch.search_packages("test", sort: "name", limit: 5) # Results should be different when sorted differently assert is_list(results_downloads) assert is_list(results_name) # First result might be different if length(results_downloads) > 0 and length(results_name) > 0 do # They might have different first results due to different sorting assert Map.has_key?(hd(results_downloads), :name) assert Map.has_key?(hd(results_name), :name) end end test "handles package not found error" do {:error, error_msg} = HexSearch.search_packages("test", package: "nonexistent_package_xyz_123") assert is_binary(error_msg) assert error_msg =~ "not found" or error_msg =~ "404" end test "handles API errors gracefully" do # Test with invalid parameters that might cause API errors result = HexSearch.search_packages("", limit: -1) # Should either return empty results or an error case result do {:ok, results} -> assert is_list(results) {:error, msg} -> assert is_binary(msg) end end end end

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/bradleygolden/hexdocs-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server