exlibris-primo 0.1.1 → 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +5 -2
- data/Rakefile +1 -5
- data/lib/exlibris/primo/eshelf.rb +4 -3
- data/lib/exlibris/primo/holding.rb +2 -10
- data/lib/exlibris/primo/record.rb +11 -6
- data/lib/exlibris/primo/searcher.rb +2 -4
- data/lib/exlibris/primo/version.rb +2 -2
- data/test/exlibris-primo_test.rb +3 -3
- data/test/test_helper.rb +33 -7
- data/test/unit/eshelf_test.rb +106 -87
- data/test/unit/record_test.rb +64 -45
- data/test/unit/searcher_benchmarks.rb +20 -28
- data/test/unit/searcher_test.rb +298 -273
- data/test/unit/web_service_benchmarks.rb +19 -21
- data/test/unit/web_service_test.rb +130 -102
- data/test/vcr_cassettes/eshelf_add_invalid_records.yml +107 -0
- data/test/vcr_cassettes/eshelf_add_same_record_twice.yml +159 -0
- data/test/vcr_cassettes/eshelf_add_to_empty_basket.yml +107 -0
- data/test/vcr_cassettes/eshelf_add_to_invalid_basket.yml +55 -0
- data/test/vcr_cassettes/eshelf_invalid_eshelf.yml +55 -0
- data/test/vcr_cassettes/eshelf_invalid_institution.yml +55 -0
- data/test/vcr_cassettes/eshelf_valid_eshelf.yml +2553 -0
- data/test/vcr_cassettes/eshelf_valid_eshelf_structure.yml +47 -0
- data/test/vcr_cassettes/record.yml +212 -0
- data/test/vcr_cassettes/record_invalid_record.yml +55 -0
- data/test/vcr_cassettes/record_sub_record.yml +212 -0
- data/test/vcr_cassettes/record_valid_record.yml +212 -0
- data/test/vcr_cassettes/searcher_base_holdings_by_id.yml +212 -0
- data/test/vcr_cassettes/searcher_dedupmrg_by_id.yml +347 -0
- data/test/vcr_cassettes/searcher_diacritics1_by_id.yml +207 -0
- data/test/vcr_cassettes/searcher_diacritics2_by_id.yml +232 -0
- data/test/vcr_cassettes/searcher_holdings_by_id.yml +212 -0
- data/test/vcr_cassettes/searcher_invalid_id.yml +55 -0
- data/test/vcr_cassettes/searcher_rsrcs_by_id.yml +270 -0
- data/test/vcr_cassettes/searcher_search_by_isbn.yml +278 -0
- data/test/vcr_cassettes/searcher_search_by_issn.yml +297 -0
- data/test/vcr_cassettes/searcher_search_by_title_author_genre.yml +671 -0
- data/test/vcr_cassettes/searcher_test_bug_1361.yml +224 -0
- data/test/vcr_cassettes/searcher_test_problem_by_id.yml +194 -0
- data/test/vcr_cassettes/searcher_tocs_by_id.yml +217 -0
- data/test/vcr_cassettes/web_service_author_search.yml +1269 -0
- data/test/vcr_cassettes/web_service_bogus_200.yml +392 -0
- data/test/vcr_cassettes/web_service_brief_search.yml +299 -0
- data/test/vcr_cassettes/web_service_get_eshelf.yml +11823 -0
- data/test/vcr_cassettes/web_service_get_eshelf_structure_search.yml +47 -0
- data/test/vcr_cassettes/web_service_invalid_document.yml +54 -0
- data/test/vcr_cassettes/web_service_isbn_search.yml +299 -0
- data/test/vcr_cassettes/web_service_issn_search.yml +293 -0
- data/test/vcr_cassettes/web_service_problem_document.yml +193 -0
- data/test/vcr_cassettes/web_service_single_document.yml +233 -0
- data/test/vcr_cassettes/web_service_title_author_genre_search.yml +719 -0
- data/test/vcr_cassettes/web_service_title_search.yml +1035 -0
- metadata +147 -77
- data/lib/tasks/exlibris-primo_tasks.rake +0 -4
- data/test/dummy/README.rdoc +0 -261
- data/test/dummy/Rakefile +0 -7
- data/test/dummy/app/assets/javascripts/application.js +0 -15
- data/test/dummy/app/assets/stylesheets/application.css +0 -13
- data/test/dummy/app/controllers/application_controller.rb +0 -3
- data/test/dummy/app/helpers/application_helper.rb +0 -2
- data/test/dummy/app/views/layouts/application.html.erb +0 -14
- data/test/dummy/config.ru +0 -4
- data/test/dummy/config/application.rb +0 -56
- data/test/dummy/config/boot.rb +0 -10
- data/test/dummy/config/database.yml +0 -25
- data/test/dummy/config/environment.rb +0 -5
- data/test/dummy/config/environments/development.rb +0 -37
- data/test/dummy/config/environments/production.rb +0 -67
- data/test/dummy/config/environments/test.rb +0 -37
- data/test/dummy/config/initializers/backtrace_silencers.rb +0 -7
- data/test/dummy/config/initializers/inflections.rb +0 -15
- data/test/dummy/config/initializers/mime_types.rb +0 -5
- data/test/dummy/config/initializers/secret_token.rb +0 -7
- data/test/dummy/config/initializers/session_store.rb +0 -8
- data/test/dummy/config/initializers/wrap_parameters.rb +0 -14
- data/test/dummy/config/locales/en.yml +0 -5
- data/test/dummy/config/routes.rb +0 -58
- data/test/dummy/db/README +0 -0
- data/test/dummy/db/test.sqlite3 +0 -0
- data/test/dummy/log/test.log +0 -1704
- data/test/dummy/public/404.html +0 -26
- data/test/dummy/public/422.html +0 -26
- data/test/dummy/public/500.html +0 -25
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/script/rails +0 -6
data/README.rdoc
CHANGED
@@ -1,4 +1,7 @@
|
|
1
1
|
= Exlibris::Primo
|
2
|
+
{<img src="https://secure.travis-ci.org/scotdalton/exlibris-primo.png" alt="Build Status" />}[https://secure.travis-ci.org/scotdalton/exlibris-primo]
|
3
|
+
{<img src="https://gemnasium.com/scotdalton/exlibris-primo.png" alt="Dependency Status" />}[https://gemnasium.com/scotdalton/exlibris-primo]
|
4
|
+
{<img src="https://codeclimate.com/badge.png" />}[https://codeclimate.com/github/scotdalton/exlibris-primo]
|
2
5
|
|
3
6
|
Exlibris::Primo offers a set of libraries for interacting with the ExLibris Primo APIs.
|
4
7
|
|
@@ -38,7 +41,7 @@ as instance variables.
|
|
38
41
|
=== Example of Exlibris::Primo::Record in action
|
39
42
|
setup = {
|
40
43
|
:base_url => "http://primo.institution.edu",
|
41
|
-
:resolver_base_url => "http://
|
44
|
+
:resolver_base_url => "http://resolver.institution.edu",
|
42
45
|
:vid => "VID",
|
43
46
|
:institution => "DEFAULT",
|
44
47
|
:record_id => "PrimoRecordId"
|
@@ -55,7 +58,7 @@ The Exlibris::Primo::EShelf class provides methods for reading a given user's Pr
|
|
55
58
|
setup = {
|
56
59
|
:base_url => "http://primo.institution.edu",
|
57
60
|
:vid => "VID",
|
58
|
-
:resolver_base_url => "http://
|
61
|
+
:resolver_base_url => "http://resolver.institution.edu"
|
59
62
|
}
|
60
63
|
eshelf = Exlibris::Primo::EShelf.new(setup, "USER_ID", "PRIMO")
|
61
64
|
records = eshelf.records
|
data/Rakefile
CHANGED
@@ -20,9 +20,6 @@ RDoc::Task.new(:rdoc) do |rdoc|
|
|
20
20
|
rdoc.rdoc_files.include('lib/**/*.rb')
|
21
21
|
end
|
22
22
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
23
|
Bundler::GemHelper.install_tasks
|
27
24
|
|
28
25
|
require 'rake/testtask'
|
@@ -34,5 +31,4 @@ Rake::TestTask.new(:test) do |t|
|
|
34
31
|
t.verbose = false
|
35
32
|
end
|
36
33
|
|
37
|
-
|
38
|
-
task :default => :test
|
34
|
+
task :default => :test
|
@@ -8,13 +8,14 @@ module Exlibris
|
|
8
8
|
# :base_url, :resolver_base_url, :vid, :config
|
9
9
|
#
|
10
10
|
# == Examples of usage
|
11
|
-
# Exlibris::Primo::EShelf.new({ :base_url => "http://primo.institution.edu", :vid => "VID", :resolver_base_url => "http://
|
11
|
+
# Exlibris::Primo::EShelf.new({ :base_url => "http://primo.institution.edu", :vid => "VID", :resolver_base_url => "http://resolver.institution.edu"} , "USER_ID", "PRIMO").count
|
12
12
|
# Exlibris::Primo::EShelf.new(@eshelf_setup, @valid_user_id, @valid_institute).basket_id
|
13
13
|
class EShelf
|
14
14
|
|
15
15
|
#Namespaces
|
16
16
|
SEAR_NS = {'sear' => 'http://www.exlibrisgroup.com/xsd/jaguar/search'}
|
17
17
|
PRIM_NS = {'prim' => 'http://www.exlibris.com/primo/xsd/primoeshelffolder'}
|
18
|
+
PRIM_BIB_NS = {'bib' => 'http://www.exlibrisgroup.com/xsd/primo/primo_nm_bib'}
|
18
19
|
|
19
20
|
def initialize(setup, user_id, institution)
|
20
21
|
@base_url = setup[:base_url]
|
@@ -49,7 +50,7 @@ module Exlibris
|
|
49
50
|
# Fetch all records from user's Eshelf as an array of Primo Record objects
|
50
51
|
def records
|
51
52
|
eshelf.search("//sear:DOC", SEAR_NS).each { |doc|
|
52
|
-
@records.push(Record.new({ :base_url => @base_url, :resolver_base_url => @resolver_base_url, :vid => @vid, :record => doc.at("//
|
53
|
+
@records.push(Record.new({ :base_url => @base_url, :resolver_base_url => @resolver_base_url, :vid => @vid, :record => doc.at("//bib:record", PRIM_BIB_NS), :institution => @institution }))
|
53
54
|
} if @records.empty?
|
54
55
|
return @records
|
55
56
|
end
|
@@ -77,4 +78,4 @@ module Exlibris
|
|
77
78
|
end
|
78
79
|
end
|
79
80
|
end
|
80
|
-
end
|
81
|
+
end
|
@@ -143,16 +143,8 @@ module Exlibris
|
|
143
143
|
# Return this holding as a new holdings subclass instance based on source
|
144
144
|
def to_source
|
145
145
|
return self if @source_class.nil?
|
146
|
-
|
147
|
-
|
148
|
-
return Exlibris::Primo::Source.const_get(@source_class).new(:holding => self)
|
149
|
-
rescue Exception => e
|
150
|
-
Rails.logger.error("#{e.message}")
|
151
|
-
Rails.logger.error("Class #{@source_class} can't be found in Exlibris::Primo::Source.
|
152
|
-
Please check primo.yml to ensure the class_name is defined correctly.
|
153
|
-
Not converting to source.")
|
154
|
-
return self
|
155
|
-
end
|
146
|
+
# Get source class in Primo::Source module
|
147
|
+
return Exlibris::Primo::Source.const_get(@source_class).new(:holding => self)
|
156
148
|
end
|
157
149
|
|
158
150
|
# Convenience method for making base attributes accessible via Hash-like syntax.
|
@@ -23,7 +23,10 @@ module Exlibris
|
|
23
23
|
# == Examples of usage
|
24
24
|
# Record.new({ :base_url => @base_url, :vid => @vid, :record => doc.at("//record") })
|
25
25
|
class Record
|
26
|
-
|
26
|
+
# Leverage ActiveSupport's Hash#from_xml method to transform PNX to JSON.
|
27
|
+
require 'active_support/core_ext'
|
28
|
+
require 'json'
|
29
|
+
|
27
30
|
SEAR_NS = {'sear' => 'http://www.exlibrisgroup.com/xsd/jaguar/search'}
|
28
31
|
attr_reader :record_id, :type, :title, :url, :openurl, :creator, :raw_xml
|
29
32
|
|
@@ -65,13 +68,15 @@ module Exlibris
|
|
65
68
|
}
|
66
69
|
end
|
67
70
|
|
71
|
+
# Return a JSON representation of the PNX record
|
72
|
+
def to_json
|
73
|
+
# Leverage ActiveSupport's Hash#from_xml method to transform PNX to JSON.
|
74
|
+
Hash.from_xml(raw_xml).to_json
|
75
|
+
end
|
76
|
+
|
68
77
|
# Method for cleaning up raw xml from record
|
69
78
|
def raw(record)
|
70
|
-
|
71
|
-
# Hack to strip out spacing in record
|
72
|
-
record.children.each{|child| raw << child.to_xml.gsub(/\n\s*/, "").gsub(/\s$/, "")}
|
73
|
-
raw << "</record>"
|
74
|
-
return raw
|
79
|
+
record.to_xml(:indent => 0, :encoding => 'UTF-8')
|
75
80
|
end
|
76
81
|
|
77
82
|
private
|
@@ -8,7 +8,7 @@ module Exlibris
|
|
8
8
|
# * We have either an isbn OR an issn
|
9
9
|
# * We have a title AND an author AND a genre
|
10
10
|
# If none of these criteria are met, Exlibris::Primo::Searcher.search
|
11
|
-
# will
|
11
|
+
# will not perform the search.
|
12
12
|
# Exlibris::Primo::Searcher will populate the following instance variables
|
13
13
|
# accessible through readers:
|
14
14
|
# :count, :holdings, :rsrcs, :tocs, :related_links
|
@@ -59,9 +59,7 @@ module Exlibris
|
|
59
59
|
# Process URLs based on links/linktorsrc
|
60
60
|
# Process TOCs based on links/linktotoc
|
61
61
|
def search
|
62
|
-
|
63
|
-
"Please refer to #{self.class}'s documentation to determine how to structure "+
|
64
|
-
"a sufficient query.") and return if insufficient_query?
|
62
|
+
return if insufficient_query?
|
65
63
|
# Call Primo Web Services
|
66
64
|
unless @primo_id.nil? or @primo_id.empty?
|
67
65
|
get_record = Exlibris::Primo::WebService::GetRecord.new(@primo_id, @base_url, {:institution => @institution})
|
data/test/exlibris-primo_test.rb
CHANGED
data/test/test_helper.rb
CHANGED
@@ -1,10 +1,36 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
require 'test/unit'
|
2
|
+
require File.expand_path("../../lib/exlibris-primo.rb", __FILE__)
|
3
3
|
|
4
|
-
|
5
|
-
|
4
|
+
# VCR is used to 'record' HTTP interactions with
|
5
|
+
# third party services used in tests, and play em
|
6
|
+
# back. Useful for efficiency, also useful for
|
7
|
+
# testing code against API's that not everyone
|
8
|
+
# has access to -- the responses can be cached
|
9
|
+
# and re-used.
|
10
|
+
require 'vcr'
|
11
|
+
require 'webmock'
|
6
12
|
|
7
|
-
|
13
|
+
# To allow us to do real HTTP requests in a VCR.turned_off, we
|
14
|
+
# have to tell webmock to let us.
|
15
|
+
WebMock.allow_net_connect!(:net_http_connect_on_start => true)
|
16
|
+
|
17
|
+
without_ctx_tim = VCR.request_matchers.uri_without_param(:ctx_tim)
|
18
|
+
VCR.configure do |c|
|
19
|
+
c.cassette_library_dir = 'test/vcr_cassettes'
|
20
|
+
# webmock needed for HTTPClient testing
|
21
|
+
c.hook_into :webmock
|
22
|
+
c.register_request_matcher(:uri_without_ctx_tim, &without_ctx_tim)
|
23
|
+
# c.debug_logger = $stderr
|
24
|
+
end
|
25
|
+
|
26
|
+
# Silly way to not have to rewrite all our tests if we
|
27
|
+
# temporarily disable VCR, make VCR.use_cassette a no-op
|
28
|
+
# instead of no-such-method.
|
29
|
+
if ! defined? VCR
|
30
|
+
module VCR
|
31
|
+
def self.use_cassette(*args)
|
32
|
+
yield
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
8
36
|
|
9
|
-
# Load support files
|
10
|
-
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
|
data/test/unit/eshelf_test.rb
CHANGED
@@ -1,152 +1,171 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
|
-
class EShelfTest <
|
3
|
+
class EShelfTest < Test::Unit::TestCase
|
4
4
|
PNX_NS = {'pnx' => 'http://www.exlibrisgroup.com/xsd/primo/primo_nm_bib'}
|
5
5
|
SEARCH_NS = {'search' => 'http://www.exlibrisgroup.com/xsd/jaguar/search'}
|
6
6
|
SEAR_NS = {'sear' => 'http://www.exlibrisgroup.com/xsd/jaguar/search'}
|
7
7
|
PRIM_NS = {'prim' => 'http://www.exlibris.com/primo/xsd/primoeshelffolder'}
|
8
8
|
|
9
9
|
def setup
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
@valid_basket = "298560007"
|
45
|
-
#@valid_folder = "344619707"
|
46
|
-
@invalid_basket = "INVALID_BASKET"
|
10
|
+
@primo_definition = YAML.load( %{
|
11
|
+
type: PrimoService
|
12
|
+
priority: 2 # After SFX, to get SFX metadata enhancement
|
13
|
+
status: active
|
14
|
+
base_url: http://bobcat.library.nyu.edu
|
15
|
+
resolver_base_url: https://getit.library.nyu.edu/resolve
|
16
|
+
vid: NYU
|
17
|
+
institution: NYU
|
18
|
+
holding_search_institution: NYU
|
19
|
+
holding_search_text: Search for this title in BobCat.
|
20
|
+
suppress_holdings: [ !ruby/regexp '/\$\$LBWEB/', !ruby/regexp '/\$\$LNWEB/', !ruby/regexp '/\$\$LTWEB/', !ruby/regexp '/\$\$LWEB/', !ruby/regexp '/\$\$1Restricted Internet Resources/' ]
|
21
|
+
ez_proxy: !ruby/regexp '/https\:\/\/ezproxy\.library\.nyu\.edu\/login\?url=/'
|
22
|
+
service_types:
|
23
|
+
- primo_source
|
24
|
+
- holding_search
|
25
|
+
- fulltext
|
26
|
+
- table_of_contents
|
27
|
+
- referent_enhance
|
28
|
+
- cover_image })
|
29
|
+
@base_url = @primo_definition["base_url"]
|
30
|
+
@vid = @primo_definition["vid"]
|
31
|
+
@valid_user_id = "N18158418"
|
32
|
+
@invalid_user_id = "INVALID_USER"
|
33
|
+
@eshelf_setup = {
|
34
|
+
:base_url => @base_url,
|
35
|
+
:vid => @vid,
|
36
|
+
:resolver_base_url => @primo_definition["resolver_base_url"] }
|
37
|
+
@valid_institute = "NYU"
|
38
|
+
@invalid_institute = "INVALID_INST"
|
39
|
+
@valid_doc_ids = ["nyu_aleph000062856"]
|
40
|
+
@invalid_doc_ids = ["INVALID_DOC_ID"]
|
41
|
+
@valid_basket = "298560007"
|
42
|
+
#@valid_folder = "344619707"
|
43
|
+
@invalid_basket = "INVALID_BASKET"
|
47
44
|
end
|
48
45
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
assert_raise(ArgumentError){Exlibris::Primo::EShelf.new(@eshelf_setup, nil, nil)}
|
63
|
-
assert_raise(ArgumentError){Exlibris::Primo::EShelf.new(@eshelf_setup, nil, nil)}
|
64
|
-
assert_raise(ArgumentError){Exlibris::Primo::EShelf.new(@eshelf_setup, @valid_user_id, nil)}
|
65
|
-
|
46
|
+
def test_new
|
47
|
+
eshelf = Exlibris::Primo::EShelf.new(@eshelf_setup, @valid_user_id, @valid_institute)
|
48
|
+
assert_not_nil(eshelf, "#{eshelf.class} returned nil when instantiated.")
|
49
|
+
assert_equal(@base_url, eshelf.instance_variable_get(:@base_url))
|
50
|
+
assert_equal(@vid, eshelf.instance_variable_get(:@vid))
|
51
|
+
assert_equal(@valid_user_id, eshelf.instance_variable_get(:@user_id))
|
52
|
+
assert_equal(@valid_institute, eshelf.instance_variable_get(:@institution))
|
53
|
+
assert_nothing_raised{Exlibris::Primo::EShelf.new({:base_url => @base_url}, @valid_user_id, @valid_institute)}
|
54
|
+
assert_nothing_raised{Exlibris::Primo::EShelf.new({:base_url => @base_url, :vid => @vid}, @valid_user_id, @valid_institute)}
|
55
|
+
assert_raise(ArgumentError){Exlibris::Primo::EShelf.new({}, @valid_user_id, @valid_institute)}
|
56
|
+
assert_raise(ArgumentError){Exlibris::Primo::EShelf.new(@eshelf_setup, nil, nil)}
|
57
|
+
assert_raise(ArgumentError){Exlibris::Primo::EShelf.new(@eshelf_setup, nil, nil)}
|
58
|
+
assert_raise(ArgumentError){Exlibris::Primo::EShelf.new(@eshelf_setup, @valid_user_id, nil)}
|
66
59
|
end
|
67
60
|
|
68
|
-
|
69
|
-
|
61
|
+
def test_valid_eshelf
|
62
|
+
eshelf = nil
|
63
|
+
assert_nil(eshelf)
|
64
|
+
VCR.use_cassette('eshelf valid eshelf') do
|
70
65
|
assert_nothing_raised{eshelf = Exlibris::Primo::EShelf.new(@eshelf_setup, @valid_user_id, @valid_institute).eshelf}
|
71
66
|
assert_not_nil(eshelf)
|
72
67
|
assert_instance_of(Nokogiri::XML::Document, eshelf)
|
68
|
+
end
|
73
69
|
end
|
74
70
|
|
75
|
-
|
71
|
+
def test_valid_eshelf_structure
|
72
|
+
VCR.use_cassette('eshelf valid eshelf structure') do
|
76
73
|
eshelfStructure = nil
|
74
|
+
assert_nil(eshelfStructure)
|
77
75
|
assert_nothing_raised{eshelfStructure = Exlibris::Primo::EShelf.new(@eshelf_setup, @valid_user_id, @valid_institute).eshelfStructure}
|
78
76
|
assert_not_nil(eshelfStructure)
|
79
77
|
assert(eshelfStructure.is_a? Nokogiri::XML::Document)
|
78
|
+
end
|
80
79
|
end
|
81
|
-
|
82
|
-
|
80
|
+
|
81
|
+
def test_basket_id
|
82
|
+
VCR.use_cassette('eshelf valid eshelf structure') do
|
83
83
|
assert_equal(@valid_basket, Exlibris::Primo::EShelf.new(@eshelf_setup, @valid_user_id, @valid_institute).basket_id)
|
84
|
+
end
|
84
85
|
end
|
85
86
|
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
87
|
+
def test_invalid_user_eshelf
|
88
|
+
ws = nil
|
89
|
+
assert_nil(ws)
|
90
|
+
assert_nothing_raised(){ws = Exlibris::Primo::EShelf.new(@eshelf_setup, @invalid_user_id, @valid_institute)}
|
91
|
+
assert_not_nil(ws)
|
92
|
+
eshelf = nil
|
93
|
+
assert_nil(eshelf)
|
94
|
+
VCR.use_cassette('eshelf invalid eshelf') do
|
91
95
|
assert_nothing_raised(){eshelf = ws.eshelf}
|
92
96
|
assert_not_nil(eshelf)
|
93
97
|
assert_instance_of(Nokogiri::XML::Document, eshelf)
|
94
98
|
assert_equal(0, ws.count)
|
99
|
+
end
|
95
100
|
end
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
101
|
+
|
102
|
+
def test_invalid_institution_eshelf
|
103
|
+
ws = nil
|
104
|
+
assert_nil(ws)
|
105
|
+
assert_nothing_raised(){ws = Exlibris::Primo::EShelf.new(@eshelf_setup, @invalid_user_id, @valid_institute)}
|
106
|
+
assert_not_nil(ws)
|
107
|
+
eshelf = nil
|
108
|
+
assert_nil(eshelf)
|
109
|
+
VCR.use_cassette('eshelf invalid institution') do
|
102
110
|
assert_nothing_raised(){eshelf = ws.eshelf}
|
103
111
|
assert_not_nil(eshelf)
|
104
112
|
assert_instance_of(Nokogiri::XML::Document, eshelf)
|
105
113
|
assert_equal(0, ws.count)
|
114
|
+
end
|
106
115
|
end
|
107
116
|
|
108
|
-
|
109
|
-
|
117
|
+
def test_records
|
118
|
+
records = nil
|
119
|
+
assert_nil(records)
|
120
|
+
VCR.use_cassette('eshelf valid eshelf') do
|
110
121
|
assert_nothing_raised(){records = Exlibris::Primo::EShelf.new(@eshelf_setup, @valid_user_id, @valid_institute).records}
|
111
122
|
assert_not_nil(records)
|
112
123
|
assert_instance_of(Array, records)
|
113
124
|
assert(!records.empty?, "Eshelf records returned empty")
|
125
|
+
end
|
114
126
|
end
|
115
127
|
|
116
|
-
|
117
|
-
|
118
|
-
|
128
|
+
def test_cant_add_same_record_twice
|
129
|
+
eshelf = Exlibris::Primo::EShelf.new(@eshelf_setup, @valid_user_id, @valid_institute)
|
130
|
+
assert_not_nil(eshelf)
|
131
|
+
VCR.use_cassette('eshelf add same record twice') do
|
119
132
|
# Add record
|
120
133
|
assert_nothing_raised(){ eshelf.add_records(@valid_doc_ids, @valid_basket) }
|
121
134
|
# Add same record again
|
122
135
|
assert_raise(RuntimeError){ eshelf.add_records(@valid_doc_ids, @valid_basket) }
|
123
136
|
# Remove record
|
124
137
|
assert_nothing_raised(){ eshelf.remove_records(@valid_doc_ids, @valid_basket) }
|
138
|
+
end
|
125
139
|
end
|
126
140
|
|
127
|
-
|
128
|
-
|
129
|
-
|
141
|
+
def test_cant_add_invalid_records
|
142
|
+
eshelf = Exlibris::Primo::EShelf.new(@eshelf_setup, @valid_user_id, @valid_institute)
|
143
|
+
assert_not_nil(eshelf)
|
144
|
+
VCR.use_cassette('eshelf add invalid records') do
|
130
145
|
# Attempt to add record
|
131
146
|
assert_raise(RuntimeError){ eshelf.add_records(@invalid_doc_ids, @valid_basket) }
|
132
147
|
# Attempt to remove record which was never added
|
133
148
|
assert_raise(RuntimeError){ eshelf.remove_records(@invalid_doc_ids, @valid_basket) }
|
149
|
+
end
|
134
150
|
end
|
135
151
|
|
136
|
-
|
137
|
-
|
138
|
-
|
152
|
+
def test_cant_add_to_invalid_basket
|
153
|
+
eshelf = Exlibris::Primo::EShelf.new(@eshelf_setup, @valid_user_id, @valid_institute)
|
154
|
+
assert_not_nil(eshelf)
|
155
|
+
VCR.use_cassette('eshelf add to invalid basket') do
|
139
156
|
# Attempt to add record to basket with invalid folder name
|
140
157
|
assert_raise(RuntimeError){ eshelf.add_records(@valid_doc_ids, @invalid_basket) }
|
158
|
+
end
|
141
159
|
end
|
142
160
|
|
143
|
-
|
144
|
-
|
145
|
-
|
161
|
+
def test_can_add_to_empty_folder
|
162
|
+
eshelf = Exlibris::Primo::EShelf.new(@eshelf_setup, @valid_user_id, @valid_institute)
|
163
|
+
assert_not_nil(eshelf)
|
164
|
+
VCR.use_cassette('eshelf add to empty basket') do
|
146
165
|
# Add record to basket with no folder id
|
147
166
|
assert_nothing_raised(){ eshelf.add_records(@valid_doc_ids, nil) }
|
148
167
|
# Remove record from basket with no folder id
|
149
168
|
assert_nothing_raised(){ eshelf.remove_records(@valid_doc_ids, @valid_basket) }
|
169
|
+
end
|
150
170
|
end
|
151
|
-
|
152
|
-
end
|
171
|
+
end
|