RSpec-Solr Matchers for RSpec-Solr::SolrResponseHash
(rspec-solr_resp_hash..should ... or rspec-solr_resp_hash..should_not ...)
MATCHING WHETHER RESPONSE HAS DOCUMENTS OR NOT
NOTE: this is about the TOTAL number of Solr documents that match ("numFound"), NOT solely the documents returned in this response
Matcher
have_documents
Usage
expect(rspec-solr_resp_hash).to have_documents
expect(rspec-solr_resp_hash).not_to have_documents
MATCHING NUMBER OF DOCUMENTS
NOTE: this is about the TOTAL number of Solr documents that match ("numFound"), NOT solely the documents returned in this response
Matchers
have(2).documents
have_exactly(4).documents
have_at_least(3).documents
have_at_most(3).documents
Usage
- rspec-solr_resp_hash.should have(3).documents
- rspec-solr_resp_hash.should_not have(2).documents
- rspec-solr_resp_hash.should have_at_least(3).documents
- rspec-solr_resp_hash.should have_at_most(4).documents
MATCHING SPECIFIC DOCUMENTS IN RESPONSE
NOTE: this is about the Solr documents returned in THIS response
Matcher
include()
Usage
Specifying Single Document
String
- (
"idval"
) NOTE: value of the unique id field (defaults to 'id') in the Solr document To change the id field name, use my_solr_response_hash.id_field='my_id_fldname' ##### Hash - (
"fldname" => "value"
) - (
"fldname" => /regex_to_match_val/
) - (
"fld1" => "val1", "fld2" => /val2_regex/
) NOTE: single Solr document must satisfy all key value pairs - (
"fldname" => ["val1", /val2_regex/, "val3"]
) NOTE: all of the Array values must be present for the fld in a single Solr document should_not for Array implies NONE of the values should be present in a single document
More Ideas (TODO):
include_title("val")
(i.e. include_anyFieldName("val") )
Specifying Multiple Documents
Array
- by id strings: (
["id1", "id2", "id3"]
) - by hashes: (
[{"title" => "green is best"}, {"title" => /blue/}, {"fld" => "val"}]
) NOTE: you cannot do this: ([{"title" => ["Solr doc 1 title", "Solr doc 2 title"]} ]
) to specify multiple documents - by mix of id strings and hashes: (
[{"title" => "green is best"}, "id3", {"author" => "steinbeck"}]
)
Full Examples
expect(rspec-solr_resp_hash).to include("fld1" => "val1")
expect(rspec-solr_resp_hash).to include("fld1" => /regex_for_val/)
expect(rspec-solr_resp_hash).to include("f1" => "v1", "f2" => ["val1", "val2", /regex_for_val/])
expect(rspec-solr_resp_hash).to include("idval")
expect(rspec-solr_resp_hash).to include(["id1", "id2", "id3"])
expect(rspec-solr_resp_hash).to include([{"title" => "title1"}, {"title" => "title2"}])
expect(rspec-solr_resp_hash).to include([{"title" => "title1"}, {"title" => "title2"}, "id8"])
MATCHING SPECIFIC DOCUMENTS OCCURRING IN FIRST N RESULTS
NOTE: this is about the Solr documents returned in THIS response
Matchers
include().as_first
include().as_first.document
include().in_first(n)
include(Array).in_first(n).results
include(Hash).in_each_of_first(n).documents
Note that the following are equivalent:
include().blah.document
include().blah.documents
include().blah.result
include().blah.results
TODO:
include_at_least(3).of_these_documents().in_first(3).results
start_with()
Usage
See above for information on how to specify specific documents
expect(rspec-solr_resp_hash).to include("111").as_first.document
expect(rspec-solr_resp_hash).to include(["111", "222"]).as_first.documents
expect(rspec-solr_resp_hash).to include([{"title" => "title1"}, {"title" => "title2"}]).in_first(3).results
expect(rspec-solr_resp_hash).to include("fld1" => "val1").in_first(3)
expect(rspec-solr_resp_hash).to include("title" => /cooking/).in_first(3).results
MATCHING RELATIVE ORDER OF SPECIFIC DOCUMENTS
NOTE: this is about the Solr documents returned in THIS response
Matcher
include().before()
NOTE: documents are specified the same way inside both sets of parens (see Usage for examples and see above re: specifying documents)
TODO: Potential Syntax:
include().before_first_occurrence_of()
include().within(3).of_document()
expect(subject.document(:title => 'vala')).to come_before(subject.document(:title =>'valb'))
expect(subject).to have_result_field_ordered("title", "vala", "valb")
Usage
expect(rspec-solr_resp_hash).to include("111").before("222")
expect(rspec-solr_resp_hash).to include("fld"=>"val").before("fld"=>["val1", "val2", "val3"])
expect(rspec-solr_resp_hash).to include([{"title" => "title1"}, {"title" => "title2"}]).before("title" => "title3")
COMPARING TOTAL RESULTS OF TWO RESPONSES
NOTE: this is about the TOTAL number of Solr documents that match ("numFound"), NOT solely the documents returned in THESE responses
Matchers
have_more_results_than()
have_fewer_results_than()
have_the_same_number_of_results_as()
have_more_documents_than()
have_fewer_documents_than()
have_the_same_number_of_documents_as()
Usage
expect(rspec-solr_resp_hash1).to have_more_results_than(rspec-solr_resp_hash2)
expect(rspec-solr_resp_hash1).to have_fewer_results_than(rspec-solr_resp_hash2)
expect(rspec-solr_resp_hash1).to have_the_same_number_of_results_as(rspec-solr_resp_hash2)
Alternate (allows more granularity)
expect(rspec-solr_resp_hash1.size).to > rspec-solr_resp_hash2.size
expect(rspec-solr_resp_hash1.size).to >= rspec-solr_resp_hash2.size
expect(rspec-solr_resp_hash1.size).to < rspec-solr_resp_hash2.size
expect(rspec-solr_resp_hash1.size).to <= rspec-solr_resp_hash2.size
expect(rspec-solr_resp_hash1.size).to == rspec-solr_resp_hash2.size
expect(rspec-solr_resp_hash1.size).to be_within(delta).of(rspec-solr_resp_hash2.size)
MATCHING FACET VALUES IN RESPONSE
NOTE: this is about the facet counts returned in THIS response
Matchers
have_facet_field()
have_facet_field().with_value()
Usage
expect(rspec-solr_resp_hash).to have_facet_field("author")
expect(rspec-solr_resp_hash).to have_facet_field("author").with_value("Steinbeck, John")
TODO:
- facets with arrarr and without (Solr option to get better facet formatting)
have_facet_field().with_value().with_count()
- more ideas
facet(:format => "Book")
facets(:format => ["Image", "Map"])
include_facet().before_facet()
include_facets().before_facet()
include_facet().before_facets()
include_facets().before_facets()