Skip to content

Commit

Permalink
Merge pull request #18 from theodi/cherry_pick_search_endpoint
Browse files Browse the repository at this point in the history
Add new unified search endpoint for rummager
  • Loading branch information
pezholio committed Apr 25, 2014
2 parents 1c11cf0 + e36d466 commit fe9a473
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 0 deletions.
5 changes: 5 additions & 0 deletions lib/gds_api/rummager.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,11 @@ def search(query, extra_params={})
get_json!(search_url(:search, query, extra_params))
end

def unified_search(args)
request_url = "#{base_url}/unified_search.json?#{Rack::Utils.build_nested_query(args)}"
get_json!(request_url)
end

def advanced_search(args)
raise ArgumentError.new("Args cannot be blank") if args.nil? || args.empty?
request_path = "#{base_url}/advanced_search?#{Rack::Utils.build_nested_query(args)}"
Expand Down
59 changes: 59 additions & 0 deletions test/rummager_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
before(:each) do
stub_request(:get, /example.com\/search/).to_return(body: "[]")
stub_request(:get, /example.com\/advanced_search/).to_return(body: "[]")
stub_request(:get, /example.com\/unified_search/).to_return(body: "[]")
end

it "should raise an exception if the service at the search URI returns a 500" do
Expand Down Expand Up @@ -140,4 +141,62 @@
assert_requested :get, /order%5Bpublic_timestamp%5D=desc/
end

# tests for unified search

it "#unified_search should raise an exception if the service at the search URI returns a 500" do
stub_request(:get, /example.com\/unified_search.json/).to_return(status: [500, "Internal Server Error"])
assert_raises(GdsApi::HTTPErrorResponse) do
GdsApi::Rummager.new("http://example.com").unified_search(q: "query")
end
end

it "#unified_search should raise an exception if the service at the search URI returns a 404" do
stub_request(:get, /example.com\/unified_search/).to_return(status: [404, "Not Found"])
assert_raises(GdsApi::HTTPNotFound) do
GdsApi::Rummager.new("http://example.com").unified_search(q: "query")
end
end

it "#unified_search should raise an exception if the service at the unified search URI returns a 400" do
stub_request(:get, /example.com\/unified_search/).to_return(
status: [400, "Bad Request"],
body: %q("error":"Filtering by \"coffee\" is not allowed"),
)
assert_raises(GdsApi::HTTPErrorResponse) do
GdsApi::Rummager.new("http://example.com").unified_search(q: "query", filter_coffee: "tea")
end
end

it "#unified_search should raise an exception if the service at the search URI times out" do
stub_request(:get, /example.com\/unified_search/).to_timeout
assert_raises(GdsApi::TimedOutException) do
GdsApi::Rummager.new("http://example.com").unified_search(q: "query")
end
end

it "#unified_search should return the search deserialized from json" do
search_results = [{"title" => "document-title"}]
stub_request(:get, /example.com\/unified_search/).to_return(body: search_results.to_json)
results = GdsApi::Rummager.new("http://example.com").unified_search(q: "query")
assert_equal search_results, results.to_hash
end

it "#unified_search should request the search results in JSON format" do
GdsApi::Rummager.new("http://example.com").unified_search(q: "query")

assert_requested :get, /.*/, headers: {"Accept" => "application/json"}
end

it "#unified_search should issue a request for all the params supplied" do
GdsApi::Rummager.new("http://example.com").unified_search(
q: "query & stuff",
filter_topics: ["1", "2"],
order: "-public_timestamp",
)

assert_requested :get, /q=query%20%26%20stuff/
assert_requested :get, /filter_topics%5B0%5D=1&filter_topics%5B1%5D=2/
assert_requested :get, /order=-public_timestamp/
end

end

0 comments on commit fe9a473

Please sign in to comment.