authpds 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +1 -3
- data/Rakefile +1 -2
- data/lib/authpds.rb +4 -14
- data/lib/authpds/acts_as_authentic.rb +3 -60
- data/lib/authpds/acts_as_authentic/core_attributes.rb +24 -0
- data/lib/authpds/acts_as_authentic/expiration.rb +19 -0
- data/lib/authpds/acts_as_authentic/institutions_attributes.rb +34 -0
- data/lib/authpds/controllers/authpds_controller.rb +3 -61
- data/lib/authpds/controllers/authpds_controller/core_attributes.rb +24 -0
- data/lib/authpds/controllers/authpds_controller/institution_attributes.rb +54 -0
- data/lib/authpds/controllers/authpds_controller/url_handling.rb +18 -0
- data/lib/authpds/controllers/authpds_sessions_controller.rb +0 -1
- data/lib/authpds/session.rb +15 -247
- data/lib/authpds/session/authentication.rb +24 -0
- data/lib/authpds/session/authlogic_callbacks.rb +12 -0
- data/lib/authpds/session/authorization.rb +16 -0
- data/lib/authpds/session/callbacks.rb +30 -0
- data/lib/authpds/session/config.rb +60 -0
- data/lib/authpds/session/core_attributes.rb +45 -0
- data/lib/authpds/session/exception_handling.rb +22 -0
- data/lib/authpds/session/institution_attributes.rb +15 -0
- data/lib/authpds/session/pds_user.rb +17 -0
- data/lib/authpds/session/record.rb +32 -0
- data/lib/authpds/session/url_handling.rb +55 -0
- data/lib/authpds/version.rb +1 -1
- data/test/{unit/authpds_controller_test.rb → authpds_controller_test.rb} +19 -11
- data/test/{unit/authpds_user_sessions_controller_test.rb → authpds_user_sessions_controller_test.rb} +3 -1
- data/test/fixtures/users.yml +2 -2
- data/test/pds_test.rb +83 -0
- data/test/support/config/institutions.yml +4 -4
- data/test/test_helper.rb +10 -4
- data/test/{unit/user_session_test.rb → user_session_test.rb} +34 -28
- data/test/{unit/user_test.rb → user_test.rb} +2 -2
- data/test/vcr_cassettes/bor_info_valid_newschool.yml +35 -0
- data/test/vcr_cassettes/bor_info_valid_nyu.yml +40 -0
- data/test/vcr_cassettes/get_attribute_authenticate.yml +36 -0
- data/test/vcr_cassettes/get_attribute_bor_id.yml +32 -0
- data/test/vcr_cassettes/get_attribute_bor_info.yml +40 -0
- data/test/vcr_cassettes/get_attribute_bor_verification.yml +32 -0
- data/test/vcr_cassettes/get_attribute_invalid_bor_info.yml +33 -0
- data/test/vcr_cassettes/invalid_bor_info.yml +33 -0
- data/test/vcr_cassettes/nyu.yml +40 -0
- metadata +104 -21
- data/test/unit/pds_test.rb +0 -62
@@ -0,0 +1,24 @@
|
|
1
|
+
module Authpds
|
2
|
+
module Session
|
3
|
+
module Authentication
|
4
|
+
def authenticated?
|
5
|
+
authenticate
|
6
|
+
end
|
7
|
+
protected :authenticated?
|
8
|
+
|
9
|
+
def authenticate
|
10
|
+
# Don't authenticate if the system is inaccessible.
|
11
|
+
# If the application session id is nil, skip this check.
|
12
|
+
return false if controller.cookies["#{calling_system}_inaccessible".to_sym] == session_id unless session_id.nil?
|
13
|
+
# If PDS session already established, authenticate
|
14
|
+
return true unless pds_user.nil?
|
15
|
+
# Establish a PDS session if the user logged in via an alternative SSO mechanism and this isn't being called after login
|
16
|
+
controller.redirect_to sso_url({
|
17
|
+
:return_url => controller.request.url }) if valid_sso_session? unless controller.params["action"] =="validate" or controller.performed?
|
18
|
+
# Otherwise, do not authenticate
|
19
|
+
return false
|
20
|
+
end
|
21
|
+
protected :authenticate
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Authpds
|
2
|
+
module Session
|
3
|
+
module AuthlogicCallbacks
|
4
|
+
# Callback method from Authlogic.
|
5
|
+
# Called while trying to persist the session.
|
6
|
+
def persist_session
|
7
|
+
destroy unless (authenticated? and authorized?) or anonymous?
|
8
|
+
end
|
9
|
+
protected :persist_session
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Authpds
|
2
|
+
module Session
|
3
|
+
module Authorization
|
4
|
+
def authorized?
|
5
|
+
# Set all the information that is needed to make an authorization decision
|
6
|
+
set_record and return authorize
|
7
|
+
end
|
8
|
+
protected :authorized?
|
9
|
+
|
10
|
+
def authorize
|
11
|
+
# If PDS user is not nil (PDS session already established), authorize
|
12
|
+
!pds_user.nil? && additional_authorization
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Authpds
|
2
|
+
module Session
|
3
|
+
module Callbacks
|
4
|
+
# Hook for more complicated logic to determine PDS user record identifier
|
5
|
+
def pds_record_identifier
|
6
|
+
@pds_record_identifier ||= self.class.pds_record_identifier
|
7
|
+
end
|
8
|
+
|
9
|
+
# Hook to determine if we should set up an SSO session
|
10
|
+
def valid_sso_session?
|
11
|
+
return false
|
12
|
+
end
|
13
|
+
|
14
|
+
# Hook to provide additional authorization requirements
|
15
|
+
def additional_authorization
|
16
|
+
return true
|
17
|
+
end
|
18
|
+
|
19
|
+
# Hook to add additional user attributes.
|
20
|
+
def additional_attributes
|
21
|
+
{}
|
22
|
+
end
|
23
|
+
|
24
|
+
# Hook to update expiration date if necessary
|
25
|
+
def expiration_date
|
26
|
+
1.week.ago
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module Authpds
|
2
|
+
module Session
|
3
|
+
module Config
|
4
|
+
# Base pds url
|
5
|
+
def pds_url(value = nil)
|
6
|
+
rw_config(:pds_url, value)
|
7
|
+
end
|
8
|
+
alias_method :pds_url=, :pds_url
|
9
|
+
|
10
|
+
# Name of the system
|
11
|
+
def calling_system(value = nil)
|
12
|
+
rw_config(:calling_system, value, "authpds")
|
13
|
+
end
|
14
|
+
alias_method :calling_system=, :calling_system
|
15
|
+
|
16
|
+
# Does the system allow anonymous access?
|
17
|
+
def anonymous(value = nil)
|
18
|
+
rw_config(:anonymous, value, true)
|
19
|
+
end
|
20
|
+
alias_method :anonymous=, :anonymous
|
21
|
+
|
22
|
+
# Mapping of PDS attributes
|
23
|
+
def pds_attributes(value = nil)
|
24
|
+
value.each_value { |pds_attr| pds_attr.gsub!("-", "_") } unless value.nil?
|
25
|
+
rw_config(:pds_attributes, value, {:email => "email", :firstname => "name", :lastname => "name", :primary_institution => "institute" })
|
26
|
+
end
|
27
|
+
alias_method :pds_attributes=, :pds_attributes
|
28
|
+
|
29
|
+
# Custom redirect logout url
|
30
|
+
def redirect_logout_url(value = nil)
|
31
|
+
rw_config(:redirect_logout_url, value, "")
|
32
|
+
end
|
33
|
+
alias_method :redirect_logout_url=, :redirect_logout_url
|
34
|
+
|
35
|
+
# Custom url to redirect to in case of system outage
|
36
|
+
def login_inaccessible_url(value = nil)
|
37
|
+
rw_config(:login_inaccessible_url, value, "")
|
38
|
+
end
|
39
|
+
alias_method :redirect_logout_url=, :redirect_logout_url
|
40
|
+
|
41
|
+
# PDS user method to call to identify record
|
42
|
+
def pds_record_identifier(value = nil)
|
43
|
+
rw_config(:pds_record_identifier, value, :id)
|
44
|
+
end
|
45
|
+
alias_method :pds_record_identifier=, :pds_record_identifier
|
46
|
+
|
47
|
+
# Querystring parameter key for the institution value
|
48
|
+
def institution_param_key(value = nil)
|
49
|
+
rw_config(:institution_param_key, value, "institute")
|
50
|
+
end
|
51
|
+
alias_method :institution_param_key=, :institution_param_key
|
52
|
+
|
53
|
+
# URL name for validation action
|
54
|
+
def validate_url_name(value = nil)
|
55
|
+
rw_config(:validate_url_name, value, "validate_url")
|
56
|
+
end
|
57
|
+
alias_method :validate_url_name=, :validate_url_name
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module Authpds
|
2
|
+
module Session
|
3
|
+
module CoreAttributes
|
4
|
+
def anonymous
|
5
|
+
@anonymous ||=self.class.anonymous
|
6
|
+
end
|
7
|
+
alias anonymous? anonymous
|
8
|
+
|
9
|
+
def calling_system
|
10
|
+
@calling_system ||= self.class.calling_system
|
11
|
+
end
|
12
|
+
|
13
|
+
def login_inaccessible_url
|
14
|
+
@login_inaccessible_url ||= self.class.login_inaccessible_url
|
15
|
+
end
|
16
|
+
|
17
|
+
def pds_attributes
|
18
|
+
@pds_attributes ||= self.class.pds_attributes
|
19
|
+
end
|
20
|
+
|
21
|
+
def pds_url
|
22
|
+
@pds_url ||= self.class.pds_url
|
23
|
+
end
|
24
|
+
|
25
|
+
def redirect_logout_url
|
26
|
+
@redirect_logout_url ||= self.class.redirect_logout_url
|
27
|
+
end
|
28
|
+
|
29
|
+
def validate_url_name
|
30
|
+
@validate_url_name ||= self.class.validate_url_name
|
31
|
+
end
|
32
|
+
|
33
|
+
def pds_handle
|
34
|
+
@pds_handle ||= (controller.cookies[:PDS_HANDLE] || controller.params[:pds_handle])
|
35
|
+
end
|
36
|
+
|
37
|
+
def session_id
|
38
|
+
@session_id ||=
|
39
|
+
(controller.session.respond_to?(:session_id)) ?
|
40
|
+
(controller.session.session_id) ?
|
41
|
+
controller.session.session_id : controller.session[:session_id] : controller.session[:session_id]
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Authpds
|
2
|
+
module Session
|
3
|
+
module ExceptionHandling
|
4
|
+
def handle_login_exception(error)
|
5
|
+
# Set a cookie saying that we've got some invalid stuff going on
|
6
|
+
# in this session. Either PDS is screwy, OpenSSO is screwy, or both.
|
7
|
+
# Either way, we want to skip logging in since it's problematic (if anonymous).
|
8
|
+
controller.cookies["#{calling_system}_inaccessible".to_sym] = {
|
9
|
+
:value => session_id,
|
10
|
+
:path => "/" } if anonymous?
|
11
|
+
# If anonymous access isn't allowed, we can't rightfully set the cookie.
|
12
|
+
# We probably should send to a system down page.
|
13
|
+
controller.redirect_to(login_inaccessible_url)
|
14
|
+
alert_the_authorities error
|
15
|
+
end
|
16
|
+
|
17
|
+
def alert_the_authorities(error)
|
18
|
+
controller.logger.error("Error in #{self.class}. Something is amiss with PDS authentication.\n#{error}\n#{error.backtrace.inspect}}")
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Authpds
|
2
|
+
module Session
|
3
|
+
module InstitutionAttributes
|
4
|
+
def institution_attributes
|
5
|
+
@institution_attributes ||=
|
6
|
+
(controller.current_primary_institution.nil? or controller.current_primary_institution.auth.nil?) ?
|
7
|
+
{} : controller.current_primary_institution.auth
|
8
|
+
end
|
9
|
+
|
10
|
+
def insitution_code
|
11
|
+
@institution_code ||= institution_attributes["code"]
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Authpds
|
2
|
+
module Session
|
3
|
+
module PdsUser
|
4
|
+
def pds_user
|
5
|
+
begin
|
6
|
+
@pds_user ||= Authpds::Exlibris::Pds::BorInfo.new(pds_url, calling_system, pds_handle) unless pds_handle.nil?
|
7
|
+
return @pds_user unless @pds_user.nil? or @pds_user.error
|
8
|
+
rescue Exception => e
|
9
|
+
# Delete the PDS_HANDLE, since this isn't working.
|
10
|
+
# controller.cookies.delete(:PDS_HANDLE) unless pds_handle.nil?
|
11
|
+
handle_login_exception e
|
12
|
+
return nil
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Authpds
|
2
|
+
module Session
|
3
|
+
module Record
|
4
|
+
# Get the record associated with this PDS user.
|
5
|
+
def get_record(login)
|
6
|
+
record = (klass.find_by_smart_case_login_field(login) || klass.new(login_field => login))
|
7
|
+
end
|
8
|
+
|
9
|
+
# Set the record information associated with this PDS user.
|
10
|
+
def set_record
|
11
|
+
self.attempted_record = get_record(pds_user.send(pds_record_identifier))
|
12
|
+
self.attempted_record.expiration_date = expiration_date
|
13
|
+
# Do this part only if user data has expired.
|
14
|
+
reset_record attempted_record if self.attempted_record.expired?
|
15
|
+
self.attempted_record.user_attributes= additional_attributes
|
16
|
+
end
|
17
|
+
|
18
|
+
# Reset expired data
|
19
|
+
def reset_record(attempted_record)
|
20
|
+
pds_attributes.each do |record_attr, pds_attr|
|
21
|
+
attempted_record.send("#{record_attr}=".to_sym,
|
22
|
+
pds_user.send(pds_attr.to_sym)) if self.attempted_record.respond_to?("#{record_attr}=".to_sym)
|
23
|
+
end
|
24
|
+
pds_user.class.public_instance_methods(false).each do |pds_attr_reader|
|
25
|
+
attempted_record.user_attributes = {
|
26
|
+
pds_attr_reader.to_sym => pds_user.send(pds_attr_reader.to_sym) }
|
27
|
+
end
|
28
|
+
end
|
29
|
+
private :reset_record
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module Authpds
|
2
|
+
module Session
|
3
|
+
module UrlHandling
|
4
|
+
require "cgi"
|
5
|
+
|
6
|
+
# URL to redirect to for login.
|
7
|
+
# Preceded by :before_login
|
8
|
+
def login_url(params={})
|
9
|
+
auth_pds_login_url "load-login", params
|
10
|
+
end
|
11
|
+
|
12
|
+
# URL to redirect to in the case of establishing a SSO session.
|
13
|
+
def sso_url(params={})
|
14
|
+
auth_pds_login_url "sso", params
|
15
|
+
end
|
16
|
+
|
17
|
+
# URL to redirect to after logout.
|
18
|
+
def logout_url(params={})
|
19
|
+
auth_pds_url "logout", user_session_redirect_url(redirect_logout_url), params
|
20
|
+
end
|
21
|
+
|
22
|
+
def auth_pds_login_url(func, params)
|
23
|
+
auth_pds_url func, validate_url(params), :institute => insitution_code, :calling_system => calling_system
|
24
|
+
end
|
25
|
+
protected :auth_pds_login_url
|
26
|
+
|
27
|
+
def auth_pds_url(func, url, params)
|
28
|
+
auth_pds_url = "#{pds_url}/pds?func=#{func}"
|
29
|
+
params.each_pair do |key, value|
|
30
|
+
auth_pds_url << "&#{key}=#{CGI::escape(value)}" unless key.nil? or value.nil?
|
31
|
+
end
|
32
|
+
auth_pds_url << "&url=#{CGI::escape(url)}"
|
33
|
+
end
|
34
|
+
private :auth_pds_url
|
35
|
+
|
36
|
+
def user_session_redirect_url(url)
|
37
|
+
controller.user_session_redirect_url(url)
|
38
|
+
end
|
39
|
+
private :user_session_redirect_url
|
40
|
+
|
41
|
+
# Returns the URL for validating a UserSession on return from a remote login system.
|
42
|
+
def validate_url(params={})
|
43
|
+
url = controller.send(validate_url_name, :return_url => user_session_redirect_url(params[:return_url]))
|
44
|
+
return url if params.nil? or params.empty?
|
45
|
+
url << "?" if url.match('\?').nil?
|
46
|
+
params.each do |key, value|
|
47
|
+
next if [:controller, :action, :return_url].include?(key)
|
48
|
+
url << "&#{calling_system}_#{key}=#{CGI::escape(value)}" unless key.nil? or value.nil?
|
49
|
+
end
|
50
|
+
url
|
51
|
+
end
|
52
|
+
private :validate_url
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
data/lib/authpds/version.rb
CHANGED
@@ -16,8 +16,10 @@ class ApplicationControllerTest < ActiveSupport::TestCase
|
|
16
16
|
test "current_user_session" do
|
17
17
|
assert_nil(controller.current_user_session)
|
18
18
|
controller.cookies[:PDS_HANDLE] = { :value => VALID_PDS_HANDLE_FOR_NYU }
|
19
|
-
|
20
|
-
|
19
|
+
VCR.use_cassette('nyu') do
|
20
|
+
user_session = controller.current_user_session
|
21
|
+
assert_not_nil(user_session)
|
22
|
+
end
|
21
23
|
end
|
22
24
|
|
23
25
|
test "current_user_nil" do
|
@@ -27,9 +29,11 @@ class ApplicationControllerTest < ActiveSupport::TestCase
|
|
27
29
|
test "current_user" do
|
28
30
|
assert_nil(controller.current_user)
|
29
31
|
controller.cookies[:PDS_HANDLE] = { :value => VALID_PDS_HANDLE_FOR_NYU }
|
30
|
-
|
31
|
-
|
32
|
-
|
32
|
+
VCR.use_cassette('nyu') do
|
33
|
+
user = controller.current_user
|
34
|
+
assert_not_nil(user)
|
35
|
+
assert_equal("N12162279", user.username)
|
36
|
+
end
|
33
37
|
end
|
34
38
|
|
35
39
|
test "current_primary_institution_nil" do
|
@@ -44,11 +48,15 @@ class ApplicationControllerTest < ActiveSupport::TestCase
|
|
44
48
|
end
|
45
49
|
|
46
50
|
test "current_primary_institution_user" do
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
51
|
+
assert_nothing_raised{
|
52
|
+
assert_nil(controller.current_primary_institution)
|
53
|
+
Institutions.loadpaths<< "#{File.dirname(__FILE__)}/../support/config"
|
54
|
+
controller.cookies[:PDS_HANDLE] = { :value => VALID_PDS_HANDLE_FOR_NYU }
|
55
|
+
VCR.use_cassette('nyu') do
|
56
|
+
assert_equal("N12162279", controller.current_user.username)
|
57
|
+
assert_equal(Institutions.institutions[:NYU], controller.current_user.primary_institution)
|
58
|
+
assert_equal(Institutions.institutions[:NYU], controller.current_primary_institution)
|
59
|
+
end
|
60
|
+
}
|
53
61
|
end
|
54
62
|
end
|
data/test/fixtures/users.yml
CHANGED
@@ -17,7 +17,7 @@ ba36:
|
|
17
17
|
:nyuidn => "N18158418",
|
18
18
|
:verification => "6EAF453D8B01E5AC27D9",
|
19
19
|
:bor_status => "51",
|
20
|
-
|
20
|
+
:aleph_permissions => {} }.to_yaml.inspect %>
|
21
21
|
# std5:
|
22
22
|
# password_salt: <%#= salt = Authlogic::Random.hex_token %>
|
23
23
|
# crypted_password: <%#= Authlogic::CryptoProviders::Sha512.encrypt("std5" + salt) %>
|
@@ -45,5 +45,5 @@ st75:
|
|
45
45
|
:nyuidn => "N10450419",
|
46
46
|
:verification => "A64C45148D130E78D8AA",
|
47
47
|
:bor_status => "50",
|
48
|
-
|
48
|
+
:aleph_permissions => {} }.to_yaml.inspect %>
|
49
49
|
|
data/test/pds_test.rb
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class PdsTest < ActiveSupport::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
@pds_url = "https://logindev.library.nyu.edu"
|
7
|
+
@calling_system = "authpds"
|
8
|
+
@valid_pds_handle_for_nyu = VALID_PDS_HANDLE_FOR_NYU
|
9
|
+
@valid_pds_handle_for_newschool = VALID_PDS_HANDLE_FOR_NEWSCHOOL
|
10
|
+
@invalid_pds_handle = INVALID_PDS_HANDLE
|
11
|
+
@attribute = "bor_info"
|
12
|
+
end
|
13
|
+
|
14
|
+
test "get_attribute_valid" do
|
15
|
+
assert_nothing_raised {
|
16
|
+
VCR.use_cassette('get_attribute_bor_info') do
|
17
|
+
get_attribute = Authpds::Exlibris::Pds::GetAttribute.new(@pds_url, @calling_system, @valid_pds_handle_for_nyu, "bor_info")
|
18
|
+
assert_equal("N12162279", get_attribute.response.at("//id").inner_text)
|
19
|
+
end
|
20
|
+
VCR.use_cassette('get_attribute_bor_verification') do
|
21
|
+
get_attribute = Authpds::Exlibris::Pds::GetAttribute.new(@pds_url, @calling_system, @valid_pds_handle_for_nyu, "bor_verification")
|
22
|
+
assert_equal("N12162279", get_attribute.response.at("//id").inner_text)
|
23
|
+
end
|
24
|
+
VCR.use_cassette('get_attribute_bor_id') do
|
25
|
+
get_attribute = Authpds::Exlibris::Pds::GetAttribute.new(@pds_url, @calling_system, @valid_pds_handle_for_nyu, "bor_id")
|
26
|
+
assert_equal("N12162279", get_attribute.response.at("//id").inner_text)
|
27
|
+
end
|
28
|
+
VCR.use_cassette('get_attribute_authenticate') do
|
29
|
+
get_attribute = Authpds::Exlibris::Pds::GetAttribute.new(@pds_url, @calling_system, @valid_pds_handle_for_nyu, "authenticate")
|
30
|
+
assert_equal("N12162279", get_attribute.response.at("//id").inner_text)
|
31
|
+
end
|
32
|
+
}
|
33
|
+
end
|
34
|
+
|
35
|
+
test "get_attribute_invalid" do
|
36
|
+
VCR.use_cassette('get_attribute_invalid_bor_info') do
|
37
|
+
get_attribute = Authpds::Exlibris::Pds::GetAttribute.new(@pds_url, @calling_system, @invalid_pds_handle, "bor_info")
|
38
|
+
assert_equal("Error User does not exist", get_attribute.error)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
test "bor_info_valid_nyu" do
|
43
|
+
VCR.use_cassette('bor_info_valid_nyu') do
|
44
|
+
nyu = Authpds::Exlibris::Pds::BorInfo.new(@pds_url, @calling_system, @valid_pds_handle_for_nyu)
|
45
|
+
assert_nothing_raised {
|
46
|
+
assert_equal("N12162279", nyu.id)
|
47
|
+
assert_equal("N12162279", nyu.nyuidn)
|
48
|
+
assert_equal("51", nyu.bor_status)
|
49
|
+
assert_equal("CB", nyu.bor_type)
|
50
|
+
assert_equal("SCOT THOMAS", nyu.name)
|
51
|
+
assert_equal("SCOT THOMAS", nyu.givenname)
|
52
|
+
assert_equal("DALTON", nyu.sn)
|
53
|
+
assert_equal("Y", nyu.ill_permission)
|
54
|
+
assert_equal("GA", nyu.college_code)
|
55
|
+
assert_equal("CSCI", nyu.dept_code)
|
56
|
+
assert_equal("Information Systems", nyu.major)
|
57
|
+
}
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
test "bor_info_valid_newschool" do
|
62
|
+
VCR.use_cassette('bor_info_valid_newschool') do
|
63
|
+
newschool = Authpds::Exlibris::Pds::BorInfo.new(@pds_url, @calling_system, @valid_pds_handle_for_newschool)
|
64
|
+
assert_nothing_raised {
|
65
|
+
assert_equal("N00206454", newschool.id)
|
66
|
+
assert_equal("N00206454", newschool.nyuidn)
|
67
|
+
assert_equal("31", newschool.bor_status)
|
68
|
+
assert_equal("0", newschool.bor_type)
|
69
|
+
assert_equal("Allen", newschool.name)
|
70
|
+
assert_equal("Allen", newschool.givenname)
|
71
|
+
assert_equal("Jones", newschool.sn)
|
72
|
+
assert_equal("Y", newschool.ill_permission)
|
73
|
+
}
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
test "bor_info_invalid" do
|
78
|
+
VCR.use_cassette('invalid_bor_info') do
|
79
|
+
get_attribute = Authpds::Exlibris::Pds::BorInfo.new(@pds_url, @calling_system, @invalid_pds_handle)
|
80
|
+
assert_equal("Error User does not exist", get_attribute.error)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|