ror-rubycas-server 1.0.a
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.
- data/CHANGELOG +292 -0
- data/Gemfile +2 -0
- data/LICENSE +26 -0
- data/README.textile +129 -0
- data/Rakefile +1 -0
- data/bin/rubycas-server +16 -0
- data/lib/casserver.rb +11 -0
- data/lib/casserver/authenticators/active_directory_ldap.rb +19 -0
- data/lib/casserver/authenticators/authlogic_crypto_providers/aes256.rb +43 -0
- data/lib/casserver/authenticators/authlogic_crypto_providers/bcrypt.rb +92 -0
- data/lib/casserver/authenticators/authlogic_crypto_providers/md5.rb +34 -0
- data/lib/casserver/authenticators/authlogic_crypto_providers/sha1.rb +59 -0
- data/lib/casserver/authenticators/authlogic_crypto_providers/sha512.rb +50 -0
- data/lib/casserver/authenticators/base.rb +67 -0
- data/lib/casserver/authenticators/client_certificate.rb +47 -0
- data/lib/casserver/authenticators/google.rb +58 -0
- data/lib/casserver/authenticators/ldap.rb +147 -0
- data/lib/casserver/authenticators/ntlm.rb +88 -0
- data/lib/casserver/authenticators/open_id.rb +22 -0
- data/lib/casserver/authenticators/sql.rb +133 -0
- data/lib/casserver/authenticators/sql_authlogic.rb +93 -0
- data/lib/casserver/authenticators/sql_encrypted.rb +75 -0
- data/lib/casserver/authenticators/sql_md5.rb +19 -0
- data/lib/casserver/authenticators/sql_rest_auth.rb +85 -0
- data/lib/casserver/authenticators/test.rb +22 -0
- data/lib/casserver/cas.rb +315 -0
- data/lib/casserver/localization.rb +91 -0
- data/lib/casserver/model.rb +270 -0
- data/lib/casserver/options_hash.rb +44 -0
- data/lib/casserver/server.rb +706 -0
- data/lib/casserver/utils.rb +32 -0
- data/lib/casserver/views/_login_form.erb +42 -0
- data/lib/casserver/views/layout.erb +18 -0
- data/lib/casserver/views/login.erb +30 -0
- data/lib/casserver/views/proxy.builder +12 -0
- data/lib/casserver/views/proxy_validate.builder +25 -0
- data/lib/casserver/views/service_validate.builder +18 -0
- data/lib/casserver/views/validate.erb +2 -0
- data/po/de_DE/rubycas-server.po +127 -0
- data/po/es_ES/rubycas-server.po +123 -0
- data/po/fr_FR/rubycas-server.po +128 -0
- data/po/ja_JP/rubycas-server.po +126 -0
- data/po/pl_PL/rubycas-server.po +123 -0
- data/po/pt_BR/rubycas-server.po +123 -0
- data/po/ru_RU/rubycas-server.po +118 -0
- data/po/rubycas-server.pot +112 -0
- data/po/zh_CN/rubycas-server.po +113 -0
- data/po/zh_TW/rubycas-server.po +113 -0
- data/public/themes/cas.css +121 -0
- data/public/themes/notice.png +0 -0
- data/public/themes/ok.png +0 -0
- data/public/themes/simple/bg.png +0 -0
- data/public/themes/simple/favicon.png +0 -0
- data/public/themes/simple/login_box_bg.png +0 -0
- data/public/themes/simple/logo.png +0 -0
- data/public/themes/simple/theme.css +28 -0
- data/public/themes/urbacon/bg.png +0 -0
- data/public/themes/urbacon/login_box_bg.png +0 -0
- data/public/themes/urbacon/logo.png +0 -0
- data/public/themes/urbacon/theme.css +33 -0
- data/public/themes/warning.png +0 -0
- data/resources/init.d.sh +58 -0
- data/rubycas-server.gemspec +57 -0
- data/setup.rb +1585 -0
- data/spec/alt_config.yml +50 -0
- data/spec/authenticators/ldap_spec.rb +53 -0
- data/spec/casserver_spec.rb +141 -0
- data/spec/database.yml +5 -0
- data/spec/default_config.yml +73 -0
- data/spec/model_spec.rb +42 -0
- data/spec/options_hash_spec.rb +146 -0
- data/spec/spec.opts +4 -0
- data/spec/spec_helper.rb +90 -0
- data/spec/utils_spec.rb +53 -0
- data/tasks/bundler.rake +4 -0
- data/tasks/db/migrate.rake +12 -0
- data/tasks/localization.rake +13 -0
- data/tasks/spec.rake +10 -0
- metadata +356 -0
data/spec/alt_config.yml
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
server: webrick
|
2
|
+
port: 6543
|
3
|
+
#ssl_cert: test.pem
|
4
|
+
uri_path: /test
|
5
|
+
#bind_address: 0.0.0.0
|
6
|
+
|
7
|
+
# database:
|
8
|
+
# adapter: mysql
|
9
|
+
# database: casserver
|
10
|
+
# username: root
|
11
|
+
# password:
|
12
|
+
# host: localhost
|
13
|
+
# reconnect: true
|
14
|
+
database:
|
15
|
+
adapter: sqlite3
|
16
|
+
database: spec/casserver_spec.db
|
17
|
+
|
18
|
+
disable_auto_migrations: true
|
19
|
+
|
20
|
+
quiet: true
|
21
|
+
|
22
|
+
authenticator:
|
23
|
+
class: CASServer::Authenticators::Test
|
24
|
+
password: spec_password
|
25
|
+
|
26
|
+
theme: simple
|
27
|
+
|
28
|
+
organization: "RSPEC-TEST"
|
29
|
+
|
30
|
+
infoline: "This is an rspec test."
|
31
|
+
|
32
|
+
#custom_views: /path/to/custom/views
|
33
|
+
|
34
|
+
default_locale: en
|
35
|
+
|
36
|
+
log:
|
37
|
+
file: casserver_spec.log
|
38
|
+
level: DEBUG
|
39
|
+
|
40
|
+
#db_log:
|
41
|
+
# file: casserver_spec_db.log
|
42
|
+
|
43
|
+
enable_single_sign_out: true
|
44
|
+
|
45
|
+
#maximum_unused_login_ticket_lifetime: 300
|
46
|
+
#maximum_unused_service_ticket_lifetime: 300
|
47
|
+
|
48
|
+
#maximum_session_lifetime: 172800
|
49
|
+
|
50
|
+
#downcase_username: true
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
3
|
+
|
4
|
+
require 'casserver/authenticators/ldap'
|
5
|
+
|
6
|
+
describe CASServer::Authenticators::LDAP do
|
7
|
+
before do
|
8
|
+
@ldap_entry = mock(Net::LDAP::Entry.new)
|
9
|
+
@ldap_entry.stub!(:[]).and_return("Test")
|
10
|
+
|
11
|
+
@ldap = mock(Net::LDAP)
|
12
|
+
@ldap.stub!(:host=)
|
13
|
+
@ldap.stub!(:port=)
|
14
|
+
@ldap.stub!(:encryption)
|
15
|
+
@ldap.stub!(:bind_as).and_return(true)
|
16
|
+
@ldap.stub!(:authenticate).and_return(true)
|
17
|
+
@ldap.stub!(:search).and_return([@ldap_entry])
|
18
|
+
|
19
|
+
Net::LDAP.stub!(:new).and_return(@ldap)
|
20
|
+
end
|
21
|
+
|
22
|
+
describe '#validate' do
|
23
|
+
|
24
|
+
it 'validate with preauthentication and with extra attributes' do
|
25
|
+
auth = CASServer::Authenticators::LDAP.new
|
26
|
+
|
27
|
+
auth_config = HashWithIndifferentAccess.new(
|
28
|
+
:ldap => {
|
29
|
+
:host => "ad.example.net",
|
30
|
+
:port => 389,
|
31
|
+
:base => "dc=example,dc=net",
|
32
|
+
:filter => "(objectClass=person)",
|
33
|
+
:auth_user => "authenticator",
|
34
|
+
:auth_password => "itsasecret"
|
35
|
+
},
|
36
|
+
:extra_attributes => [:full_name, :address]
|
37
|
+
)
|
38
|
+
|
39
|
+
auth.configure(auth_config.merge('auth_index' => 0))
|
40
|
+
auth.validate(
|
41
|
+
:username => 'validusername',
|
42
|
+
:password => 'validpassword',
|
43
|
+
:service => 'test.service',
|
44
|
+
:request => {}
|
45
|
+
).should == true
|
46
|
+
|
47
|
+
auth.extra_attributes.should == {:full_name => 'Test', :address => 'Test'}
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
|
@@ -0,0 +1,141 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
3
|
+
|
4
|
+
$LOG = Logger.new(File.basename(__FILE__).gsub('.rb','.log'))
|
5
|
+
|
6
|
+
RSpec.configure do |config|
|
7
|
+
config.include Capybara
|
8
|
+
end
|
9
|
+
|
10
|
+
VALID_USERNAME = 'spec_user'
|
11
|
+
VALID_PASSWORD = 'spec_password'
|
12
|
+
|
13
|
+
INVALID_PASSWORD = 'invalid_password'
|
14
|
+
|
15
|
+
describe 'CASServer' do
|
16
|
+
|
17
|
+
before do
|
18
|
+
@target_service = 'http://my.app.test'
|
19
|
+
end
|
20
|
+
|
21
|
+
describe "/login" do
|
22
|
+
before do
|
23
|
+
load_server(File.dirname(__FILE__) + "/default_config.yml")
|
24
|
+
reset_spec_database
|
25
|
+
end
|
26
|
+
|
27
|
+
it "logs in successfully with valid username and password without a target service" do
|
28
|
+
visit "/login"
|
29
|
+
|
30
|
+
fill_in 'username', :with => VALID_USERNAME
|
31
|
+
fill_in 'password', :with => VALID_PASSWORD
|
32
|
+
click_button 'login-submit'
|
33
|
+
|
34
|
+
page.should have_content("You have successfully logged in")
|
35
|
+
end
|
36
|
+
|
37
|
+
it "fails to log in with invalid password" do
|
38
|
+
visit "/login"
|
39
|
+
fill_in 'username', :with => VALID_USERNAME
|
40
|
+
fill_in 'password', :with => INVALID_PASSWORD
|
41
|
+
click_button 'login-submit'
|
42
|
+
|
43
|
+
page.should have_content("Incorrect username or password")
|
44
|
+
end
|
45
|
+
|
46
|
+
it "logs in successfully with valid username and password and redirects to target service" do
|
47
|
+
visit "/login?service="+CGI.escape(@target_service)
|
48
|
+
|
49
|
+
fill_in 'username', :with => VALID_USERNAME
|
50
|
+
fill_in 'password', :with => VALID_PASSWORD
|
51
|
+
|
52
|
+
click_button 'login-submit'
|
53
|
+
|
54
|
+
page.current_url.should =~ /^#{Regexp.escape(@target_service)}\/?\?ticket=ST\-[1-9rA-Z]+/
|
55
|
+
end
|
56
|
+
|
57
|
+
it "preserves target service after invalid login" do
|
58
|
+
visit "/login?service="+CGI.escape(@target_service)
|
59
|
+
|
60
|
+
fill_in 'username', :with => VALID_USERNAME
|
61
|
+
fill_in 'password', :with => INVALID_PASSWORD
|
62
|
+
click_button 'login-submit'
|
63
|
+
|
64
|
+
page.should have_content("Incorrect username or password")
|
65
|
+
page.should have_xpath('//input[@id="service"]', :value => @target_service)
|
66
|
+
end
|
67
|
+
|
68
|
+
it "uses appropriate localization when 'lang' prameter is given (make sure you've run `rake localization:mo` first!!)" do
|
69
|
+
visit "/login?lang=pl"
|
70
|
+
page.should have_content("Użytkownik")
|
71
|
+
|
72
|
+
visit "/login?lang=pt_BR"
|
73
|
+
page.should have_content("Usuário")
|
74
|
+
|
75
|
+
visit "/login?lang=en"
|
76
|
+
page.should have_content("Username")
|
77
|
+
end
|
78
|
+
|
79
|
+
end # describe '/login'
|
80
|
+
|
81
|
+
|
82
|
+
describe '/logout' do
|
83
|
+
|
84
|
+
before do
|
85
|
+
load_server(File.dirname(__FILE__) + "/default_config.yml")
|
86
|
+
reset_spec_database
|
87
|
+
end
|
88
|
+
|
89
|
+
it "logs out successfully" do
|
90
|
+
visit "/logout"
|
91
|
+
|
92
|
+
page.should have_content("You have successfully logged out")
|
93
|
+
end
|
94
|
+
|
95
|
+
it "logs out successfully and redirects to target service" do
|
96
|
+
visit "/logout?gateway=true&service="+CGI.escape(@target_service)
|
97
|
+
|
98
|
+
page.current_url.should =~ /^#{Regexp.escape(@target_service)}\/?/
|
99
|
+
end
|
100
|
+
|
101
|
+
end # describe '/logout'
|
102
|
+
|
103
|
+
describe 'Configuration' do
|
104
|
+
it "uri_path value changes prefix of routes" do
|
105
|
+
load_server(File.dirname(__FILE__) + "/alt_config.yml")
|
106
|
+
@target_service = 'http://my.app.test'
|
107
|
+
|
108
|
+
visit "/test/login"
|
109
|
+
page.status_code.should_not == 404
|
110
|
+
|
111
|
+
visit "/test/logout"
|
112
|
+
page.status_code.should_not == 404
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
describe "proxyValidate" do
|
117
|
+
before do
|
118
|
+
load_server(File.dirname(__FILE__) + "/default_config.yml")
|
119
|
+
reset_spec_database
|
120
|
+
|
121
|
+
visit "/login?service="+CGI.escape(@target_service)
|
122
|
+
|
123
|
+
fill_in 'username', :with => VALID_USERNAME
|
124
|
+
fill_in 'password', :with => VALID_PASSWORD
|
125
|
+
|
126
|
+
click_button 'login-submit'
|
127
|
+
|
128
|
+
page.current_url.should =~ /^#{Regexp.escape(@target_service)}\/?\?ticket=ST\-[1-9rA-Z]+/
|
129
|
+
@ticket = page.current_url.match(/ticket=(.*)$/)[1]
|
130
|
+
end
|
131
|
+
|
132
|
+
it "should have extra attributes in proper format" do
|
133
|
+
visit "/serviceValidate?service=#{CGI.escape(@target_service)}&ticket=#{@ticket}"
|
134
|
+
|
135
|
+
encoded_utf_string = "Ютф" # actual string is "Ютф"
|
136
|
+
page.body.should match("<test_utf_string>#{encoded_utf_string}</test_utf_string>")
|
137
|
+
page.body.should match("<test_numeric>123.45</test_numeric>")
|
138
|
+
page.body.should match("<test_utf_string>Ютф</test_utf_string>")
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
data/spec/database.yml
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
all: &all
|
2
|
+
server: webrick
|
3
|
+
port: 6543
|
4
|
+
#ssl_cert: test.pem
|
5
|
+
#uri_path: /cas
|
6
|
+
#bind_address: 0.0.0.0
|
7
|
+
|
8
|
+
# database:
|
9
|
+
# adapter: mysql
|
10
|
+
# database: casserver
|
11
|
+
# username: root
|
12
|
+
# password:
|
13
|
+
# host: localhost
|
14
|
+
# reconnect: true
|
15
|
+
database:
|
16
|
+
adapter: sqlite3
|
17
|
+
database: spec/casserver_spec.db
|
18
|
+
|
19
|
+
disable_auto_migrations: true
|
20
|
+
|
21
|
+
quiet: true
|
22
|
+
|
23
|
+
authenticator:
|
24
|
+
class: CASServer::Authenticators::Test
|
25
|
+
password: spec_password
|
26
|
+
database:
|
27
|
+
adapter: mysql
|
28
|
+
|
29
|
+
theme: simple
|
30
|
+
|
31
|
+
organization: "RSPEC-TEST"
|
32
|
+
|
33
|
+
infoline: "This is an rspec test."
|
34
|
+
|
35
|
+
#custom_views: /path/to/custom/views
|
36
|
+
|
37
|
+
default_locale: en
|
38
|
+
|
39
|
+
log:
|
40
|
+
file: casserver_spec.log
|
41
|
+
level: DEBUG
|
42
|
+
|
43
|
+
#db_log:
|
44
|
+
# file: casserver_spec_db.log
|
45
|
+
|
46
|
+
enable_single_sign_out: true
|
47
|
+
|
48
|
+
#maximum_unused_login_ticket_lifetime: 300
|
49
|
+
#maximum_unused_service_ticket_lifetime: 300
|
50
|
+
|
51
|
+
#maximum_session_lifetime: 172800
|
52
|
+
|
53
|
+
#downcase_username: true
|
54
|
+
|
55
|
+
|
56
|
+
production:
|
57
|
+
<<: *all
|
58
|
+
server: thin
|
59
|
+
authenticator:
|
60
|
+
class: CASServer::Authenticators::SQL
|
61
|
+
database: inherit
|
62
|
+
user_table: users
|
63
|
+
username_column: email
|
64
|
+
password_column: password
|
65
|
+
|
66
|
+
|
67
|
+
test:
|
68
|
+
<<: *all
|
69
|
+
server: mongrel
|
70
|
+
|
71
|
+
development:
|
72
|
+
<<: *all
|
73
|
+
server: apache
|
data/spec/model_spec.rb
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
3
|
+
|
4
|
+
module CASServer
|
5
|
+
end
|
6
|
+
require 'casserver/model'
|
7
|
+
|
8
|
+
describe CASServer::Model::LoginTicket, '.cleanup(max_lifetime, max_unconsumed_lifetime)' do
|
9
|
+
let(:max_lifetime) { -1 }
|
10
|
+
let(:max_unconsumed_lifetime) { -2 }
|
11
|
+
|
12
|
+
before do
|
13
|
+
load_server(File.dirname(__FILE__) + "/default_config.yml")
|
14
|
+
reset_spec_database
|
15
|
+
|
16
|
+
CASServer::Model::LoginTicket.create :ticket => 'test', :client_hostname => 'test.local'
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'should destroy all tickets created before the max lifetime' do
|
20
|
+
expect {
|
21
|
+
CASServer::Model::LoginTicket.cleanup(max_lifetime, max_unconsumed_lifetime)
|
22
|
+
}.to change(CASServer::Model::LoginTicket, :count).by(-1)
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'should destroy all unconsumed tickets not exceeding the max lifetime' do
|
26
|
+
expect {
|
27
|
+
CASServer::Model::LoginTicket.cleanup(max_lifetime, max_unconsumed_lifetime)
|
28
|
+
}.to change(CASServer::Model::LoginTicket, :count).by(-1)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe CASServer::Model::LoginTicket, '#to_s' do
|
33
|
+
let(:ticket) { 'test' }
|
34
|
+
|
35
|
+
before do
|
36
|
+
@login_ticket = CASServer::Model::LoginTicket.new :ticket => ticket
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'should delegate #to_s to #ticket' do
|
40
|
+
@login_ticket.to_s.should == ticket
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,146 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
3
|
+
# Hmmm.. Should I need to do this?
|
4
|
+
require 'casserver/options_hash'
|
5
|
+
|
6
|
+
describe OptionsHash do
|
7
|
+
|
8
|
+
describe "creation" do
|
9
|
+
it "should not raise" do
|
10
|
+
lambda {OptionsHash.new}.should_not raise_error
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
describe "environment method" do
|
15
|
+
before :each do
|
16
|
+
@options = OptionsHash.new
|
17
|
+
end
|
18
|
+
it "should store an environment attribute" do
|
19
|
+
@options.environment = :development
|
20
|
+
@options.environment.should == :development
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe "load_config method," do
|
25
|
+
before :each do
|
26
|
+
@options = OptionsHash.new
|
27
|
+
end
|
28
|
+
it "should raise when it doesn't know the environment" do
|
29
|
+
lambda {@options.load_config "spec/default_config.yml"}.should raise_error(OptionsHash::EnvironmentMissing)
|
30
|
+
end
|
31
|
+
describe "given a set environment," do
|
32
|
+
before :each do
|
33
|
+
@options.environment = :development
|
34
|
+
end
|
35
|
+
it "should raise an argument error when you pass something silly in" do
|
36
|
+
lambda {@options.load_config :silly}.should raise_error(ArgumentError)
|
37
|
+
lambda {@options.load_config 51117}.should raise_error(ArgumentError)
|
38
|
+
end
|
39
|
+
it "should load a config file string without error" do
|
40
|
+
lambda {@options.load_config "spec/default_config.yml"}.should_not raise_error
|
41
|
+
end
|
42
|
+
it "should load a config file without error" do
|
43
|
+
file = File.new "spec/default_config.yml"
|
44
|
+
lambda {@options.load_config file}.should_not raise_error
|
45
|
+
end
|
46
|
+
|
47
|
+
describe "data loading" do
|
48
|
+
before :each do
|
49
|
+
@options.environment = :development
|
50
|
+
@options.load_config "spec/default_config.yml"
|
51
|
+
end
|
52
|
+
it "should assign things correctly from all" do
|
53
|
+
@options[:port].should == 6543
|
54
|
+
end
|
55
|
+
it "should assign environment specific options" do
|
56
|
+
@options[:server].should == "apache"
|
57
|
+
production_options = OptionsHash.new
|
58
|
+
production_options.environment = :production
|
59
|
+
production_options.load_config "spec/default_config.yml"
|
60
|
+
production_options[:server].should == "thin"
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
describe "load_database_config method" do
|
68
|
+
before :each do
|
69
|
+
@development_options = OptionsHash.new
|
70
|
+
@production_options = OptionsHash.new
|
71
|
+
end
|
72
|
+
it "should not work without assignment of environment" do
|
73
|
+
lambda {@development_options.load_database_config "spec/database.yml"}.should raise_error(OptionsHash::EnvironmentMissing)
|
74
|
+
end
|
75
|
+
describe "when environment attribute is assigned" do
|
76
|
+
|
77
|
+
before :each do
|
78
|
+
@development_options.environment = :development
|
79
|
+
@production_options.environment = :production
|
80
|
+
end
|
81
|
+
|
82
|
+
it "should not raise when a filename string is passed in" do
|
83
|
+
lambda {@development_options.load_database_config "spec/database.yml"}.should_not raise_error
|
84
|
+
end
|
85
|
+
|
86
|
+
it "should not raise when a file is passed in" do
|
87
|
+
file = File.new "spec/database.yml"
|
88
|
+
lambda {@development_options.load_database_config file}.should_not raise_error
|
89
|
+
end
|
90
|
+
|
91
|
+
describe "post data loading should have the appropriate data loaded" do
|
92
|
+
before :each do
|
93
|
+
@development_options.load_database_config "spec/database.yml"
|
94
|
+
@production_options.load_database_config "spec/database.yml"
|
95
|
+
end
|
96
|
+
it "for development" do
|
97
|
+
@development_options[:database][:adapter].should == "sqlite3"
|
98
|
+
end
|
99
|
+
it "for production" do
|
100
|
+
@production_options[:database][:adapter].should == "postgresql"
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
describe "primary configuration overriding" do
|
105
|
+
before :each do
|
106
|
+
@production_options.load_config "spec/default_config.yml"
|
107
|
+
end
|
108
|
+
it "should work" do
|
109
|
+
@production_options[:database][:adapter].should == "sqlite3"
|
110
|
+
@production_options.load_database_config "spec/database.yml"
|
111
|
+
@production_options[:database][:adapter].should == "postgresql"
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
describe "inherit_authenticator_database! method" do
|
119
|
+
before :each do
|
120
|
+
@options = OptionsHash.new
|
121
|
+
@options.environment = :production
|
122
|
+
@options.load_config "spec/default_config.yml"
|
123
|
+
end
|
124
|
+
it "should work" do
|
125
|
+
@options[:authenticator][:database].should == "inherit"
|
126
|
+
@options.inherit_authenticator_database!
|
127
|
+
@options[:authenticator][:database].should_not == "inherit"
|
128
|
+
@options[:authenticator][:database][:adapter].should == "sqlite3"
|
129
|
+
end
|
130
|
+
it "should work after loading database.yml" do
|
131
|
+
@options.load_database_config "spec/database.yml"
|
132
|
+
@options[:authenticator][:database].should == "inherit"
|
133
|
+
@options.inherit_authenticator_database!
|
134
|
+
@options[:authenticator][:database].should_not == "inherit"
|
135
|
+
@options[:authenticator][:database][:adapter].should == "postgresql"
|
136
|
+
end
|
137
|
+
it "should do nothing when it should do nothing" do
|
138
|
+
options = OptionsHash.new
|
139
|
+
options.environment = :development
|
140
|
+
options.load_config "spec/default_config.yml"
|
141
|
+
options[:authenticator][:database][:adapter].should == "mysql"
|
142
|
+
options.inherit_authenticator_database!
|
143
|
+
options[:authenticator][:database][:adapter].should == "mysql"
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|