./test/functional/resolve_controller_test.rb in umlaut-3.3.1 vs ./test/functional/resolve_controller_test.rb in umlaut-4.0.0.beta1
- old
+ new
@@ -2,32 +2,75 @@
require 'test_helper'
require 'uri'
require 'rack/utils'
+# This test is kind of a mess. Testing the resolve controller is hard, with it's threading and it's
+# standard use of services that make HTTP calls.
+#
+# We are not testing a 'live' request, but instead mocking already returned service responses,
+# and testing with DummyServices. Could be refactored further to have the DummyServices
+# actually returning responses instead of loading them into the DB ourselves.
+#
+# Note on testing the resolve controller: Making a request to ResolveController#index will
+# fire off a background thread (which fires off more bg threads) to dispatch background services.
+#
+# If you don't wait on these, they will be going on in the background of possible subsequent
+# tests, which is messy. And more painfully, they'll wind up making http requests OUTSIDE
+# of the VCR block, since the VCR block ends with the threads still going on their own.
+#
+# So it's important to wait on them before ending the VCR block or otherwise going on.
+# Immediately after doing an HTTP interaction, you can get the bg thread by:
+#
+# bg_thread = @controller.bg_thread
+#
+# (Do this before making another HTTP interaction which will reset @controller).
+# Then you can wait on it by `bg_thread.join`.
class ResolveControllerTest < ActionController::TestCase
extend TestWithCassette
- fixtures :requests, :referents, :referent_values, :dispatched_services, :service_responses
setup do
@controller = ResolveController.new
+
+ # Set it up with a fake Service Collection, so it will go quick and won't
+ # try to contact any external resources. We mock all our service responses
+ # anyhow. Right now we can only use ID's that already exist in the umlaut_services.yml
+ # though.
+ @controller.extend(Module.new do
+ def create_collection
+ services = {
+ "DummyService" => {
+ "type" => "DummyService",
+ "priority" => 'c'
+ }
+ }
+ return Collection.new(@user_request, services)
+ end
+ protected :create_collection
+ end)
+
end
- test_with_cassette("nytimes by issn", :resolve, :match_requests_on => [:method, :uri_without_ctx_tim]) do
- umlaut_request = requests(:nytimes)
+ test("nytimes by issn") do
+ umlaut_request = nytimes_request!
+
get :index, "umlaut.request_id" => umlaut_request.id
+
+ # Wait on all bg services
+ @controller.bg_thread.join
+
assert_response :success
assert_select "title", "Find It | The New York times"
assert_select "h1", "Find It"
# Resource title assertion
assert_select "h2.title", "The New York times"
# Background updater assertions
assert_select ".umlaut-resolve-container > script" do |scripts|
assert_equal 1, scripts.size
# Make sure we have an HtmlUpdater in our script
scripts.each do |script|
- assert_match /var updater = new Umlaut.HtmlUpdater\("http:\/\/test\.host\/", "umlaut\.request_id=#{umlaut_request.id}"\);/, script.to_s
+ assert_match /var updater = new Umlaut.HtmlUpdater\("http:\/\/test\.host\/", "umlaut\.request_id=#{umlaut_request.id}", "en"\);/, script.to_s
end
end
# Citation section assertions
assert_select ".umlaut-main .umlaut-resource-info dl.citation-info" do |dls|
assert_equal 1, dls.size
@@ -75,11 +118,11 @@
end
# Export citation section assertions
assert_select ".umlaut-sidebar .umlaut-section.export_citation" do |sections|
assert_equal 1, sections.size
sections.each do |section|
- assert_select section, ".section_heading h3", { :count => 1, :text => "Export tool" }
+ assert_select section, ".section_heading h3", { :count => 1, :text => ServiceTypeValue.find("export_citation").display_name_pluralize.titlecase }
assert_select section, ".response_list", 1
end
end
# Highlighted link section assertions
assert_select ".umlaut-sidebar .umlaut-section.highlighted_link" do |sections|
@@ -106,11 +149,11 @@
assert_select modal, ".modal-footer", { :count => 1 }
end
end
end
- test_with_cassette("POSTed OpenURL redirects to GET", :resolve, :match_requests_on => [:method, :uri_without_ctx_tim]) do
+ test("POSTed OpenURL redirects to GET") do
# an actual post request Gale GREENr was sending us
pparams = {"genre"=>"article", "sid"=>"gale:GRNR", "__char_set"=>"utf8", "spage"=>"138", "issn"=>"0016-7398", "issue"=>"2", "pid"=>"info:sid/gale:ugnid:balt85423", "date"=>"2010", "aulast"=>"Hedley, Peter J.", "au"=>"Hedley, Peter J.", "atitle"=>"Evolution of the Irrawaddy delta region since 1850.(Report)", "title"=>"The Geographical Journal", "aufirst"=>"Hedley, Peter J.", "volume"=>"176"}
post(:index, pparams)
assert_response :redirect
@@ -123,26 +166,48 @@
# stuff maybe, we don't care.
redirected_params = Rack::Utils.parse_nested_query redirect_uri.query
assert (redirected_params.to_a - pparams.to_a).empty?, "Redirected params include all of original POSTed params"
end
- test_with_cassette("fulltext with edition warning", :resolve, :match_requests_on => [:method, :uri_without_ctx_tim]) do
- umlaut_request = requests(:momo)
+ test("fulltext with edition warning") do
+ umlaut_request = fake_umlaut_request("?aufirst=Michael&aulast=Ende&btitle=Momo&genre=book&isbn=038519093X&pub=Doubleday")
+ umlaut_request.service_responses.build(
+ service_id: "InternetArchive",
+ display_text: "the Internet Archive: Open Source Book",
+ url: "http://archive.org/details/MomoOvveroLarcanaStoria...",
+ service_data: {:match_reliability=>"unsure", :edition_str=>"Momo, ovvero l'arcana storia dei ladri di tempo e della bambina che restituì agli uomini il tempo trafugato"},
+ service_type_value_name: "fulltext"
+ )
+ umlaut_request.save!
+
get(:index, {'umlaut.request_id' => umlaut_request.id})
+
assert_response :success
assert_select 'div#fulltext ul.response_list li.response_item' do |elements|
assert_equal(1, elements.size)
elements.each do |element|
assert_select element, "a", {:count => 1, :href => "", :text => "the Internet Archive: Open Source Book"}
assert_select element, 'div.edition_warning', {:count => 1,
- :text => "Edition information Momo, ovvero l'arcana storia dei ladri di tempo e della bambina che restituì agli uomini il tempo trafugato"}
+ :text => "Edition information Momo, ovvero l'arcana storia dei ladri di tempo e della bambina che restituì agli uomini il tempo trafugato"}
end
end
+
+ # Wait on all bg services
+ @controller.bg_thread.join
end
- test_with_cassette("no holdings", :resolve, :match_requests_on => [:method, :uri_without_ctx_tim]) do
- umlaut_request = requests(:advocate)
+ test("no holdings") do
+ umlaut_request = fake_umlaut_request("/?issn=1832-9373&jtitle=Advocate&rfr_id=info%3Asid%2Fsfxit.com%3Acitation&object_id=2670000000017711")
+ umlaut_request.service_responses.build(
+ service_id: "SFX",
+ display_text: "Gale Cengage Newsstand",
+ url: "http://find.galegroup.com/openurl/openurl?res_id=i...",
+ service_type_value_name: "fulltext",
+ service_data: {:authentication=>"", :source=>"SFX/", :coverage=>"Available from 2009.", :sfx_base_url=>"http://sfx.library.nyu.edu/sfxlcl41", :sfx_obj_index=>1, :sfx_target_index=>1, :sfx_request_id=>"3766609", :sfx_target_service_id=>"1000000000003344", :sfx_target_name=>"GALEGROUP_IT_NEWSSTAND", :citation_volume=>nil, :citation_issue=>nil, :citation_spage=>nil, :debug_info=>" Target: GALEGROUP_IT_NEWSSTAND ; SFX object ID: 2670000000017711"}
+ )
+ umlaut_request.save!
+
get(:index, {'umlaut.request_id' => umlaut_request.id})
assert_response :success
assert_select 'div#fulltext ul.response_list li.response_item' do |elements|
assert_equal(1, elements.size)
elements.each do |element|
@@ -150,20 +215,96 @@
assert_select element, 'div.response_coverage_statement', {:count => 1, :text => "Available from 2009."}
end
end
# Assert no holdings
assert_select 'div#holding div.umlaut-holdings', :count => 0
+
+ # Wait on all bg services
+ @controller.bg_thread.join
end
- test_with_cassette("manually entered", :resolve, :match_requests_on => [:method, :uri_without_ctx_tim]) do
- umlaut_request = requests(:manually_entered)
+ test("manually entered") do
+ umlaut_request = fake_umlaut_request("?genre=article&jtitle=Entry+Manual&rfr_id=info%3Asid%2Fsfxit.com%3Acitation")
+
get(:index, {'umlaut.request_id' => umlaut_request.id})
assert_response :success
- assert_select('.resource_info_sections > div.alert.alert-error',
+ assert_select('.resource_info_sections > div.alert.alert-danger',
{:text => "Warning: Find It does not know about a journal with this name. Please check your entry."}) do |error_divs|
assert_equal 1, error_divs.size, "More than one error div"
error_divs.each do |error_div|
assert_select error_div, 'i.umlaut_icons-famfamfam-error', 1
end
end
+
+ # Wait on all bg services
+ @controller.bg_thread.join
+ end
+
+ def nytimes_request!
+ umlaut_request = fake_umlaut_request("?title=The+New+York+times&issn=0362-4331")
+
+ umlaut_request.service_responses.build(
+ service_id: "SFX",
+ display_text: "EBSCOhost Newspaper Source Plus",
+ url: "http://search.ebscohost.com/login.aspx?direct=true&db=n5h&scope=site&jn=New+York+Times",
+ service_data: {:coverage=>"Available from 1985.", },
+ service_type_value_name: "fulltext"
+ )
+ umlaut_request.service_responses.build(
+ service_id: "DummyService",
+ display_text: "Library holding",
+ url: "http://holding.library.edu/DOCID",
+ notes: "Some notes.",
+ service_data: {:title=>"The New York times", :status=>"Check Availability", :display_type=>"journal", :request_url=>"http://request.library.edu/DOCID", :call_number=>"(Call Number)", :collection=>"Library Holding", :collection_str=>"Library Holding", :coverage_str_array=>["Coverage 1", "Coverage 2"], :match_reliability=>"unsure"},
+ service_type_value_name: "holding"
+ )
+ umlaut_request.service_responses.build(
+ service_id: "SFX",
+ display_text: "EBSCOhost Business Abstracts with Full Text",
+ url: "http://search.ebscohost.com/direct.asp?db=bft&jn=3...",
+ service_data: {:authentication=>"", :source=>"SFX/", :coverage=>"Available from 2011.", :sfx_base_url=>"http://sfx.library.edu/local", :sfx_obj_index=>1, :sfx_target_index=>1, :sfx_request_id=>"2576884", :sfx_target_service_id=>"3450000000000057", :sfx_target_name=>"EBSCOHOST_BUSINESS_ABSTRACTS_FULL_TEXT_WILSON", :citation_volume=>nil, :citation_issue=>nil, :citation_spage=>nil, :debug_info=>" Target: EBSCOHOST_BUSINESS_ABSTRACTS_FULL_TEXT_WILSON ; SFX object ID: 110975413976006"},
+ service_type_value_name: "fulltext"
+ )
+ umlaut_request.service_responses.build(
+ service_id: "EmailExport",
+ display_text: "Email",
+ service_data: {:link_supports_ajax_call=>true},
+ service_type_value_name: "export_citation"
+ )
+ umlaut_request.service_responses.build(
+ service_id: "SFX",
+ display_text: "Ask a Librarian",
+ url: "http://library.edu/ask",
+ service_data: {:display_text=>"Ask a Librarian", :url=>"http://library.edu/ask"},
+ service_type_value_name: "help"
+ )
+ umlaut_request.service_responses.build(
+ service_id: "SFX",
+ display_text: "EBSCOhost Business Abstracts with Full Text",
+ url: "https://ezproxy.library.edu/login?url=http://searc...",
+ service_data: {:authentication=>"", :source=>"SFX/", :coverage=>"Available from 2011.", :sfx_base_url=>"http://sfx.library.edu/local", :sfx_obj_index=>1, :sfx_target_index=>1, :sfx_request_id=>"2567643", :sfx_target_service_id=>"3450000000000057", :sfx_target_name=>"EBSCOHOST_BUSINESS_ABSTRACTS_FULL_TEXT_WILSON", :citation_volume=>nil, :citation_issue=>nil, :citation_spage=>nil, :debug_info=>" Target: EBSCOHOST_BUSINESS_ABSTRACTS_FULL_TEXT_WILSON ; SFX object ID: 110975413976006"},
+ service_type_value_name: "fulltext"
+ )
+ umlaut_request.service_responses.build(
+ service_id: "Ulrichs",
+ display_text: "Periodical information",
+ url: "https://ulrichsweb.serialssolutions.com/api/openur...",
+ service_type_value_name: "highlighted_link"
+ )
+ umlaut_request.service_responses.build(
+ service_id: "Ulrichs",
+ display_text: "Periodical information",
+ url: "https://ulrichsweb.serialssolutions.com/api/openur...",
+ service_type_value_name: "highlighted_link"
+ )
+ umlaut_request.service_responses.build(
+ service_id: "SFX",
+ display_text: "Proquest",
+ url: "http://proquest.umi.com/pqdweb?RQT=318&VName=PQD&c...",
+ service_data: {:display_text=>"Proquest", :url=>"http://proquest.umi.com/pqdweb?RQT=318&VName=PQD&clientid=9269&pmid=7818"},
+ service_type_value_name: "fulltext"
+ )
+ umlaut_request.save!
+
+ return umlaut_request
end
end