ggoodale-restful-authentication 1.1.1
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 +68 -0
- data/README.textile +224 -0
- data/Rakefile +32 -0
- data/TODO +15 -0
- data/generators/authenticated/USAGE +1 -0
- data/generators/authenticated/authenticated_generator.rb +478 -0
- data/generators/authenticated/lib/insert_routes.rb +54 -0
- data/generators/authenticated/templates/_model_partial.html.erb +8 -0
- data/generators/authenticated/templates/activation.erb +3 -0
- data/generators/authenticated/templates/authenticated_system.rb +189 -0
- data/generators/authenticated/templates/authenticated_test_helper.rb +22 -0
- data/generators/authenticated/templates/controller.rb +43 -0
- data/generators/authenticated/templates/helper.rb +2 -0
- data/generators/authenticated/templates/login.html.erb +16 -0
- data/generators/authenticated/templates/mailer.rb +25 -0
- data/generators/authenticated/templates/migration.rb +26 -0
- data/generators/authenticated/templates/model.rb +83 -0
- data/generators/authenticated/templates/model_controller.rb +85 -0
- data/generators/authenticated/templates/model_helper.rb +93 -0
- data/generators/authenticated/templates/model_helper_spec.rb +158 -0
- data/generators/authenticated/templates/observer.rb +11 -0
- data/generators/authenticated/templates/signup.html.erb +19 -0
- data/generators/authenticated/templates/signup_notification.erb +8 -0
- data/generators/authenticated/templates/site_keys.rb +38 -0
- data/generators/authenticated/templates/spec/controllers/access_control_spec.rb +90 -0
- data/generators/authenticated/templates/spec/controllers/authenticated_system_spec.rb +102 -0
- data/generators/authenticated/templates/spec/controllers/sessions_controller_spec.rb +139 -0
- data/generators/authenticated/templates/spec/controllers/users_controller_spec.rb +198 -0
- data/generators/authenticated/templates/spec/fixtures/users.yml +60 -0
- data/generators/authenticated/templates/spec/helpers/users_helper_spec.rb +141 -0
- data/generators/authenticated/templates/spec/models/user_spec.rb +290 -0
- data/generators/authenticated/templates/stories/rest_auth_stories.rb +22 -0
- data/generators/authenticated/templates/stories/rest_auth_stories_helper.rb +81 -0
- data/generators/authenticated/templates/stories/steps/ra_navigation_steps.rb +49 -0
- data/generators/authenticated/templates/stories/steps/ra_resource_steps.rb +179 -0
- data/generators/authenticated/templates/stories/steps/ra_response_steps.rb +171 -0
- data/generators/authenticated/templates/stories/steps/user_steps.rb +153 -0
- data/generators/authenticated/templates/stories/users/accounts.story +186 -0
- data/generators/authenticated/templates/stories/users/sessions.story +134 -0
- data/generators/authenticated/templates/test/functional_test.rb +82 -0
- data/generators/authenticated/templates/test/mailer_test.rb +31 -0
- data/generators/authenticated/templates/test/model_functional_test.rb +93 -0
- data/generators/authenticated/templates/test/unit_test.rb +164 -0
- data/init.rb +1 -0
- data/lib/authentication.rb +40 -0
- data/lib/authentication/by_cookie_token.rb +82 -0
- data/lib/authentication/by_password.rb +64 -0
- data/lib/authorization.rb +14 -0
- data/lib/authorization/aasm_roles.rb +63 -0
- data/lib/authorization/stateful_roles.rb +62 -0
- data/lib/trustification.rb +14 -0
- data/lib/trustification/email_validation.rb +20 -0
- data/rails/init.rb +3 -0
- metadata +115 -0
@@ -0,0 +1,102 @@
|
|
1
|
+
require File.dirname(__FILE__) + '<%= ('/..'*controller_class_nesting_depth) + '/../spec_helper' %>'
|
2
|
+
|
3
|
+
# Be sure to include AuthenticatedTestHelper in spec/spec_helper.rb instead
|
4
|
+
# Then, you can remove it from this and the units test.
|
5
|
+
include AuthenticatedTestHelper
|
6
|
+
include AuthenticatedSystem
|
7
|
+
def action_name() end
|
8
|
+
|
9
|
+
describe <%= controller_class_name %>Controller do
|
10
|
+
fixtures :<%= table_name %>
|
11
|
+
|
12
|
+
before do
|
13
|
+
# FIXME -- <%= controller_file_name %> controller not testing xml logins
|
14
|
+
stub!(:authenticate_with_http_basic).and_return nil
|
15
|
+
end
|
16
|
+
describe "logout_killing_session!" do
|
17
|
+
before do
|
18
|
+
login_as :quentin
|
19
|
+
stub!(:reset_session)
|
20
|
+
end
|
21
|
+
it 'resets the session' do should_receive(:reset_session); logout_killing_session! end
|
22
|
+
it 'kills my auth_token cookie' do should_receive(:kill_remember_cookie!); logout_killing_session! end
|
23
|
+
it 'nils the current <%= file_name %>' do logout_killing_session!; current_<%= file_name %>.should be_nil end
|
24
|
+
it 'kills :<%= file_name %>_id session' do
|
25
|
+
session.stub!(:[]=)
|
26
|
+
session.should_receive(:[]=).with(:<%= file_name %>_id, nil).at_least(:once)
|
27
|
+
logout_killing_session!
|
28
|
+
end
|
29
|
+
it 'forgets me' do
|
30
|
+
current_<%= file_name %>.remember_me
|
31
|
+
current_<%= file_name %>.remember_token.should_not be_nil; current_<%= file_name %>.remember_token_expires_at.should_not be_nil
|
32
|
+
<%= class_name %>.find(1).remember_token.should_not be_nil; <%= class_name %>.find(1).remember_token_expires_at.should_not be_nil
|
33
|
+
logout_killing_session!
|
34
|
+
<%= class_name %>.find(1).remember_token.should be_nil; <%= class_name %>.find(1).remember_token_expires_at.should be_nil
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe "logout_keeping_session!" do
|
39
|
+
before do
|
40
|
+
login_as :quentin
|
41
|
+
stub!(:reset_session)
|
42
|
+
end
|
43
|
+
it 'does not reset the session' do should_not_receive(:reset_session); logout_keeping_session! end
|
44
|
+
it 'kills my auth_token cookie' do should_receive(:kill_remember_cookie!); logout_keeping_session! end
|
45
|
+
it 'nils the current <%= file_name %>' do logout_keeping_session!; current_<%= file_name %>.should be_nil end
|
46
|
+
it 'kills :<%= file_name %>_id session' do
|
47
|
+
session.stub!(:[]=)
|
48
|
+
session.should_receive(:[]=).with(:<%= file_name %>_id, nil).at_least(:once)
|
49
|
+
logout_keeping_session!
|
50
|
+
end
|
51
|
+
it 'forgets me' do
|
52
|
+
current_<%= file_name %>.remember_me
|
53
|
+
current_<%= file_name %>.remember_token.should_not be_nil; current_<%= file_name %>.remember_token_expires_at.should_not be_nil
|
54
|
+
<%= class_name %>.find(1).remember_token.should_not be_nil; <%= class_name %>.find(1).remember_token_expires_at.should_not be_nil
|
55
|
+
logout_keeping_session!
|
56
|
+
<%= class_name %>.find(1).remember_token.should be_nil; <%= class_name %>.find(1).remember_token_expires_at.should be_nil
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
describe 'When logged out' do
|
61
|
+
it "should not be authorized?" do
|
62
|
+
authorized?().should be_false
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
#
|
67
|
+
# Cookie Login
|
68
|
+
#
|
69
|
+
describe "Logging in by cookie" do
|
70
|
+
def set_remember_token token, time
|
71
|
+
@<%= file_name %>[:remember_token] = token;
|
72
|
+
@<%= file_name %>[:remember_token_expires_at] = time
|
73
|
+
@<%= file_name %>.save!
|
74
|
+
end
|
75
|
+
before do
|
76
|
+
@<%= file_name %> = <%= class_name %>.find(:first);
|
77
|
+
set_remember_token 'hello!', 5.minutes.from_now
|
78
|
+
end
|
79
|
+
it 'logs in with cookie' do
|
80
|
+
stub!(:cookies).and_return({ :auth_token => 'hello!' })
|
81
|
+
logged_in?.should be_true
|
82
|
+
end
|
83
|
+
|
84
|
+
it 'fails cookie login with bad cookie' do
|
85
|
+
should_receive(:cookies).at_least(:once).and_return({ :auth_token => 'i_haxxor_joo' })
|
86
|
+
logged_in?.should_not be_true
|
87
|
+
end
|
88
|
+
|
89
|
+
it 'fails cookie login with no cookie' do
|
90
|
+
set_remember_token nil, nil
|
91
|
+
should_receive(:cookies).at_least(:once).and_return({ })
|
92
|
+
logged_in?.should_not be_true
|
93
|
+
end
|
94
|
+
|
95
|
+
it 'fails expired cookie login' do
|
96
|
+
set_remember_token 'hello!', 5.minutes.ago
|
97
|
+
stub!(:cookies).and_return({ :auth_token => 'hello!' })
|
98
|
+
logged_in?.should_not be_true
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
end
|
@@ -0,0 +1,139 @@
|
|
1
|
+
require File.dirname(__FILE__) + '<%= ('/..'*controller_class_nesting_depth) + '/../spec_helper' %>'
|
2
|
+
|
3
|
+
# Be sure to include AuthenticatedTestHelper in spec/spec_helper.rb instead
|
4
|
+
# Then, you can remove it from this and the units test.
|
5
|
+
include AuthenticatedTestHelper
|
6
|
+
|
7
|
+
describe <%= controller_class_name %>Controller do
|
8
|
+
fixtures :<%= table_name %>
|
9
|
+
before do
|
10
|
+
@<%= file_name %> = mock_<%= file_name %>
|
11
|
+
@login_params = { :login => 'quentin', :password => 'test' }
|
12
|
+
<%= class_name %>.stub!(:authenticate).with(@login_params[:login], @login_params[:password]).and_return(@<%= file_name %>)
|
13
|
+
end
|
14
|
+
def do_create
|
15
|
+
post :create, @login_params
|
16
|
+
end
|
17
|
+
describe "on successful login," do
|
18
|
+
[ [:nil, nil, nil],
|
19
|
+
[:expired, 'valid_token', 15.minutes.ago],
|
20
|
+
[:different, 'i_haxxor_joo', 15.minutes.from_now],
|
21
|
+
[:valid, 'valid_token', 15.minutes.from_now]
|
22
|
+
].each do |has_request_token, token_value, token_expiry|
|
23
|
+
[ true, false ].each do |want_remember_me|
|
24
|
+
describe "my request cookie token is #{has_request_token.to_s}," do
|
25
|
+
describe "and ask #{want_remember_me ? 'to' : 'not to'} be remembered" do
|
26
|
+
before do
|
27
|
+
@ccookies = mock('cookies')
|
28
|
+
controller.stub!(:cookies).and_return(@ccookies)
|
29
|
+
@ccookies.stub!(:[]).with(:auth_token).and_return(token_value)
|
30
|
+
@ccookies.stub!(:delete).with(:auth_token)
|
31
|
+
@ccookies.stub!(:[]=)
|
32
|
+
@<%= file_name %>.stub!(:remember_me)
|
33
|
+
@<%= file_name %>.stub!(:refresh_token)
|
34
|
+
@<%= file_name %>.stub!(:forget_me)
|
35
|
+
@<%= file_name %>.stub!(:remember_token).and_return(token_value)
|
36
|
+
@<%= file_name %>.stub!(:remember_token_expires_at).and_return(token_expiry)
|
37
|
+
@<%= file_name %>.stub!(:remember_token?).and_return(has_request_token == :valid)
|
38
|
+
if want_remember_me
|
39
|
+
@login_params[:remember_me] = '1'
|
40
|
+
else
|
41
|
+
@login_params[:remember_me] = '0'
|
42
|
+
end
|
43
|
+
end
|
44
|
+
it "kills existing login" do controller.should_receive(:logout_keeping_session!); do_create; end
|
45
|
+
it "authorizes me" do do_create; controller.send(:authorized?).should be_true; end
|
46
|
+
it "logs me in" do do_create; controller.send(:logged_in?).should be_true end
|
47
|
+
it "greets me nicely" do do_create; response.flash[:notice].should =~ /success/i end
|
48
|
+
it "sets/resets/expires cookie" do controller.should_receive(:handle_remember_cookie!).with(want_remember_me); do_create end
|
49
|
+
it "sends a cookie" do controller.should_receive(:send_remember_cookie!); do_create end
|
50
|
+
it 'redirects to the home page' do do_create; response.should redirect_to('/') end
|
51
|
+
it "does not reset my session" do controller.should_not_receive(:reset_session).and_return nil; do_create end # change if you uncomment the reset_session path
|
52
|
+
if (has_request_token == :valid)
|
53
|
+
it 'does not make new token' do @<%= file_name %>.should_not_receive(:remember_me); do_create end
|
54
|
+
it 'does refresh token' do @<%= file_name %>.should_receive(:refresh_token); do_create end
|
55
|
+
it "sets an auth cookie" do do_create; end
|
56
|
+
else
|
57
|
+
if want_remember_me
|
58
|
+
it 'makes a new token' do @<%= file_name %>.should_receive(:remember_me); do_create end
|
59
|
+
it "does not refresh token" do @<%= file_name %>.should_not_receive(:refresh_token); do_create end
|
60
|
+
it "sets an auth cookie" do do_create; end
|
61
|
+
else
|
62
|
+
it 'does not make new token' do @<%= file_name %>.should_not_receive(:remember_me); do_create end
|
63
|
+
it 'does not refresh token' do @<%= file_name %>.should_not_receive(:refresh_token); do_create end
|
64
|
+
it 'kills user token' do @<%= file_name %>.should_receive(:forget_me); do_create end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end # inner describe
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
describe "on failed login" do
|
74
|
+
before do
|
75
|
+
<%= class_name %>.should_receive(:authenticate).with(anything(), anything()).and_return(nil)
|
76
|
+
login_as :quentin
|
77
|
+
end
|
78
|
+
it 'logs out keeping session' do controller.should_receive(:logout_keeping_session!); do_create end
|
79
|
+
it 'flashes an error' do do_create; flash[:error].should =~ /Couldn't log you in as 'quentin'/ end
|
80
|
+
it 'renders the log in page' do do_create; response.should render_template('new') end
|
81
|
+
it "doesn't log me in" do do_create; controller.send(:logged_in?).should == false end
|
82
|
+
it "doesn't send password back" do
|
83
|
+
@login_params[:password] = 'FROBNOZZ'
|
84
|
+
do_create
|
85
|
+
response.should_not have_text(/FROBNOZZ/i)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
describe "on signout" do
|
90
|
+
def do_destroy
|
91
|
+
get :destroy
|
92
|
+
end
|
93
|
+
before do
|
94
|
+
login_as :quentin
|
95
|
+
end
|
96
|
+
it 'logs me out' do controller.should_receive(:logout_killing_session!); do_destroy end
|
97
|
+
it 'redirects me to the home page' do do_destroy; response.should be_redirect end
|
98
|
+
end
|
99
|
+
|
100
|
+
end
|
101
|
+
|
102
|
+
describe <%= controller_class_name %>Controller do
|
103
|
+
describe "route generation" do
|
104
|
+
it "should route the new <%= controller_controller_name %> action correctly" do
|
105
|
+
route_for(:controller => '<%= controller_controller_name %>', :action => 'new').should == "/login"
|
106
|
+
end
|
107
|
+
it "should route the create <%= controller_controller_name %> correctly" do
|
108
|
+
route_for(:controller => '<%= controller_controller_name %>', :action => 'create').should == "/<%= controller_routing_path %>"
|
109
|
+
end
|
110
|
+
it "should route the destroy <%= controller_controller_name %> action correctly" do
|
111
|
+
route_for(:controller => '<%= controller_controller_name %>', :action => 'destroy').should == "/logout"
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
describe "route recognition" do
|
116
|
+
it "should generate params from GET /login correctly" do
|
117
|
+
params_from(:get, '/login').should == {:controller => '<%= controller_controller_name %>', :action => 'new'}
|
118
|
+
end
|
119
|
+
it "should generate params from POST /<%= controller_routing_path %> correctly" do
|
120
|
+
params_from(:post, '/<%= controller_routing_path %>').should == {:controller => '<%= controller_controller_name %>', :action => 'create'}
|
121
|
+
end
|
122
|
+
it "should generate params from DELETE /<%= controller_routing_path %> correctly" do
|
123
|
+
params_from(:delete, '/logout').should == {:controller => '<%= controller_controller_name %>', :action => 'destroy'}
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
describe "named routing" do
|
128
|
+
before(:each) do
|
129
|
+
get :new
|
130
|
+
end
|
131
|
+
it "should route <%= controller_routing_name %>_path() correctly" do
|
132
|
+
<%= controller_routing_name %>_path().should == "/<%= controller_routing_path %>"
|
133
|
+
end
|
134
|
+
it "should route new_<%= controller_routing_name %>_path() correctly" do
|
135
|
+
new_<%= controller_routing_name %>_path().should == "/<%= controller_routing_path %>/new"
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
end
|
@@ -0,0 +1,198 @@
|
|
1
|
+
require File.dirname(__FILE__) + '<%= ('/..'*model_controller_class_nesting_depth) + '/../spec_helper' %>'
|
2
|
+
|
3
|
+
# Be sure to include AuthenticatedTestHelper in spec/spec_helper.rb instead
|
4
|
+
# Then, you can remove it from this and the units test.
|
5
|
+
include AuthenticatedTestHelper
|
6
|
+
|
7
|
+
describe <%= model_controller_class_name %>Controller do
|
8
|
+
fixtures :<%= table_name %>
|
9
|
+
|
10
|
+
it 'allows signup' do
|
11
|
+
lambda do
|
12
|
+
create_<%= file_name %>
|
13
|
+
response.should be_redirect
|
14
|
+
end.should change(<%= class_name %>, :count).by(1)
|
15
|
+
end
|
16
|
+
|
17
|
+
<% if options[:stateful] %>
|
18
|
+
it 'signs up user in pending state' do
|
19
|
+
create_<%= file_name %>
|
20
|
+
assigns(:<%= file_name %>).reload
|
21
|
+
assigns(:<%= file_name %>).should be_pending
|
22
|
+
end<% end %>
|
23
|
+
|
24
|
+
<% if options[:include_activation] -%>
|
25
|
+
it 'signs up user with activation code' do
|
26
|
+
create_<%= file_name %>
|
27
|
+
assigns(:<%= file_name %>).reload
|
28
|
+
assigns(:<%= file_name %>).activation_code.should_not be_nil
|
29
|
+
end<% end -%>
|
30
|
+
|
31
|
+
it 'requires login on signup' do
|
32
|
+
lambda do
|
33
|
+
create_<%= file_name %>(:login => nil)
|
34
|
+
assigns[:<%= file_name %>].errors.on(:login).should_not be_nil
|
35
|
+
response.should be_success
|
36
|
+
end.should_not change(<%= class_name %>, :count)
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'requires password on signup' do
|
40
|
+
lambda do
|
41
|
+
create_<%= file_name %>(:password => nil)
|
42
|
+
assigns[:<%= file_name %>].errors.on(:password).should_not be_nil
|
43
|
+
response.should be_success
|
44
|
+
end.should_not change(<%= class_name %>, :count)
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'requires password confirmation on signup' do
|
48
|
+
lambda do
|
49
|
+
create_<%= file_name %>(:password_confirmation => nil)
|
50
|
+
assigns[:<%= file_name %>].errors.on(:password_confirmation).should_not be_nil
|
51
|
+
response.should be_success
|
52
|
+
end.should_not change(<%= class_name %>, :count)
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'requires email on signup' do
|
56
|
+
lambda do
|
57
|
+
create_<%= file_name %>(:email => nil)
|
58
|
+
assigns[:<%= file_name %>].errors.on(:email).should_not be_nil
|
59
|
+
response.should be_success
|
60
|
+
end.should_not change(<%= class_name %>, :count)
|
61
|
+
end
|
62
|
+
|
63
|
+
<% if options[:include_activation] %>
|
64
|
+
it 'activates user' do
|
65
|
+
<%= class_name %>.authenticate('aaron', 'monkey').should be_nil
|
66
|
+
get :activate, :activation_code => <%= table_name %>(:aaron).activation_code
|
67
|
+
response.should redirect_to('/login')
|
68
|
+
flash[:notice].should_not be_nil
|
69
|
+
flash[:error ].should be_nil
|
70
|
+
<%= class_name %>.authenticate('aaron', 'monkey').should == <%= table_name %>(:aaron)
|
71
|
+
end
|
72
|
+
|
73
|
+
it 'does not activate user without key' do
|
74
|
+
get :activate
|
75
|
+
flash[:notice].should be_nil
|
76
|
+
flash[:error ].should_not be_nil
|
77
|
+
end
|
78
|
+
|
79
|
+
it 'does not activate user with blank key' do
|
80
|
+
get :activate, :activation_code => ''
|
81
|
+
flash[:notice].should be_nil
|
82
|
+
flash[:error ].should_not be_nil
|
83
|
+
end
|
84
|
+
|
85
|
+
it 'does not activate user with bogus key' do
|
86
|
+
get :activate, :activation_code => 'i_haxxor_joo'
|
87
|
+
flash[:notice].should be_nil
|
88
|
+
flash[:error ].should_not be_nil
|
89
|
+
end<% end %>
|
90
|
+
|
91
|
+
def create_<%= file_name %>(options = {})
|
92
|
+
post :create, :<%= file_name %> => { :login => 'quire', :email => 'quire@example.com',
|
93
|
+
:password => 'quire69', :password_confirmation => 'quire69' }.merge(options)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
describe <%= model_controller_class_name %>Controller do
|
98
|
+
describe "route generation" do
|
99
|
+
it "should route <%= model_controller_controller_name %>'s 'index' action correctly" do
|
100
|
+
route_for(:controller => '<%= model_controller_controller_name %>', :action => 'index').should == "/<%= model_controller_routing_path %>"
|
101
|
+
end
|
102
|
+
|
103
|
+
it "should route <%= model_controller_controller_name %>'s 'new' action correctly" do
|
104
|
+
route_for(:controller => '<%= model_controller_controller_name %>', :action => 'new').should == "/signup"
|
105
|
+
end
|
106
|
+
|
107
|
+
it "should route {:controller => '<%= model_controller_controller_name %>', :action => 'create'} correctly" do
|
108
|
+
route_for(:controller => '<%= model_controller_controller_name %>', :action => 'create').should == "/register"
|
109
|
+
end
|
110
|
+
|
111
|
+
it "should route <%= model_controller_controller_name %>'s 'show' action correctly" do
|
112
|
+
route_for(:controller => '<%= model_controller_controller_name %>', :action => 'show', :id => '1').should == "/<%= model_controller_routing_path %>/1"
|
113
|
+
end
|
114
|
+
|
115
|
+
it "should route <%= model_controller_controller_name %>'s 'edit' action correctly" do
|
116
|
+
route_for(:controller => '<%= model_controller_controller_name %>', :action => 'edit', :id => '1').should == "/<%= model_controller_routing_path %>/1/edit"
|
117
|
+
end
|
118
|
+
|
119
|
+
it "should route <%= model_controller_controller_name %>'s 'update' action correctly" do
|
120
|
+
route_for(:controller => '<%= model_controller_controller_name %>', :action => 'update', :id => '1').should == "/<%= model_controller_routing_path %>/1"
|
121
|
+
end
|
122
|
+
|
123
|
+
it "should route <%= model_controller_controller_name %>'s 'destroy' action correctly" do
|
124
|
+
route_for(:controller => '<%= model_controller_controller_name %>', :action => 'destroy', :id => '1').should == "/<%= model_controller_routing_path %>/1"
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
describe "route recognition" do
|
129
|
+
it "should generate params for <%= model_controller_controller_name %>'s index action from GET /<%= model_controller_routing_path %>" do
|
130
|
+
params_from(:get, '/<%= model_controller_routing_path %>').should == {:controller => '<%= model_controller_controller_name %>', :action => 'index'}
|
131
|
+
params_from(:get, '/<%= model_controller_routing_path %>.xml').should == {:controller => '<%= model_controller_controller_name %>', :action => 'index', :format => 'xml'}
|
132
|
+
params_from(:get, '/<%= model_controller_routing_path %>.json').should == {:controller => '<%= model_controller_controller_name %>', :action => 'index', :format => 'json'}
|
133
|
+
end
|
134
|
+
|
135
|
+
it "should generate params for <%= model_controller_controller_name %>'s new action from GET /<%= model_controller_routing_path %>" do
|
136
|
+
params_from(:get, '/<%= model_controller_routing_path %>/new').should == {:controller => '<%= model_controller_controller_name %>', :action => 'new'}
|
137
|
+
params_from(:get, '/<%= model_controller_routing_path %>/new.xml').should == {:controller => '<%= model_controller_controller_name %>', :action => 'new', :format => 'xml'}
|
138
|
+
params_from(:get, '/<%= model_controller_routing_path %>/new.json').should == {:controller => '<%= model_controller_controller_name %>', :action => 'new', :format => 'json'}
|
139
|
+
end
|
140
|
+
|
141
|
+
it "should generate params for <%= model_controller_controller_name %>'s create action from POST /<%= model_controller_routing_path %>" do
|
142
|
+
params_from(:post, '/<%= model_controller_routing_path %>').should == {:controller => '<%= model_controller_controller_name %>', :action => 'create'}
|
143
|
+
params_from(:post, '/<%= model_controller_routing_path %>.xml').should == {:controller => '<%= model_controller_controller_name %>', :action => 'create', :format => 'xml'}
|
144
|
+
params_from(:post, '/<%= model_controller_routing_path %>.json').should == {:controller => '<%= model_controller_controller_name %>', :action => 'create', :format => 'json'}
|
145
|
+
end
|
146
|
+
|
147
|
+
it "should generate params for <%= model_controller_controller_name %>'s show action from GET /<%= model_controller_routing_path %>/1" do
|
148
|
+
params_from(:get , '/<%= model_controller_routing_path %>/1').should == {:controller => '<%= model_controller_controller_name %>', :action => 'show', :id => '1'}
|
149
|
+
params_from(:get , '/<%= model_controller_routing_path %>/1.xml').should == {:controller => '<%= model_controller_controller_name %>', :action => 'show', :id => '1', :format => 'xml'}
|
150
|
+
params_from(:get , '/<%= model_controller_routing_path %>/1.json').should == {:controller => '<%= model_controller_controller_name %>', :action => 'show', :id => '1', :format => 'json'}
|
151
|
+
end
|
152
|
+
|
153
|
+
it "should generate params for <%= model_controller_controller_name %>'s edit action from GET /<%= model_controller_routing_path %>/1/edit" do
|
154
|
+
params_from(:get , '/<%= model_controller_routing_path %>/1/edit').should == {:controller => '<%= model_controller_controller_name %>', :action => 'edit', :id => '1'}
|
155
|
+
end
|
156
|
+
|
157
|
+
it "should generate params {:controller => '<%= model_controller_controller_name %>', :action => update', :id => '1'} from PUT /<%= model_controller_routing_path %>/1" do
|
158
|
+
params_from(:put , '/<%= model_controller_routing_path %>/1').should == {:controller => '<%= model_controller_controller_name %>', :action => 'update', :id => '1'}
|
159
|
+
params_from(:put , '/<%= model_controller_routing_path %>/1.xml').should == {:controller => '<%= model_controller_controller_name %>', :action => 'update', :id => '1', :format => 'xml'}
|
160
|
+
params_from(:put , '/<%= model_controller_routing_path %>/1.json').should == {:controller => '<%= model_controller_controller_name %>', :action => 'update', :id => '1', :format => 'json'}
|
161
|
+
end
|
162
|
+
|
163
|
+
it "should generate params for <%= model_controller_controller_name %>'s destroy action from DELETE /<%= model_controller_routing_path %>/1" do
|
164
|
+
params_from(:delete, '/<%= model_controller_routing_path %>/1').should == {:controller => '<%= model_controller_controller_name %>', :action => 'destroy', :id => '1'}
|
165
|
+
params_from(:delete, '/<%= model_controller_routing_path %>/1.xml').should == {:controller => '<%= model_controller_controller_name %>', :action => 'destroy', :id => '1', :format => 'xml'}
|
166
|
+
params_from(:delete, '/<%= model_controller_routing_path %>/1.json').should == {:controller => '<%= model_controller_controller_name %>', :action => 'destroy', :id => '1', :format => 'json'}
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
describe "named routing" do
|
171
|
+
before(:each) do
|
172
|
+
get :new
|
173
|
+
end
|
174
|
+
|
175
|
+
it "should route <%= model_controller_routing_name %>_path() to /<%= model_controller_routing_path %>" do
|
176
|
+
<%= model_controller_routing_name %>_path().should == "/<%= model_controller_routing_path %>"
|
177
|
+
formatted_<%= model_controller_routing_name %>_path(:format => 'xml').should == "/<%= model_controller_routing_path %>.xml"
|
178
|
+
formatted_<%= model_controller_routing_name %>_path(:format => 'json').should == "/<%= model_controller_routing_path %>.json"
|
179
|
+
end
|
180
|
+
|
181
|
+
it "should route new_<%= model_controller_routing_name.singularize %>_path() to /<%= model_controller_routing_path %>/new" do
|
182
|
+
new_<%= model_controller_routing_name.singularize %>_path().should == "/<%= model_controller_routing_path %>/new"
|
183
|
+
formatted_new_<%= model_controller_routing_name.singularize %>_path(:format => 'xml').should == "/<%= model_controller_routing_path %>/new.xml"
|
184
|
+
formatted_new_<%= model_controller_routing_name.singularize %>_path(:format => 'json').should == "/<%= model_controller_routing_path %>/new.json"
|
185
|
+
end
|
186
|
+
|
187
|
+
it "should route <%= model_controller_routing_name.singularize %>_(:id => '1') to /<%= model_controller_routing_path %>/1" do
|
188
|
+
<%= model_controller_routing_name.singularize %>_path(:id => '1').should == "/<%= model_controller_routing_path %>/1"
|
189
|
+
formatted_<%= model_controller_routing_name.singularize %>_path(:id => '1', :format => 'xml').should == "/<%= model_controller_routing_path %>/1.xml"
|
190
|
+
formatted_<%= model_controller_routing_name.singularize %>_path(:id => '1', :format => 'json').should == "/<%= model_controller_routing_path %>/1.json"
|
191
|
+
end
|
192
|
+
|
193
|
+
it "should route edit_<%= model_controller_routing_name.singularize %>_path(:id => '1') to /<%= model_controller_routing_path %>/1/edit" do
|
194
|
+
edit_<%= model_controller_routing_name.singularize %>_path(:id => '1').should == "/<%= model_controller_routing_path %>/1/edit"
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
<%
|
2
|
+
## this code must match that in templates/model.rb
|
3
|
+
require 'digest/sha1'
|
4
|
+
def make_fake_token
|
5
|
+
@fake_token_counter ||= 0
|
6
|
+
@fake_token_counter += 1
|
7
|
+
Digest::SHA1.hexdigest(@fake_token_counter.to_s)
|
8
|
+
end
|
9
|
+
salts = (1..2).map{ make_fake_token }
|
10
|
+
passwds = salts.map{ |salt| password_digest('monkey', salt) }
|
11
|
+
-%>
|
12
|
+
|
13
|
+
quentin:
|
14
|
+
id: 1
|
15
|
+
login: quentin
|
16
|
+
email: quentin@example.com
|
17
|
+
salt: <%= salts[0] %> # SHA1('0')
|
18
|
+
crypted_password: <%= passwds[0] %> # 'monkey'
|
19
|
+
created_at: <%%= 5.days.ago.to_s :db %>
|
20
|
+
remember_token_expires_at: <%%= 1.days.from_now.to_s %>
|
21
|
+
remember_token: <%= make_fake_token %>
|
22
|
+
<% if options[:include_activation] -%>
|
23
|
+
activation_code:
|
24
|
+
activated_at: <%%= 5.days.ago.to_s :db %>
|
25
|
+
<% end -%>
|
26
|
+
<% if options[:stateful] -%>
|
27
|
+
state: active
|
28
|
+
<% end -%>
|
29
|
+
|
30
|
+
aaron:
|
31
|
+
id: 2
|
32
|
+
login: aaron
|
33
|
+
email: aaron@example.com
|
34
|
+
salt: <%= salts[1] %> # SHA1('1')
|
35
|
+
crypted_password: <%= passwds[1] %> # 'monkey'
|
36
|
+
created_at: <%%= 1.days.ago.to_s :db %>
|
37
|
+
remember_token_expires_at:
|
38
|
+
remember_token:
|
39
|
+
<% if options[:include_activation] -%>
|
40
|
+
activation_code: <%= make_fake_token %>
|
41
|
+
activated_at:
|
42
|
+
<% end -%>
|
43
|
+
<% if options[:stateful] %>
|
44
|
+
state: pending
|
45
|
+
<% end -%>
|
46
|
+
|
47
|
+
|
48
|
+
old_password_holder:
|
49
|
+
id: 3
|
50
|
+
login: old_password_holder
|
51
|
+
email: salty_dog@example.com
|
52
|
+
salt: 7e3041ebc2fc05a40c60028e2c4901a81035d3cd
|
53
|
+
crypted_password: 00742970dc9e6319f8019fd54864d3ea740f04b1 # test
|
54
|
+
created_at: <%%= 1.days.ago.to_s :db %>
|
55
|
+
<% if options[:include_activation] %>
|
56
|
+
activation_code:
|
57
|
+
activated_at: <%%= 5.days.ago.to_s :db %>
|
58
|
+
<% end %>
|
59
|
+
<% if options[:stateful] %>
|
60
|
+
state: active<% end %>
|