goma 0.0.1.rc2 → 0.0.1.rc3

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.
Files changed (59) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +1 -1
  3. data/Rakefile +11 -6
  4. data/lib/generators/goma/helpers/helpers.rb +39 -0
  5. data/lib/generators/goma/install/templates/goma.rb +1 -2
  6. data/lib/generators/goma/mailer/templates/mailer.rb +1 -1
  7. data/lib/generators/goma/model/active_record_generator.rb +3 -1
  8. data/lib/generators/goma/scaffold/user_generator.rb +2 -0
  9. data/lib/generators/goma/scaffold_controller/scaffold_controller_generator.rb +2 -0
  10. data/lib/generators/goma/scaffold_controller/templates/confirmation_controller.rb +4 -4
  11. data/lib/generators/goma/scaffold_controller/templates/user_controller.rb +3 -3
  12. data/lib/generators/test_unit/goma/model/model_generator.rb +13 -0
  13. data/lib/generators/test_unit/goma/model/templates/fixtures.yml +30 -0
  14. data/lib/generators/test_unit/goma/model/templates/unit_test.rb +9 -0
  15. data/lib/generators/test_unit/goma/scaffold/scaffold_generator.rb +36 -0
  16. data/lib/generators/test_unit/goma/scaffold/templates/confirmation_functional_test.rb +137 -0
  17. data/lib/generators/test_unit/goma/scaffold/templates/functional_test.rb +51 -0
  18. data/lib/generators/test_unit/goma/scaffold/templates/oauth_functional_test.rb +6 -0
  19. data/lib/generators/test_unit/goma/scaffold/templates/password_functional_test.rb +67 -0
  20. data/lib/generators/test_unit/goma/scaffold/templates/session_functional_test.rb +122 -0
  21. data/lib/generators/test_unit/goma/scaffold/templates/unlock_functional_test.rb +47 -0
  22. data/lib/generators/test_unit/goma/scaffold/templates/user_functional_test.rb +118 -0
  23. data/lib/goma.rb +1 -1
  24. data/lib/goma/config.rb +0 -1
  25. data/lib/goma/controller_test_helpers.rb +65 -0
  26. data/lib/goma/controllers.rb +1 -1
  27. data/lib/goma/models/authenticatable.rb +20 -11
  28. data/lib/goma/models/confirmable.rb +1 -1
  29. data/lib/goma/models/lockable.rb +1 -2
  30. data/lib/goma/version.rb +1 -1
  31. data/test/models/lockable_test.rb +0 -2
  32. data/test/rails_app/app/controllers/confirmations_controller.rb +4 -4
  33. data/test/rails_app/app/controllers/users_controller.rb +3 -3
  34. data/test/rails_app/app/mailers/user_mailer.rb +1 -1
  35. data/test/rails_app/config/initializers/goma.rb +1 -2
  36. data/test/rails_app/db/migrate/{20140515111009_create_users.rb → 20140524062919_create_users.rb} +0 -1
  37. data/test/rails_app/db/migrate/{20140515111010_create_authentications.rb → 20140524062920_create_authentications.rb} +0 -0
  38. data/test/rails_app/db/schema.rb +1 -2
  39. data/test/rails_app/test/controllers/authentications_controller_test.rb +4 -0
  40. data/test/rails_app/test/controllers/confirmations_controller_test.rb +127 -0
  41. data/test/rails_app/test/controllers/passwords_controller_test.rb +65 -0
  42. data/test/rails_app/test/controllers/sessions_controller_test.rb +70 -0
  43. data/test/rails_app/test/controllers/unlocks_controller_test.rb +43 -0
  44. data/test/rails_app/test/controllers/users_controller_test.rb +109 -0
  45. data/test/rails_app/test/fixtures/authentications.yml +11 -0
  46. data/test/rails_app/test/fixtures/users.yml +17 -0
  47. data/test/rails_app/test/helpers/authentications_helper_test.rb +4 -0
  48. data/test/rails_app/test/helpers/confirmations_helper_test.rb +4 -0
  49. data/test/rails_app/test/helpers/passwords_helper_test.rb +4 -0
  50. data/test/rails_app/test/helpers/sessions_helper_test.rb +4 -0
  51. data/test/rails_app/test/helpers/unlocks_helper_test.rb +4 -0
  52. data/test/rails_app/test/helpers/users_helper_test.rb +4 -0
  53. data/test/rails_app/test/mailers/user_mailer_test.rb +7 -0
  54. data/test/rails_app/test/models/authentication_test.rb +7 -0
  55. data/test/rails_app/test/models/user_test.rb +7 -0
  56. data/test/rails_app/test/test_helper.rb +16 -0
  57. data/test/test_helper.rb +1 -1
  58. metadata +54 -7
  59. data/lib/goma/test_helpers.rb +0 -67
@@ -0,0 +1,51 @@
1
+ require 'test_helper'
2
+
3
+ <% module_namespacing do -%>
4
+ class <%= controller_class_name %>ControllerTest < ActionController::TestCase
5
+ setup do
6
+ @<%= singular_table_name %> = <%= table_name %>(:one)
7
+ end
8
+
9
+ test "should get index" do
10
+ get :index
11
+ assert_response :success
12
+ assert_not_nil assigns(:<%= table_name %>)
13
+ end
14
+
15
+ test "should get new" do
16
+ get :new
17
+ assert_response :success
18
+ end
19
+
20
+ test "should create <%= singular_table_name %>" do
21
+ assert_difference('<%= class_name %>.count') do
22
+ post :create, <%= "#{singular_table_name}: { #{attributes_hash} }" %>
23
+ end
24
+
25
+ assert_redirected_to <%= singular_table_name %>_path(assigns(:<%= singular_table_name %>))
26
+ end
27
+
28
+ test "should show <%= singular_table_name %>" do
29
+ get :show, id: <%= "@#{singular_table_name}" %>
30
+ assert_response :success
31
+ end
32
+
33
+ test "should get edit" do
34
+ get :edit, id: <%= "@#{singular_table_name}" %>
35
+ assert_response :success
36
+ end
37
+
38
+ test "should update <%= singular_table_name %>" do
39
+ patch :update, id: <%= "@#{singular_table_name}" %>, <%= "#{singular_table_name}: { #{attributes_hash} }" %>
40
+ assert_redirected_to <%= singular_table_name %>_path(assigns(:<%= singular_table_name %>))
41
+ end
42
+
43
+ test "should destroy <%= singular_table_name %>" do
44
+ assert_difference('<%= class_name %>.count', -1) do
45
+ delete :destroy, id: <%= "@#{singular_table_name}" %>
46
+ end
47
+
48
+ assert_redirected_to <%= index_helper %>_path
49
+ end
50
+ end
51
+ <% end -%>
@@ -0,0 +1,6 @@
1
+ require 'test_helper'
2
+
3
+ <% module_namespacing do -%>
4
+ class <%= controller_class_name %>ControllerTest < ActionController::TestCase
5
+ end
6
+ <% end -%>
@@ -0,0 +1,67 @@
1
+ require 'test_helper'
2
+
3
+ <% module_namespacing do -%>
4
+ class <%= controller_class_name %>ControllerTest < ActionController::TestCase
5
+ setup do
6
+ @<%= resource_name %> = <%= resource_name.pluralize %>(:one)
7
+ end
8
+
9
+ test "should get new" do
10
+ get :new
11
+ assert_response :success
12
+ end
13
+
14
+ test "should resend reset password token with <%= goma_config.email_attribute_name %>" do
15
+ @<%= resource_name %>.send_reset_password_instructions!
16
+ <%= goma_config.reset_password_token_attribute_name %> = @<%= resource_name %>.<%= goma_config.unlock_token_attribute_name %>
17
+ assert_difference 'ActionMailer::Base.deliveries.size', 1 do
18
+ post :create, <%= goma_config.authentication_keys.to_field_name %>: @<%= resource_name %>.<%= goma_config.email_attribute_name %>
19
+ end
20
+ assert_redirected_to <%= login_url %>
21
+ @<%= resource_name %>.reload
22
+ assert_not_equal <%= goma_config.reset_password_token_attribute_name %>, @<%= resource_name %>.<%= goma_config.reset_password_token_attribute_name %>
23
+ end
24
+
25
+
26
+ test "should get edit" do
27
+ @<%= resource_name %>.send_reset_password_instructions!
28
+ <%= goma_config.reset_password_token_to_send_attribute_name %> = @<%= resource_name %>.<%= goma_config.reset_password_token_to_send_attribute_name %>
29
+ get :edit, id: <%= goma_config.reset_password_token_to_send_attribute_name %>
30
+ assert_response :success
31
+ assert_match /<input[^>]*type="hidden"[^>]*value="#{<%= goma_config.reset_password_token_to_send_attribute_name %>}"/, response.body
32
+ end
33
+
34
+ test "should update password" do
35
+ @<%= resource_name %>.send_reset_password_instructions!
36
+ <%= goma_config.reset_password_token_to_send_attribute_name %> = @<%= resource_name %>.<%= goma_config.reset_password_token_to_send_attribute_name %>
37
+ patch :update, id: <%= goma_config.reset_password_token_to_send_attribute_name %>, <%= resource_name %>: { <%= goma_config.reset_password_token_to_send_attribute_name %>: <%= goma_config.reset_password_token_to_send_attribute_name %>, <%= goma_config.password_attribute_name %>: 'newpassword', <%= goma_config.password_confirmation_attribute_name %>: 'newpassword' }
38
+ assert_redirected_to root_path
39
+ @<%= resource_name %>.reload
40
+ assert @<%= resource_name %>.valid_password? 'newpassword'
41
+ refute @<%= resource_name %>.valid_password? 'password'
42
+ end
43
+
44
+ test "should not update password with wrong token" do
45
+ @<%= resource_name %>.send_reset_password_instructions!
46
+ <%= goma_config.reset_password_token_to_send_attribute_name %> = @<%= resource_name %>.<%= goma_config.reset_password_token_to_send_attribute_name %>
47
+ patch :update, id: <%= goma_config.reset_password_token_to_send_attribute_name %>, <%= resource_name %>: { <%= goma_config.reset_password_token_to_send_attribute_name %>: 'oops', <%= goma_config.password_attribute_name %>: 'newpassword', <%= goma_config.password_confirmation_attribute_name %>: 'newpassword' }
48
+ assert_template :edit
49
+ assert_match /make sure you used the full URL provided/, flash[:alert]
50
+ @<%= resource_name %>.reload
51
+ refute @<%= resource_name %>.valid_password? 'newpassword'
52
+ assert @<%= resource_name %>.valid_password? 'password'
53
+ end
54
+
55
+ test "should not update password with expired token" do
56
+ @<%= resource_name %>.send_reset_password_instructions!
57
+ <%= goma_config.reset_password_token_to_send_attribute_name %> = @<%= resource_name %>.<%= goma_config.reset_password_token_to_send_attribute_name %>
58
+ @<%= resource_name %>.update_column(:<%= goma_config.reset_password_token_sent_at_attribute_name %>, <%= expire(goma_config.reset_password_within) %>.ago)
59
+ patch :update, id: <%= goma_config.reset_password_token_to_send_attribute_name %>, <%= resource_name %>: { <%= goma_config.reset_password_token_to_send_attribute_name %>: <%= goma_config.reset_password_token_to_send_attribute_name %>, <%= goma_config.password_attribute_name %>: 'newpassword', <%= goma_config.password_confirmation_attribute_name %>: 'newpassword' }
60
+ assert_template :new
61
+ assert_match /The password reset URL you visited has expired/, flash[:alert]
62
+ @<%= resource_name %>.reload
63
+ refute @<%= resource_name %>.valid_password? 'newpassword'
64
+ assert @<%= resource_name %>.valid_password? 'password'
65
+ end
66
+ end
67
+ <% end -%>
@@ -0,0 +1,122 @@
1
+ require 'test_helper'
2
+
3
+ <% module_namespacing do -%>
4
+ class <%= controller_class_name %>ControllerTest < ActionController::TestCase
5
+ setup do
6
+ @<%= resource_name %> = <%= resource_name.pluralize %>(:one)
7
+ end
8
+
9
+ test "should get new" do
10
+ get :new
11
+ assert_response :success
12
+ end
13
+
14
+ <% goma_config.authentication_keys.each do |key| -%>
15
+ test "should login with <%= key %>" do
16
+ <% if resource_name.to_sym == goma_config.default_scope -%>
17
+ refute logged_in?
18
+ <% else -%>
19
+ refute <%= resource_name %>_logged_in?
20
+ <% end -%>
21
+ post :create, <%= "#{goma_config.authentication_keys.to_field_name}: @#{resource_name}.#{key}, #{goma_config.password_attribute_name}: 'password'" %>
22
+ <% if resource_name.to_sym == goma_config.default_scope -%>
23
+ assert logged_in?
24
+ <% else -%>
25
+ assert <%= resource_name %>_logged_in?
26
+ <% end -%>
27
+ assert_redirected_to root_path
28
+ assert_match /Login successful/, flash[:notice]
29
+ end
30
+
31
+ test "should not login with <%= key %> with wrong password" do
32
+ <% if resource_name.to_sym == goma_config.default_scope -%>
33
+ refute logged_in?
34
+ <% else -%>
35
+ refute <%= resource_name %>_logged_in?
36
+ <% end -%>
37
+ post :create, <%= "#{goma_config.authentication_keys.to_field_name}: @#{resource_name}.#{key}, #{goma_config.password_attribute_name}: 'wrongpass'" %>
38
+ <% if resource_name.to_sym == goma_config.default_scope -%>
39
+ refute logged_in?
40
+ <% else -%>
41
+ refute <%= resource_name %>_logged_in?
42
+ <% end -%>
43
+ assert_template :new
44
+ assert_match /Login failed/, flash[:alert]
45
+ end
46
+
47
+ <% if goma_config.modules.include? :confirmable -%>
48
+ <% if goma_config.allow_unactivated_access_for > 0 -%>
49
+ test "should login unactivated <%= resource_name %> with <%= key %> for <%= goma_config.allow_unactivated_access_for %>" do
50
+ unactivated_<%= resource_name %> = <%= resource_name.pluralize %>(:unactivated_<%= resource_name %>)
51
+ <% if resource_name.to_sym == goma_config.default_scope -%>
52
+ refute logged_in?
53
+ <% else -%>
54
+ refute <%= resource_name %>_logged_in?
55
+ <% end -%>
56
+ post :create, <%= "#{goma_config.authentication_keys.to_field_name}: @#{resource_name}.#{key}, #{goma_config.password_attribute_name}: 'password'" %>
57
+ <% if resource_name.to_sym == goma_config.default_scope -%>
58
+ assert logged_in?
59
+ <% else -%>
60
+ assert <%= resource_name %>_logged_in?
61
+ <% end -%>
62
+ assert_redirected_to root_path
63
+ assert_match /Login successful/, flash[:alert]
64
+ end
65
+
66
+ test "should not login unactivated <%= resource_name %> with <%= key %> <%= goma_config.allow_unactivated_access_for %> passed after registration" do
67
+ unactivated_<%= resource_name %> = <%= resource_name.pluralize %>(:unactivated_<%= resource_name %>)
68
+ unactivated_<%= resource_name %>.update_column(:created_at, <%= expire(goma_config.allow_unactivated_access_for) %>.ago)
69
+ <% if resource_name.to_sym == goma_config.default_scope -%>
70
+ refute logged_in?
71
+ <% else -%>
72
+ refute <%= resource_name %>_logged_in?
73
+ <% end -%>
74
+ post :create, <%= "#{goma_config.authentication_keys.to_field_name}: @#{resource_name}.#{key}, #{goma_config.password_attribute_name}: 'password'" %>
75
+ <% if resource_name.to_sym == goma_config.default_scope -%>
76
+ refute logged_in?
77
+ <% else -%>
78
+ refute <%= resource_name %>_logged_in?
79
+ <% end -%>
80
+ assert_template :new
81
+ assert_match /Not activated/, flash[:alert]
82
+ end
83
+
84
+ <% else -%>
85
+ test "should not login unactivated <%= resource_name %> with <%= key %>" do
86
+ unactivated_<%= resource_name %> = <%= resource_name.pluralize %>(:unactivated_<%= resource_name %>)
87
+ <% if resource_name.to_sym == goma_config.default_scope -%>
88
+ refute logged_in?
89
+ <% else -%>
90
+ refute <%= resource_name %>_logged_in?
91
+ <% end -%>
92
+ post :create, <%= "#{goma_config.authentication_keys.to_field_name}: unactivated_#{resource_name}.#{key}, #{goma_config.password_attribute_name}: 'password'" %>
93
+ <% if resource_name.to_sym == goma_config.default_scope -%>
94
+ refute logged_in?
95
+ <% else -%>
96
+ refute <%= resource_name %>_logged_in?
97
+ <% end -%>
98
+ assert_template :new
99
+ assert_match /Not activated/, flash[:alert]
100
+ end
101
+ <% end # if goma_config.allow_unactivated_access_for > 0 -%>
102
+ <% end # if goma_config.modules.include? :confirmable -%>
103
+ <% end # goma_config.authentication_keys.each do |key| -%>
104
+
105
+ test "should logout <%= resource_name %>" do
106
+ force_login(@<%= resource_name %>)
107
+ <% if resource_name.to_sym == goma_config.default_scope -%>
108
+ assert logged_in?
109
+ <% else -%>
110
+ assert <%= resource_name %>_logged_in?
111
+ <% end -%>
112
+ delete :destroy, id: <%= "@#{resource_name}" %>
113
+ assert_redirected_to root_path
114
+ assert_match /Logged out/, flash[:notice]
115
+ <% if resource_name.to_sym == goma_config.default_scope -%>
116
+ refute logged_in?
117
+ <% else -%>
118
+ refute <%= resource_name %>_logged_in?
119
+ <% end -%>
120
+ end
121
+ end
122
+ <% end -%>
@@ -0,0 +1,47 @@
1
+ require 'test_helper'
2
+
3
+ <% module_namespacing do -%>
4
+ class <%= controller_class_name %>ControllerTest < ActionController::TestCase
5
+ <% if goma_config.unlock_strategies.include? :email -%>
6
+ setup do
7
+ @<%= resource_name %> = <%= resource_name.pluralize %>(:one)
8
+ end
9
+
10
+ test "should get new" do
11
+ get :new
12
+ assert_response :success
13
+ end
14
+
15
+ test "should resend unlock token with <%= goma_config.email_attribute_name %>" do
16
+ @<%= resource_name %>.lock_access!
17
+ <%= goma_config.unlock_token_attribute_name %> = @<%= resource_name %>.<%= goma_config.unlock_token_attribute_name %>
18
+ assert_difference 'ActionMailer::Base.deliveries.size', 1 do
19
+ post :create, <%= goma_config.authentication_keys.to_field_name %>: @<%= resource_name %>.<%= goma_config.email_attribute_name %>
20
+ end
21
+ assert_redirected_to <%= login_url %>
22
+ @<%= resource_name %>.reload
23
+ assert_not_equal <%= goma_config.unlock_token_attribute_name %>, @<%= resource_name %>.<%= goma_config.unlock_token_attribute_name %>
24
+ end
25
+
26
+ test "should unlock <%= resource_name %>" do
27
+ @<%= resource_name %>.lock_access!
28
+ <%= goma_config.unlock_token_to_send_attribute_name %> = @<%= resource_name%>.<%= goma_config.unlock_token_to_send_attribute_name %>
29
+ get :show, id: <%= goma_config.unlock_token_to_send_attribute_name %>
30
+ assert_redirected_to <%= login_url %>
31
+ assert_match /Your account has been unlocked successfully/, flash[:notice]
32
+ @<%= resource_name %>.reload
33
+ refute @<%=resource_name %>.access_locked?
34
+ end
35
+
36
+ test "should not unlock <%= resource_name %> with wrong token" do
37
+ @<%= resource_name %>.lock_access!
38
+ <%= goma_config.unlock_token_to_send_attribute_name %> = @<%= resource_name%>.<%= goma_config.unlock_token_to_send_attribute_name %>
39
+ get :show, id: 'oops'
40
+ assert_template :new
41
+ assert_match /Not found any account by this URL/, flash[:alert]
42
+ @<%= resource_name %>.reload
43
+ assert @<%=resource_name %>.access_locked?
44
+ end
45
+ <% end -%>
46
+ end
47
+ <% end -%>
@@ -0,0 +1,118 @@
1
+ require 'test_helper'
2
+
3
+ <% module_namespacing do -%>
4
+ class <%= controller_class_name %>ControllerTest < ActionController::TestCase
5
+ setup do
6
+ @<%= singular_table_name %> = <%= table_name %>(:one)
7
+ end
8
+
9
+ test "should get index" do
10
+ get :index
11
+ assert_response :success
12
+ assert_not_nil assigns(:<%= table_name %>)
13
+ end
14
+
15
+ test "should get new" do
16
+ get :new
17
+ assert_response :success
18
+ end
19
+
20
+ test "should create <%= singular_table_name %>" do
21
+ assert_difference('<%= class_name %>.count') do
22
+ post :create, <%= "#{singular_table_name}: #{new_resource_attributes.inspect19}" %>
23
+ end
24
+
25
+ assert_redirected_to <%= login_path %>
26
+ end
27
+
28
+ test "should show <%= singular_table_name %>" do
29
+ get :show, id: <%= "@#{singular_table_name}" %>
30
+ assert_response :success
31
+ end
32
+
33
+ test "should not get edit unless logged in" do
34
+ get :edit, id: <%= "@#{singular_table_name}" %>
35
+ assert_redirected_to root_path
36
+ assert_match /Login required/, flash[:alert]
37
+ end
38
+
39
+ test "should get edit" do
40
+ force_login(@user)
41
+ get :edit, id: <%= "@#{singular_table_name}" %>
42
+ assert_response :success
43
+ end
44
+
45
+ test "should not get edit of another user" do
46
+ force_login(@<%= singular_table_name %>)
47
+ get :edit, id: <%= table_name %>(:two)
48
+ assert_redirected_to root_url
49
+ end
50
+
51
+ <% if goma_config.modules.include? :confirmable -%>
52
+ test "should not update <%= goma_config.email_attribute_name %> unless logged in" do
53
+ original_email = @<%= singular_table_name %>.<%= goma_config.email_attribute_name %>
54
+ patch :update, id: <%= "@#{singular_table_name}" %>, <%= "#{singular_table_name}: { #{goma_config.email_attribute_name}: 'new@example.com' }" %>
55
+ assert_redirected_to root_path
56
+ assert_match /Login required/, flash[:alert]
57
+ @<%= singular_table_name %>.reload
58
+ assert_equal original_email, @<%= singular_table_name %>.<%= goma_config.email_attribute_name %>
59
+ assert_equal nil, @<%= singular_table_name %>.<%= goma_config.unconfirmed_email_attribute_name %>
60
+ end
61
+
62
+ test "should confirm <%= goma_config.email_attribute_name %> before update" do
63
+ force_login(@<%= singular_table_name %>)
64
+ original_email = @<%= singular_table_name %>.<%= goma_config.email_attribute_name %>
65
+ assert_difference 'ActionMailer::Base.deliveries.size', 1 do
66
+ patch :update, id: <%= "@#{singular_table_name}" %>, <%= "#{singular_table_name}: { #{goma_config.email_attribute_name}: 'new@example.com' }" %>
67
+ end
68
+ assert_redirected_to <%= singular_table_name %>_path(assigns(:<%= singular_table_name %>))
69
+ assert_match /we need to verify your new email address/, flash[:notice]
70
+ @<%= singular_table_name %>.reload
71
+ assert_equal original_email, @<%= singular_table_name %>.<%= goma_config.email_attribute_name %>
72
+ assert_equal 'new@example.com', @<%= singular_table_name %>.<%= goma_config.unconfirmed_email_attribute_name %>
73
+ end
74
+
75
+ <% auth_keys = goma_config.authentication_keys - [goma_config.email_attribute_name] -%>
76
+ <% else -%>
77
+ <% auth_keys = goma_config.authentication_keys -%>
78
+ <% end -%>
79
+ <% auth_keys.each do |key| -%>
80
+ <% new_value = key == goma_config.email_attribute_name ? 'new@example.com' : "new_#{key}" %>
81
+ test "should not update <%= key %> unless logged in" do
82
+ original = @<%= singular_table_name %>.<%= key %>
83
+ patch :update, id: <%= "@#{singular_table_name}" %>, <%= "#{singular_table_name}: { #{key}: '#{new_value}' }" %>
84
+ assert_redirected_to root_path
85
+ @<%= singular_table_name %>.reload
86
+ assert_equal original, @<%= singular_table_name %>.<%= key %>
87
+ assert_match /Login required/, flash[:alert]
88
+ end
89
+
90
+ test "should update <%= key %>" do
91
+ force_login(@<%= singular_table_name %>)
92
+ patch :update, id: <%= "@#{singular_table_name}" %>, <%= "#{singular_table_name}: { #{key}: '#{new_value}' }" %>
93
+ assert_redirected_to <%= singular_table_name %>_path(assigns(:<%= singular_table_name %>))
94
+ @<%= singular_table_name %>.reload
95
+ assert_equal '<%= new_value %>', @<%= singular_table_name %>.<%= key %>
96
+ end
97
+
98
+ <% end -%>
99
+
100
+ test "should not destroy <%= singular_table_name %> unless logged in" do
101
+ assert_no_difference('<%= class_name %>.count') do
102
+ delete :destroy, id: <%= "@#{singular_table_name}" %>
103
+ end
104
+
105
+ assert_redirected_to root_path
106
+ assert_match /Login required/, flash[:alert]
107
+ end
108
+
109
+ test "should destroy <%= singular_table_name %>" do
110
+ force_login(@<%= singular_table_name %>)
111
+ assert_difference('<%= class_name %>.count', -1) do
112
+ delete :destroy, id: <%= "@#{singular_table_name}" %>
113
+ end
114
+
115
+ assert_redirected_to <%= index_helper %>_path
116
+ end
117
+ end
118
+ <% end -%>
@@ -33,6 +33,6 @@ require 'rails'
33
33
 
34
34
  require 'goma/config'
35
35
  require 'goma/token_generator'
36
- require 'goma/test_helpers' if Rails.env == 'test'
36
+ require 'goma/controller_test_helpers' if Rails.env == 'test'
37
37
 
38
38
  require 'goma/railtie'
@@ -109,7 +109,6 @@ module Goma
109
109
  config_accessor(:locked_at_attribute_name) { :locked_at }
110
110
  config_accessor(:unlock_in) { 1.hour }
111
111
  config_accessor(:unlock_token_attribute_name) { :unlock_token }
112
- config_accessor(:unlock_token_sent_at_attribute_name) { :unlock_token_sent_at }
113
112
  config_accessor(:unlock_token_to_send_attribute_name) { :raw_unlock_token }
114
113
 
115
114
  # Recoverable
@@ -0,0 +1,65 @@
1
+ module Goma
2
+ # Goma::ControllerTestHelpers provides a facility to test controllers in isolation
3
+ # Most of the code was extracted from Devise's Devise::TestHelpers.
4
+ module ControllerTestHelpers
5
+ def self.included(base)
6
+ base.class_eval do
7
+ setup :setup_controller_for_warden, :warden if respond_to?(:setup)
8
+ end
9
+ end
10
+
11
+ # Override process to consider warden.
12
+ def process(*)
13
+ # Make sure we always return @response, a la ActionController::TestCase::Behavior#process, even if warden interrupts
14
+ _catch_warden {super} || @response
15
+ end
16
+
17
+ # We need to setup the environment variables and the response in the controller
18
+ def setup_controller_for_warden
19
+ @request.env['action_controller.instance'] = @controller
20
+ end
21
+
22
+ # Quick access to Warden::Proxy.
23
+ def warden
24
+ @warden ||= begin
25
+ manager = Warden::Manager.new(nil, &Rails.application.config.middleware.detect{|m| m.name == 'Warden::Manager'}.block)
26
+ @request.env['warden'] = Warden::Proxy.new(@request.env, manager)
27
+ end
28
+ end
29
+
30
+ protected
31
+
32
+ # Catch warden continuations and handle like the middleware would.
33
+ # Returns nil when interrupted, otherwise the normal result of the block.
34
+ def _catch_warden(&block)
35
+ result = catch(:warden, &block)
36
+
37
+ if result.is_a?(Hash) && !warden.custom_failure? && !@controller.send(:performed?)
38
+ result[:action] ||= :unauthenticated
39
+
40
+ env = @controller.request.env
41
+ env['PATH_INFO'] = "/#{result[:action]}"
42
+ env['warden.options'] = result
43
+ Warden::Manager._run_callbacks(:before_failure, env, result)
44
+
45
+ status, headers, body = warden.config[:failure_app].call(env).to_a
46
+ @controller.send :render, :status => status, :text => body,
47
+ :content_type => headers['Content-Type'], :location => headers['Location']
48
+
49
+ nil
50
+ else
51
+ result
52
+ end
53
+ end
54
+
55
+ def method_missing(m, *args)
56
+ name = m.to_s
57
+ if name =~ /^(?:(#{Goma.config.scopes.join('|')})_)?(?:login!?|logout|logged_in\?)$/ || name == 'force_login' || name =~ /^current_(#{Goma.config.scopes.join('|')})$/
58
+ @controller.send(m, *args)
59
+ else
60
+ super
61
+ end
62
+ end
63
+ end
64
+ end
65
+