bento_search 1.7.0 → 2.0.0.rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +2 -6
  3. data/app/assets/javascripts/bento_search/ajax_load.js +17 -1
  4. data/app/controllers/bento_search/search_controller.rb +2 -2
  5. data/app/models/bento_search/concurrent_searcher.rb +2 -2
  6. data/app/models/bento_search/result_item.rb +5 -2
  7. data/app/views/bento_search/_item_title.html.erb +2 -4
  8. data/lib/bento_search/version.rb +1 -1
  9. data/lib/generators/bento_search/install/ajax_load_js_generator.rb +15 -0
  10. data/test/decorator/standard_decorator_test.rb +30 -30
  11. data/test/dummy/app/assets/config/manifest.js +4 -0
  12. data/test/dummy/config/application.rb +7 -0
  13. data/test/dummy/config/environments/development.rb +2 -0
  14. data/test/dummy/config/environments/production.rb +7 -1
  15. data/test/dummy/config/environments/test.rb +10 -3
  16. data/test/functional/bento_search/search_controller_test.rb +5 -1
  17. data/test/search_engines/google_site_search_test.rb +48 -48
  18. data/test/search_engines/scopus_engine_test.rb +51 -51
  19. data/test/support/atom.xsd.xml +3 -3
  20. data/test/support/xml.xsd +117 -0
  21. data/test/view/atom_results_test.rb +94 -94
  22. metadata +27 -49
  23. data/app/assets/javascripts/bento_search.js +0 -3
  24. data/app/item_decorators/bento_search/ebscohost/conditional_openurl_main_link.rb +0 -36
  25. data/app/item_decorators/bento_search/only_premade_openurl.rb +0 -20
  26. data/app/item_decorators/bento_search/openurl_add_other_link.rb +0 -39
  27. data/app/item_decorators/bento_search/openurl_main_link.rb +0 -34
  28. data/app/models/bento_search/multi_searcher.rb +0 -132
  29. data/test/dummy/config/initializers/secret_token.rb +0 -8
  30. data/test/dummy/db/schema.rb +0 -15
  31. data/test/unit/multi_searcher_test.rb +0 -46
@@ -4,32 +4,32 @@ require 'cgi'
4
4
  require 'uri'
5
5
 
6
6
  # Set shell env SCOPUS_KEY to your api key to test fresh http
7
- # connections, if you can't use the ones cached by VCR.
7
+ # connections, if you can't use the ones cached by VCR.
8
8
 
9
9
  class ScopusEngineTest < ActiveSupport::TestCase
10
10
  extend TestWithCassette
11
-
11
+
12
12
  # Filter API key out of VCR cache for tag :scopus, which we'll use
13
- # in this test.
13
+ # in this test.
14
14
  @@api_key = (ENV["SCOPUS_KEY"] || "DUMMY_API_KEY")
15
15
  VCR.configure do |c|
16
16
  c.filter_sensitive_data("DUMMY_API_KEY", :scopus) { @@api_key }
17
17
  end
18
-
18
+
19
19
  def setup
20
20
  @engine = BentoSearch::ScopusEngine.new(:api_key => @@api_key)
21
21
  end
22
-
23
-
22
+
23
+
24
24
  def test_construct_search_url
25
25
  url = @engine.send(:scopus_url, :query => "one two")
26
-
26
+
27
27
  assert_equal "http://api.elsevier.com/content/search/index:SCOPUS?query=one+two&sort=refeid", url
28
28
  end
29
-
29
+
30
30
  def test_construct_fielded_search_url
31
31
  url = @engine.send(:scopus_url, :query => "one two", :search_field => "AUTH")
32
-
32
+
33
33
  assert_equal "http://api.elsevier.com/content/search/index:SCOPUS?query=AUTH%28one+two%29&sort=refeid", url
34
34
  end
35
35
 
@@ -46,66 +46,66 @@ class ScopusEngineTest < ActiveSupport::TestCase
46
46
  assert_includes query_components, "AUTH(John Smith)"
47
47
  assert_includes query_components, "TITLE(Terrible Diseases)"
48
48
  end
49
-
49
+
50
50
  def test_construct_search_with_per_page
51
51
  url = @engine.send(:scopus_url, :query => "one two", :per_page => 30)
52
-
52
+
53
53
  assert_equal "http://api.elsevier.com/content/search/index:SCOPUS?query=one+two&count=30&sort=refeid", url
54
54
  end
55
-
55
+
56
56
  def test_construct_search_with_sort
57
57
  url = @engine.send(:scopus_url, :query => "one two", :sort => "date_desc")
58
-
58
+
59
59
  assert_equal "http://api.elsevier.com/content/search/index:SCOPUS?query=one+two&sort=-datesort%2C%2Bauth", url
60
-
60
+
61
61
  url = @engine.send(:scopus_url, :query => "one two", :sort => "relevance")
62
-
62
+
63
63
  assert_equal "http://api.elsevier.com/content/search/index:SCOPUS?query=one+two&sort=refeid", url
64
-
64
+
65
65
  end
66
-
66
+
67
67
  def test_construct_default_relevance_sort
68
68
  url_implicit = @engine.send(:scopus_url, :query => "one two")
69
69
  url_explicit = @engine.send(:scopus_url, :query => "one two", :sort => "relevance")
70
-
70
+
71
71
  assert_equal url_explicit, url_implicit
72
72
  end
73
-
74
-
73
+
74
+
75
75
  def test_construct_with_pagination
76
76
  url = @engine.send(:scopus_url, :query => "one two", :start => 20, :per_page => 10)
77
-
77
+
78
78
  query_hash = CGI.parse(URI.parse(url).query)
79
-
79
+
80
80
  assert_equal ["20"], query_hash["start"]
81
- assert_equal ["10"], query_hash["count"]
81
+ assert_equal ["10"], query_hash["count"]
82
82
  end
83
-
84
-
83
+
84
+
85
85
  test_with_cassette("bad api key should return error response", :scopus) do
86
86
  @engine = BentoSearch::ScopusEngine.new(:api_key => "BAD_KEY_ERROR")
87
-
87
+
88
88
  results = @engine.search(:query => "cancer")
89
89
 
90
- assert results.failed?, "response.failed? should be"
90
+ assert results.failed?, "response.failed? should be"
91
91
 
92
92
  assert_present results.error[:error_info]
93
93
  assert_includes results.error[:error_info], "AUTHORIZATION_ERROR"
94
94
  end
95
-
95
+
96
96
  test_with_cassette("simple search", :scopus) do
97
97
  results = @engine.search(:query => "cancer")
98
-
98
+
99
99
  assert_not_nil results.total_items, "total_items not nil"
100
- assert_kind_of Fixnum, results.total_items
101
-
100
+ assert_kind_of 1.class, results.total_items
101
+
102
102
  assert_not_nil results.start, "start not nil"
103
103
  assert_not_nil results.per_page, "per_page not nil"
104
-
104
+
105
105
  assert_equal 10, results.length
106
-
106
+
107
107
  sample_result = results.first
108
-
108
+
109
109
  assert_present sample_result.title
110
110
  assert_present sample_result.link
111
111
  assert_present sample_result.journal_title
@@ -114,37 +114,37 @@ class ScopusEngineTest < ActiveSupport::TestCase
114
114
  assert_present sample_result.volume
115
115
  assert_present sample_result.issue
116
116
  assert_present sample_result.start_page
117
-
118
- assert_present sample_result.authors
119
-
117
+
118
+ assert_present sample_result.authors
119
+
120
120
  assert_present sample_result.format
121
-
121
+
122
122
  assert_present sample_result.unique_id
123
-
123
+
124
124
  end
125
-
125
+
126
126
  test_with_cassette("zero results search", :scopus) do
127
127
  results = @engine.search(:query => "aldfjkadf lakdj zdfzzzz")
128
128
  assert ! results.failed?, "results not marked failed"
129
129
  assert_equal 0, results.size
130
130
  end
131
-
131
+
132
132
  test_with_cassette("escaped chars", :scopus) do
133
133
  results = @engine.search(:query => "monkey:(brain)")
134
-
134
+
135
135
  assert ! results.failed?, "results not marked failed"
136
136
  end
137
-
138
-
139
-
137
+
138
+
139
+
140
140
  test_with_cassette("fielded search", :scopus) do
141
141
  results = @engine.search(:query => "cancer", :semantic_search_field => :title)
142
142
 
143
- assert results.first.title.downcase.include?("cancer"), "Title includes query term"
143
+ assert results.first.title.downcase.include?("cancer"), "Title includes query term"
144
144
  end
145
-
145
+
146
146
  test_with_cassette("multi-field search", :scopus) do
147
- results = @engine.search(:query =>
147
+ results = @engine.search(:query =>
148
148
  { :title => "Protein measurement with the folin phenol reagent",
149
149
  :author => "Lowry",
150
150
  :issn => "0021-9258"
@@ -168,12 +168,12 @@ class ScopusEngineTest < ActiveSupport::TestCase
168
168
  })
169
169
 
170
170
  assert ! results.failed?
171
- assert_equal 1, results.total_items
171
+ assert_equal 1, results.total_items
172
172
 
173
173
  item = results.first
174
174
 
175
175
  assert item.title.start_with?("Architects and planners in the middle of a road war")
176
176
  end
177
-
178
-
177
+
178
+
179
179
  end
@@ -1,5 +1,5 @@
1
1
  <?xml version="1.0" encoding="utf-8" ?>
2
- <xs:schema targetNamespace="http://www.w3.org/2005/Atom" elementFormDefault="qualified"
2
+ <xs:schema targetNamespace="http://www.w3.org/2005/Atom" elementFormDefault="qualified"
3
3
  attributeFormDefault="unqualified"
4
4
  xmlns:atom="http://www.w3.org/2005/Atom" xmlns:xs="http://www.w3.org/2001/XMLSchema">
5
5
  <xs:annotation>
@@ -8,7 +8,7 @@
8
8
  found here http://www.atomenabled.org/developers/syndication/atom-format-spec.php.
9
9
  </xs:documentation>
10
10
  </xs:annotation>
11
- <xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/03/xml.xsd" />
11
+ <xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="./xml.xsd" />
12
12
  <xs:annotation>
13
13
  <xs:documentation>
14
14
  An Atom document may have two root elements, feed and entry, as defined in section 2.
@@ -237,4 +237,4 @@
237
237
  <xs:attribute ref="xml:lang" />
238
238
  <xs:anyAttribute namespace="##other"/>
239
239
  </xs:attributeGroup>
240
- </xs:schema>
240
+ </xs:schema>
@@ -0,0 +1,117 @@
1
+ <?xml version='1.0'?>
2
+ <!DOCTYPE xs:schema PUBLIC "-//W3C//DTD XMLSCHEMA 200102//EN" "XMLSchema.dtd" >
3
+ <xs:schema targetNamespace="http://www.w3.org/XML/1998/namespace" xmlns:xs="http://www.w3.org/2001/XMLSchema" xml:lang="en">
4
+
5
+ <xs:annotation>
6
+ <xs:documentation>
7
+ See http://www.w3.org/XML/1998/namespace.html and
8
+ http://www.w3.org/TR/REC-xml for information about this namespace.
9
+
10
+ This schema document describes the XML namespace, in a form
11
+ suitable for import by other schema documents.
12
+
13
+ Note that local names in this namespace are intended to be defined
14
+ only by the World Wide Web Consortium or its subgroups. The
15
+ following names are currently defined in this namespace and should
16
+ not be used with conflicting semantics by any Working Group,
17
+ specification, or document instance:
18
+
19
+ base (as an attribute name): denotes an attribute whose value
20
+ provides a URI to be used as the base for interpreting any
21
+ relative URIs in the scope of the element on which it
22
+ appears; its value is inherited. This name is reserved
23
+ by virtue of its definition in the XML Base specification.
24
+
25
+ lang (as an attribute name): denotes an attribute whose value
26
+ is a language code for the natural language of the content of
27
+ any element; its value is inherited. This name is reserved
28
+ by virtue of its definition in the XML specification.
29
+
30
+ space (as an attribute name): denotes an attribute whose
31
+ value is a keyword indicating what whitespace processing
32
+ discipline is intended for the content of the element; its
33
+ value is inherited. This name is reserved by virtue of its
34
+ definition in the XML specification.
35
+
36
+ Father (in any context at all): denotes Jon Bosak, the chair of
37
+ the original XML Working Group. This name is reserved by
38
+ the following decision of the W3C XML Plenary and
39
+ XML Coordination groups:
40
+
41
+ In appreciation for his vision, leadership and dedication
42
+ the W3C XML Plenary on this 10th day of February, 2000
43
+ reserves for Jon Bosak in perpetuity the XML name
44
+ xml:Father
45
+ </xs:documentation>
46
+ </xs:annotation>
47
+
48
+ <xs:annotation>
49
+ <xs:documentation>This schema defines attributes and an attribute group
50
+ suitable for use by
51
+ schemas wishing to allow xml:base, xml:lang or xml:space attributes
52
+ on elements they define.
53
+
54
+ To enable this, such a schema must import this schema
55
+ for the XML namespace, e.g. as follows:
56
+ &lt;schema . . .>
57
+ . . .
58
+ &lt;import namespace="http://www.w3.org/XML/1998/namespace"
59
+ schemaLocation="http://www.w3.org/2001/03/xml.xsd"/>
60
+
61
+ Subsequently, qualified reference to any of the attributes
62
+ or the group defined below will have the desired effect, e.g.
63
+
64
+ &lt;type . . .>
65
+ . . .
66
+ &lt;attributeGroup ref="xml:specialAttrs"/>
67
+
68
+ will define a type which will schema-validate an instance
69
+ element with any of those attributes</xs:documentation>
70
+ </xs:annotation>
71
+
72
+ <xs:annotation>
73
+ <xs:documentation>In keeping with the XML Schema WG's standard versioning
74
+ policy, this schema document will persist at
75
+ http://www.w3.org/2001/03/xml.xsd.
76
+ At the date of issue it can also be found at
77
+ http://www.w3.org/2001/xml.xsd.
78
+ The schema document at that URI may however change in the future,
79
+ in order to remain compatible with the latest version of XML Schema
80
+ itself. In other words, if the XML Schema namespace changes, the version
81
+ of this document at
82
+ http://www.w3.org/2001/xml.xsd will change
83
+ accordingly; the version at
84
+ http://www.w3.org/2001/03/xml.xsd will not change.
85
+ </xs:documentation>
86
+ </xs:annotation>
87
+
88
+ <xs:attribute name="lang" type="xs:language">
89
+ <xs:annotation>
90
+ <xs:documentation>In due course, we should install the relevant ISO 2- and 3-letter
91
+ codes as the enumerated possible values . . .</xs:documentation>
92
+ </xs:annotation>
93
+ </xs:attribute>
94
+
95
+ <xs:attribute name="space" default="preserve">
96
+ <xs:simpleType>
97
+ <xs:restriction base="xs:NCName">
98
+ <xs:enumeration value="default"/>
99
+ <xs:enumeration value="preserve"/>
100
+ </xs:restriction>
101
+ </xs:simpleType>
102
+ </xs:attribute>
103
+
104
+ <xs:attribute name="base" type="xs:anyURI">
105
+ <xs:annotation>
106
+ <xs:documentation>See http://www.w3.org/TR/xmlbase/ for
107
+ information about this attribute.</xs:documentation>
108
+ </xs:annotation>
109
+ </xs:attribute>
110
+
111
+ <xs:attributeGroup name="specialAttrs">
112
+ <xs:attribute ref="xml:base"/>
113
+ <xs:attribute ref="xml:lang"/>
114
+ <xs:attribute ref="xml:space"/>
115
+ </xs:attributeGroup>
116
+
117
+ </xs:schema>
@@ -4,7 +4,7 @@ require 'nokogiri'
4
4
 
5
5
  class AtomResultsTest < ActionView::TestCase
6
6
  include ActionView::Helpers::UrlHelper
7
-
7
+
8
8
  @@namespaces = {
9
9
  "atom" => "http://www.w3.org/2005/Atom",
10
10
  "opensearch" => "http://a9.com/-/spec/opensearch/1.1/",
@@ -12,7 +12,7 @@ class AtomResultsTest < ActionView::TestCase
12
12
  "dcterms" => "http://purl.org/dc/terms/",
13
13
  "bibo" => "http://purl.org/ontology/bibo/"
14
14
  }
15
-
15
+
16
16
  # Instead of using assert_select, we do it ourselves with nokogiri
17
17
  # for better namespace control.
18
18
  #
@@ -21,26 +21,26 @@ class AtomResultsTest < ActionView::TestCase
21
21
  # assert matched_node.first["attribute"] == "foo"
22
22
  # end
23
23
  def assert_node(xml, xpath, options = {})
24
- result = xml.xpath(xpath, @@namespaces)
25
-
24
+ result = xml.xpath(xpath, @@namespaces)
25
+
26
26
  assert result.length > 0, "Expected xpath '#{xpath}' to match in #{xml.to_s[0..200]}..."
27
-
27
+
28
28
  if options[:text]
29
29
  assert_equal options[:text], result.text.strip, "Expected #{options[:text]} as content of #{result.to_s[0..200]}"
30
30
  end
31
-
31
+
32
32
  yield result if block_given?
33
33
  end
34
-
34
+
35
35
  def setup
36
36
  @total_items = 1000
37
37
  @start = 6
38
38
  @per_page = 15
39
-
40
-
41
- @engine = BentoSearch::MockEngine.new(:total_items => @total_items)
39
+
40
+
41
+ @engine = BentoSearch::MockEngine.new(:total_items => @total_items)
42
42
  @results = @engine.search("some query", :start => @start, :per_page => @per_page)
43
-
43
+
44
44
  # but fill the first result elements with some non-blank data to test
45
45
  @article = BentoSearch::ResultItem.new(
46
46
  :title => "An Article", #
@@ -66,7 +66,7 @@ class AtomResultsTest < ActionView::TestCase
66
66
  BentoSearch::Link.new(:url => "http://example.org/bare_link"),
67
67
  BentoSearch::Link.new(
68
68
  :url => "http://example.org/label_and_type",
69
- :label => "A link somewhere",
69
+ :label => "A link somewhere",
70
70
  :type => "application/pdf"
71
71
  ),
72
72
  BentoSearch::Link.new(
@@ -93,189 +93,189 @@ class AtomResultsTest < ActionView::TestCase
93
93
  :oclcnum => "12124345",
94
94
  :year => "2004"
95
95
  )
96
-
97
-
98
-
96
+
97
+
98
+
99
99
  @results[0] = @article
100
100
  @results[1] = @article_with_html_abstract
101
101
  @results[3] = @article_with_full_date
102
- @results[4] = @book
102
+ @results[4] = @book
103
103
  end
104
-
104
+
105
105
  def test_smoke_atom_validate
106
106
  # Validate under Atom schema. Should we validate under prism and dc schemas
107
107
  # too? Not sure if it makes sense, or if there's even a relevant schema
108
- # for how we're using em. So of just basic 'smoke' value.
108
+ # for how we're using em. So of just basic 'smoke' value.
109
109
  render :template => "bento_search/atom_results", :locals => {:atom_results => @results}
110
110
  xml_response = Nokogiri::XML( rendered ) { |config| config.strict }
111
-
111
+
112
112
  atom_xsd_filepath = File.expand_path("../../support/atom.xsd.xml", __FILE__)
113
- schema_xml = Nokogiri::XML(File.read(atom_xsd_filepath))
113
+ schema_xml = Nokogiri::XML(File.open(atom_xsd_filepath))
114
114
  # modify to add processContents lax so it'll let us include elements from
115
- # external namespaces.
115
+ # external namespaces.
116
116
  schema_xml.xpath("//xs:any[@namespace='##other']", {"xs" => "http://www.w3.org/2001/XMLSchema"}).each do |node|
117
117
  node["processContents"] = "lax"
118
- end
119
-
118
+ end
119
+
120
120
  schema = Nokogiri::XML::Schema.from_document( schema_xml )
121
-
122
- assert_empty schema.validate(xml_response), "Validates with atom XSD schema"
121
+
122
+ assert_empty schema.validate(xml_response), "Validates with atom XSD schema"
123
123
  end
124
-
125
-
124
+
125
+
126
126
  def test_feed_metadata
127
- render :template => "bento_search/atom_results", :locals => {:atom_results => @results}
128
- xml_response = Nokogiri::XML( rendered )
129
-
130
- assert_node(xml_response, "atom:feed") do |feed|
127
+ render :template => "bento_search/atom_results", :locals => {:atom_results => @results}
128
+ xml_response = Nokogiri::XML( rendered )
129
+
130
+ assert_node(xml_response, "atom:feed") do |feed|
131
131
  assert_node(feed, "atom:title")
132
132
  assert_node(feed, "atom:author")
133
133
  assert_node(feed, "atom:updated")
134
-
134
+
135
135
  assert_node(feed, "opensearch:totalResults", :text => @total_items.to_s)
136
136
  assert_node(feed, "opensearch:startIndex", :text => @start.to_s)
137
137
  assert_node(feed, "opensearch:itemsPerPage", :text => @per_page.to_s)
138
138
  end
139
-
139
+
140
140
  end
141
-
141
+
142
142
  def test_article_entry_example
143
- render :template => "bento_search/atom_results", :locals => {:atom_results => @results}
144
- xml_response = Nokogiri::XML( rendered )
145
-
143
+ render :template => "bento_search/atom_results", :locals => {:atom_results => @results}
144
+ xml_response = Nokogiri::XML( rendered )
145
+
146
146
  assert_node(xml_response, "./atom:feed/atom:entry[1]") do |article|
147
- assert_node(article, "atom:title", :text => @article.title)
147
+ assert_node(article, "atom:title", :text => @article.title)
148
148
  assert_node(article, "prism:coverDate", :text => @article.year)
149
-
149
+
150
150
  assert_node(article, "prism:issn", :text => @article.issn)
151
151
  assert_node(article, "prism:doi", :text => @article.doi)
152
-
152
+
153
153
  assert_node(article, "prism:volume", :text => @article.volume)
154
154
  assert_node(article, "prism:number", :text => @article.issue)
155
-
155
+
156
156
  assert_node(article, "prism:startingPage", :text => @article.start_page)
157
157
  assert_node(article, "prism:endingPage", :text => @article.end_page)
158
-
158
+
159
159
  assert_node(article, "prism:publicationName", :text => @article.source_title)
160
-
160
+
161
161
  abstract = article.at_xpath("atom:summary", @@namespaces)
162
162
  assert_present abstract, "Has an abstract"
163
163
  assert_equal "text", abstract["type"], "Abstract type text"
164
164
  assert_equal @article.abstract, abstract.text
165
-
165
+
166
166
  assert_node(article, "dcterms:language[@vocabulary='http://dbpedia.org/resource/ISO_639-1']", :text => @article.language_iso_639_1)
167
167
  assert_node(article, "dcterms:language[@vocabulary='http://dbpedia.org/resource/ISO_639-3']", :text => @article.language_iso_639_3)
168
- assert_node(article, "dcterms:language[not(@vocabulary)]", :text => @article.language_str)
169
-
168
+ assert_node(article, "dcterms:language[not(@vocabulary)]", :text => @article.language_str)
169
+
170
170
  assert_node(article, "dcterms:type[not(@vocabulary)]", :text => @article.format_str)
171
-
171
+
172
172
  assert_node(article, "dcterms:type[@vocabulary='http://schema.org/']", :text => @article.schema_org_type_url)
173
173
  assert_node(article, "dcterms:type[@vocabulary='http://purl.org/NET/bento_search/ontology']", :text => @article.format)
174
-
175
- # Just make sure right number of author elements, with right structure.
174
+
175
+ # Just make sure right number of author elements, with right structure.
176
176
  assert_node(article, "atom:author/atom:name") do |authors|
177
177
  assert_equal @article.authors.length, authors.length, "right number of author elements"
178
178
  end
179
-
179
+
180
180
  # Links. Main link is just rel=alternate
181
- assert_node(article,
181
+ assert_node(article,
182
182
  "atom:link[@rel='alternate'][@href='#{@article.link}']")
183
-
183
+
184
184
  # other links also there, default rel=related
185
- assert_node(article,
185
+ assert_node(article,
186
186
  "atom:link[@rel='related'][@type='application/pdf'][@title='A link somewhere'][@href='http://example.org/label_and_type']")
187
187
  assert_node(article,
188
- "atom:link[@rel='something'][@href='http://example.org/rel']")
189
- end
190
-
188
+ "atom:link[@rel='something'][@href='http://example.org/rel']")
189
+ end
190
+
191
191
  end
192
-
193
-
192
+
193
+
194
194
  def test_with_unique_id
195
- @results = @engine.search("find")
195
+ @results = @engine.search("find")
196
196
  @results[0] = BentoSearch::ResultItem.new(
197
- :title => "Something",
197
+ :title => "Something",
198
198
  :unique_id => "a000:/01",
199
199
  :engine_id => "some_engine"
200
200
  )
201
-
202
- render :template => "bento_search/atom_results", :locals => {:atom_results => @results}
201
+
202
+ render :template => "bento_search/atom_results", :locals => {:atom_results => @results}
203
203
  xml_response = Nokogiri::XML( rendered )
204
-
204
+
205
205
  with_unique_id = xml_response.xpath("./atom:feed/atom:entry", @@namespaces)[0]
206
-
206
+
207
207
  assert_node(with_unique_id, "atom:id") do |id|
208
208
  # based off of engine_id and unique_id
209
209
  assert_includes id.text, "some_engine"
210
210
  assert_includes id.text, "a000%3A%2F01"
211
- end
211
+ end
212
212
  end
213
-
213
+
214
214
  def test_with_html_abstract
215
- render :template => "bento_search/atom_results", :locals => {:atom_results => @results}
215
+ render :template => "bento_search/atom_results", :locals => {:atom_results => @results}
216
216
  xml_response = Nokogiri::XML( rendered )
217
-
217
+
218
218
  with_html_abstract = xml_response.xpath("./atom:feed/atom:entry", @@namespaces)[1]
219
-
220
- assert_node(with_html_abstract, "atom:summary[@type='html']", :text => @article_with_html_abstract.abstract.to_s)
219
+
220
+ assert_node(with_html_abstract, "atom:summary[@type='html']", :text => @article_with_html_abstract.abstract.to_s)
221
221
  end
222
-
222
+
223
223
  def test_book
224
- render :template => "bento_search/atom_results", :locals => {:atom_results => @results}
224
+ render :template => "bento_search/atom_results", :locals => {:atom_results => @results}
225
225
  xml_response = Nokogiri::XML( rendered )
226
-
226
+
227
227
  book = xml_response.xpath("./atom:feed/atom:entry", @@namespaces)[4]
228
-
228
+
229
229
  assert_node(book, "dcterms:type[@vocabulary='http://purl.org/NET/bento_search/ontology']", :text => "Book")
230
230
  assert_node(book, "dcterms:type[@vocabulary='http://schema.org/']", :text => "http://schema.org/Book")
231
-
231
+
232
232
  assert_node(book, "dcterms:publisher", :text => @book.publisher)
233
-
233
+
234
234
  assert_node(book, "prism:isbn", :text => @book.isbn)
235
-
235
+
236
236
  assert_node(book, "bibo:oclcnum", :text => @book.oclcnum)
237
237
  end
238
-
238
+
239
239
  def test_with_full_date
240
- render :template => "bento_search/atom_results", :locals => {:atom_results => @results}
240
+ render :template => "bento_search/atom_results", :locals => {:atom_results => @results}
241
241
  xml_response = Nokogiri::XML( rendered )
242
-
242
+
243
243
  with_full_date = xml_response.at_xpath("./atom:feed/atom:entry[4]", @@namespaces)
244
-
245
- assert_node(with_full_date, "prism:coverDate", :text => "2011-05-06")
244
+
245
+ assert_node(with_full_date, "prism:coverDate", :text => "2011-05-06")
246
246
  end
247
247
 
248
248
  def test_nil_results
249
249
  # should render a more or less empty atom response for
250
250
  # nil results, convenient to not raise on nil
251
- render :template => "bento_search/atom_results", :locals => {:atom_results => nil}
251
+ render :template => "bento_search/atom_results", :locals => {:atom_results => nil}
252
252
  end
253
-
253
+
254
254
  def test_locals_for_feed_name_and_author
255
- render( :template => "bento_search/atom_results",
256
- :locals => {:atom_results => @results,
255
+ render( :template => "bento_search/atom_results",
256
+ :locals => {:atom_results => @results,
257
257
  :feed_name => "My Feed",
258
258
  :feed_author_name => "ACME Seed And Feed Products"}
259
259
  )
260
-
260
+
261
261
  xml_response = Nokogiri::XML( rendered )
262
-
262
+
263
263
  assert_node(xml_response, "./atom:feed/atom:title", :text => "My Feed")
264
264
  assert_node(xml_response, "./atom:feed/atom:author/atom:name", :text => "ACME Seed And Feed Products")
265
265
  end
266
-
266
+
267
267
  def test_html_in_title_stripped
268
268
  results = BentoSearch::Results.new
269
269
  results << BentoSearch::ResultItem.new(
270
270
  :title => "html <b>title</b>".html_safe
271
271
  )
272
-
272
+
273
273
  render(:template => "bento_search/atom_results", :locals => {:atom_results => results})
274
274
  xml_response = Nokogiri::XML( rendered )
275
-
275
+
276
276
  assert_node(xml_response, "./atom:feed/atom:entry[1]/atom:title", :text => "html title")
277
-
277
+
278
278
  end
279
-
280
-
279
+
280
+
281
281
  end