multi_auth 0.1.0 → 0.2.0

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 (34) hide show
  1. data/README +11 -0
  2. data/app/controllers/auth/name_controller.rb +31 -0
  3. data/app/controllers/credentials/email_controller.rb +3 -3
  4. data/app/controllers/credentials/name_controller.rb +93 -0
  5. data/app/controllers/credentials_controller.rb +6 -4
  6. data/app/models/name_credential.rb +63 -0
  7. data/app/models/name_credential_edit_form.rb +40 -0
  8. data/app/models/name_login_form.rb +14 -0
  9. data/app/models/{email_password_edit_form.rb → password_edit_form.rb} +5 -13
  10. data/app/views/auth/name/index.html.erb +89 -0
  11. data/app/views/credentials/index.html.erb +46 -0
  12. data/app/views/credentials/name/delete.html.erb +19 -0
  13. data/app/views/credentials/name/edit_password.html.erb +27 -0
  14. data/app/views/credentials/name/new.html.erb +32 -0
  15. data/config/routes.rb +8 -0
  16. data/db/development.sqlite3 +0 -0
  17. data/db/schema.rb +13 -1
  18. data/db/test.sqlite3 +0 -0
  19. data/generators/multi_auth_migration/templates/migration.rb +13 -0
  20. data/generators/multi_auth_migration/templates/upgrade_migration.rb +19 -0
  21. data/generators/multi_auth_migration/upgrade_multi_auth_tables_generator.rb +11 -0
  22. data/lib/multi_auth.rb +1 -0
  23. data/lib/multi_auth/active_record.rb +1 -0
  24. data/locale/ja/LC_MESSAGES/multi_auth.mo +0 -0
  25. data/po/ja/multi_auth.po +357 -259
  26. data/po/multi_auth.pot +309 -215
  27. data/test/functional/auth/name_controller_test.rb +77 -0
  28. data/test/functional/credentials/email_controller_test.rb +3 -4
  29. data/test/functional/credentials/name_controller_test.rb +292 -0
  30. data/test/unit/name_credential_edit_form_test.rb +151 -0
  31. data/test/unit/name_credential_test.rb +173 -0
  32. data/test/unit/name_login_form_test.rb +68 -0
  33. data/test/unit/{email_password_edit_form_test.rb → password_edit_form_test.rb} +7 -6
  34. metadata +22 -6
@@ -0,0 +1,77 @@
1
+ require 'test_helper'
2
+
3
+ class Auth::NameControllerTest < ActionController::TestCase
4
+ def setup
5
+ @login_form = NameLoginForm.new
6
+ end
7
+
8
+ test "toutes" do
9
+ base = { :controller => "auth/name" }
10
+
11
+ assert_routing("/auth/name", base.merge(:action => "index"))
12
+ assert_routing("/auth/name/login", base.merge(:action => "login"))
13
+ end
14
+
15
+ test "GET index" do
16
+ session_login(users(:yuya))
17
+
18
+ get :index
19
+
20
+ assert_response(:success)
21
+ assert_template("index")
22
+ assert_flash_empty
23
+ assert_not_logged_in
24
+
25
+ assert_equal(NameLoginForm.new.attributes, assigns(:login_form).attributes)
26
+ end
27
+
28
+ test "POST login" do
29
+ session_login(users(:shinya))
30
+
31
+ time = Time.local(2010, 1, 1)
32
+ @login_form.attributes = {
33
+ :name => name_credentials(:nayutaya).name,
34
+ :password => "nayutaya",
35
+ }
36
+ assert_equal(true, @login_form.valid?)
37
+
38
+ Kagemusha::DateTime.at(time) {
39
+ post :login, :login_form => @login_form.attributes
40
+ }
41
+
42
+ assert_response(:redirect)
43
+ assert_redirected_to(:controller => "/auth", :action => "logged_in")
44
+ assert_flash_empty
45
+ assert_logged_in(users(:yuya))
46
+
47
+ assert_equal(
48
+ @login_form.attributes,
49
+ assigns(:login_form).attributes)
50
+
51
+ assert_equal(name_credentials(:nayutaya), assigns(:name_credential))
52
+ assert_equal(time, assigns(:name_credential).loggedin_at)
53
+ end
54
+
55
+ test "POST login, invalid form" do
56
+ session_login(users(:shinya))
57
+
58
+ assert_equal(false, @login_form.valid?)
59
+
60
+ post :login, :login_form => @login_form.attributes
61
+
62
+ assert_response(:success)
63
+ assert_template("index")
64
+ assert_flash_error
65
+ assert_not_logged_in
66
+
67
+ assert_equal(nil, assigns(:login_form).password)
68
+ assert_equal(nil, assigns(:email_credential))
69
+ end
70
+
71
+ test "GET login, abnormal, method not allowed" do
72
+ get :login
73
+
74
+ assert_response(405)
75
+ assert_template(nil)
76
+ end
77
+ end
@@ -1,3 +1,4 @@
1
+ # -*- coding: utf-8 -*-
1
2
 
2
3
  require 'test_helper'
3
4
 
@@ -13,7 +14,7 @@ class Credentials::EmailControllerTest < ActionController::TestCase
13
14
  :password => "password",
14
15
  :password_confirmation => "password")
15
16
 
16
- @password_edit_form = EmailPasswordEditForm.new(
17
+ @password_edit_form = PasswordEditForm.new(
17
18
  :password => "password",
18
19
  :password_confirmation => "password")
19
20
 
@@ -165,9 +166,7 @@ class Credentials::EmailControllerTest < ActionController::TestCase
165
166
 
166
167
  assert_equal(@yuya_gmail, assigns(:email_credential))
167
168
 
168
- assert_equal(
169
- EmailPasswordEditForm.new.attributes,
170
- assigns(:edit_form).attributes)
169
+ assert_equal(PasswordEditForm.new.attributes, assigns(:edit_form).attributes)
171
170
  end
172
171
 
173
172
  test "GET edit_password, abnormal, no login" do
@@ -0,0 +1,292 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'test_helper'
3
+
4
+ class Credentials::NameControllerTest < ActionController::TestCase
5
+ def setup
6
+ @yuya = users(:yuya)
7
+ @nayutaya = name_credentials(:nayutaya)
8
+ @risa_risa = name_credentials(:risa_risa)
9
+
10
+ @edit_form = NameCredentialEditForm.new(
11
+ :name => "name",
12
+ :password => "password",
13
+ :password_confirmation => "password")
14
+
15
+ @password_edit_form = PasswordEditForm.new(
16
+ :password => "password",
17
+ :password_confirmation => "password")
18
+
19
+ session_login(@yuya)
20
+ end
21
+
22
+ test "routes" do
23
+ base = {:controller => "credentials/name"}
24
+
25
+ assert_routing("/credentials/name/new", base.merge(:action => "new"))
26
+ assert_routing("/credentials/name/create", base.merge(:action => "create"))
27
+
28
+ assert_routing("/credential/name/1234567890/edit_password", base.merge(:action => "edit_password", :name_credential_id => "1234567890"))
29
+ assert_routing("/credential/name/1234567890/update_password", base.merge(:action => "update_password", :name_credential_id => "1234567890"))
30
+ assert_routing("/credential/name/1234567890/delete", base.merge(:action => "delete", :name_credential_id => "1234567890"))
31
+ assert_routing("/credential/name/1234567890/destroy", base.merge(:action => "destroy", :name_credential_id => "1234567890"))
32
+ end
33
+
34
+ test "GET new" do
35
+ get :new
36
+
37
+ assert_response(:success)
38
+ assert_template("new")
39
+ assert_flash_empty
40
+ assert_logged_in(@yuya)
41
+
42
+ assert_equal(
43
+ NameCredentialEditForm.new.attributes,
44
+ assigns(:edit_form).attributes)
45
+ end
46
+
47
+ test "GET new, abnormal, no login" do
48
+ session_logout
49
+
50
+ get :new
51
+
52
+ assert_response(:redirect)
53
+ assert_redirected_to(root_path)
54
+ assert_flash_error
55
+ end
56
+
57
+ test "POST create" do
58
+ assert_equal(true, @edit_form.valid?)
59
+
60
+ assert_difference("NameCredential.count", +1) {
61
+ post :create, :edit_form => @edit_form.attributes
62
+ }
63
+
64
+ assert_response(:redirect)
65
+ assert_redirected_to(:controller => "/credentials", :action => "index")
66
+ assert_flash_notice
67
+ assert_logged_in(@yuya)
68
+ assert_equal(@edit_form.attributes, assigns(:edit_form).attributes)
69
+ assigns(:name_credential).reload
70
+ assert_equal(@yuya.id, assigns(:name_credential).user_id)
71
+ assert_equal(@edit_form.name, assigns(:name_credential).name)
72
+ assert_equal(true, NameCredential.compare_hashed_password(@edit_form.password, assigns(:name_credential).hashed_password))
73
+ end
74
+
75
+ test "POST create, invalid form" do
76
+ @edit_form.name = nil
77
+ assert_equal(false, @edit_form.valid?)
78
+
79
+ assert_difference("NameCredential.count", 0) {
80
+ post :create, :edit_form => @edit_form.attributes
81
+ }
82
+
83
+ assert_response(:success)
84
+ assert_template("new")
85
+ assert_flash_error
86
+
87
+ assert_equal(nil, assigns(:edit_form).password)
88
+ assert_equal(nil, assigns(:edit_form).password_confirmation)
89
+ end
90
+
91
+ test "GET create, abnormal, method not allowed" do
92
+ get :create
93
+
94
+ assert_response(405)
95
+ assert_template(nil)
96
+ end
97
+
98
+ test "POST create, abnormal, no login" do
99
+ session_logout
100
+
101
+ post :create
102
+
103
+ assert_response(:redirect)
104
+ assert_redirected_to(root_path)
105
+ assert_flash_error
106
+ end
107
+
108
+ test "GET edit_password" do
109
+ get :edit_password, :name_credential_id => @nayutaya.id
110
+
111
+ assert_response(:success)
112
+ assert_template("edit_password")
113
+ assert_flash_empty
114
+ assert_logged_in(@yuya)
115
+
116
+ assert_equal(@nayutaya, assigns(:name_credential))
117
+
118
+ assert_equal(PasswordEditForm.new.attributes, assigns(:edit_form).attributes)
119
+ end
120
+
121
+ test "GET edit_password, abnormal, no login" do
122
+ session_logout
123
+
124
+ get :edit_password, :name_credential_id => @nayutaya.id
125
+
126
+ assert_response(:redirect)
127
+ assert_redirected_to(root_path)
128
+ assert_flash_error
129
+ end
130
+
131
+ test "GET edit_password, abnormal, invalid name credential id" do
132
+ get :edit_password, :name_credential_id => "0"
133
+
134
+ assert_response(:redirect)
135
+ assert_redirected_to(root_path)
136
+ assert_flash_error
137
+ end
138
+
139
+ test "GET edit_password, abnormal, other's name credential" do
140
+ get :edit_password, :name_credential_id => @risa_risa.id
141
+
142
+ assert_response(:redirect)
143
+ assert_redirected_to(root_path)
144
+ assert_flash_error
145
+ end
146
+
147
+ test "POST update_password" do
148
+ assert_equal(true, @password_edit_form.valid?)
149
+
150
+ post :update_password, :name_credential_id => @nayutaya.id, :edit_form => @password_edit_form.attributes
151
+
152
+ assert_response(:redirect)
153
+ assert_redirected_to(:controller => "/credentials", :action => "index")
154
+ assert_flash_notice
155
+ assert_logged_in(@yuya)
156
+
157
+ assert_equal(@nayutaya, assigns(:name_credential))
158
+
159
+ assert_equal(
160
+ @password_edit_form.attributes,
161
+ assigns(:edit_form).attributes)
162
+
163
+ assigns(:name_credential).reload
164
+ assert_equal(
165
+ true,
166
+ NameCredential.compare_hashed_password(@password_edit_form.password, assigns(:name_credential).hashed_password))
167
+ end
168
+
169
+ test "POST update_password, invalid form" do
170
+ @password_edit_form.password = "x"
171
+ assert_equal(false, @password_edit_form.valid?)
172
+
173
+ post :update_password, :name_credential_id => @nayutaya.id, :edit_form => @password_edit_form.attributes
174
+
175
+ assert_response(:success)
176
+ assert_template("edit_password")
177
+ assert_flash_error
178
+
179
+ assert_equal(nil, assigns(:edit_form).password)
180
+ assert_equal(nil, assigns(:edit_form).password_confirmation)
181
+ end
182
+
183
+ test "GET update_password, abnormal, method not allowed" do
184
+ get :update_password, :name_credential_id => @nayutaya.id
185
+
186
+ assert_response(405)
187
+ assert_template(nil)
188
+ end
189
+
190
+ test "POST update_password, abnormal, no login" do
191
+ session_logout
192
+
193
+ post :update_password, :name_credential_id => @nayutaya.id
194
+
195
+ assert_response(:redirect)
196
+ assert_redirected_to(root_path)
197
+ assert_flash_error
198
+ end
199
+
200
+ test "POST update_password, abnormal, invalid name credential id" do
201
+ post :update_password, :name_credential_id => "0"
202
+
203
+ assert_response(:redirect)
204
+ assert_redirected_to(root_path)
205
+ assert_flash_error
206
+ end
207
+
208
+ test "GET delete" do
209
+ get :delete, :name_credential_id => @nayutaya.id
210
+
211
+ assert_response(:success)
212
+ assert_template("delete")
213
+ assert_flash_empty
214
+ assert_logged_in(@yuya)
215
+
216
+ assert_equal(@nayutaya, assigns(:name_credential))
217
+ end
218
+
219
+ test "GET delete, abnormal, no login" do
220
+ session_logout
221
+
222
+ get :delete, :name_credential_id => @nayutaya.id
223
+
224
+ assert_response(:redirect)
225
+ assert_redirected_to(root_path)
226
+ assert_flash_error
227
+ end
228
+
229
+ test "GET delete, abnormal, invalid name credential id" do
230
+ get :delete, :name_credential_id => "0"
231
+
232
+ assert_response(:redirect)
233
+ assert_redirected_to(root_path)
234
+ assert_flash_error
235
+ end
236
+
237
+ test "GET delete, abnormal, other's name credential" do
238
+ get :delete, :name_credential_id => @risa_risa.id
239
+
240
+ assert_response(:redirect)
241
+ assert_redirected_to(root_path)
242
+ assert_flash_error
243
+ end
244
+
245
+ test "POST destroy" do
246
+ assert_difference("NameCredential.count", -1) {
247
+ post :destroy, :name_credential_id => @nayutaya.id
248
+ }
249
+
250
+ assert_response(:redirect)
251
+ assert_redirected_to(:controller => "/credentials", :action => "index")
252
+ assert_flash_notice
253
+ assert_logged_in(@yuya)
254
+
255
+ assert_equal(@nayutaya, assigns(:name_credential))
256
+
257
+ assert_equal(nil, NameCredential.find_by_id(@nayutaya.id))
258
+ end
259
+
260
+ test "GET destroy, abnormal, method not allowed" do
261
+ get :destroy, :name_credential_id => @nayutaya.id
262
+
263
+ assert_response(405)
264
+ assert_template(nil)
265
+ end
266
+
267
+ test "POST destroy, abnormal, no login" do
268
+ session_logout
269
+
270
+ post :destroy, :name_credential_id => @nayutaya.id
271
+
272
+ assert_response(:redirect)
273
+ assert_redirected_to(root_path)
274
+ assert_flash_error
275
+ end
276
+
277
+ test "POST destroy, abnormal, invalid name credential id" do
278
+ post :destroy, :name_credential_id => "0"
279
+
280
+ assert_response(:redirect)
281
+ assert_redirected_to(root_path)
282
+ assert_flash_error
283
+ end
284
+
285
+ test "POST destroy, abnormal, other's name credential" do
286
+ post :destroy, :name_credential_id => @risa_risa.id
287
+
288
+ assert_response(:redirect)
289
+ assert_redirected_to(root_path)
290
+ assert_flash_error
291
+ end
292
+ end
@@ -0,0 +1,151 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'test_helper'
3
+
4
+ class NameCredentialEditFormTest < ActiveSupport::TestCase
5
+ def setup
6
+ @klass = NameCredentialEditForm
7
+ @form = @klass.new
8
+ @basic = @klass.new(:name => "name",
9
+ :password => "password", :password_confirmation => "password")
10
+ end
11
+
12
+ #
13
+ # 基底クラス
14
+ #
15
+
16
+ test "superclass" do
17
+ assert_equal(ActiveForm, @klass.superclass)
18
+ end
19
+
20
+ #
21
+ # カラム
22
+ #
23
+
24
+ test "columns" do
25
+ [
26
+ [:name, nil, "str", "str"],
27
+ [:password, nil, "str", "str"],
28
+ [:password_confirmation, nil, "str", "str"],
29
+ ].each { |name, default, set_value, get_value|
30
+ form = @klass.new
31
+ assert_equal(default, form.__send__(name))
32
+ form.__send__("#{name}=", set_value)
33
+ assert_equal(get_value, form.__send__(name))
34
+ }
35
+ end
36
+
37
+ #
38
+ # 検証
39
+ #
40
+
41
+ test "basic is valid" do
42
+ assert_equal(true, @basic.valid?)
43
+ end
44
+
45
+ test "validates_presence_of :name" do
46
+ @basic.name = nil
47
+ assert_equal(false, @basic.valid?)
48
+ end
49
+
50
+ test "validates_presence_of :password" do
51
+ @basic.password = nil
52
+ assert_equal(false, @basic.valid?)
53
+ end
54
+
55
+ test "validates_presence_of :password_confirmation" do
56
+ @basic.password_confirmation = nil
57
+ assert_equal(false, @basic.valid?)
58
+ end
59
+
60
+ test "validates_length_of :name" do
61
+ [
62
+ ["a" * 13, 13, true ],
63
+ ["a" * 200, 200, true ],
64
+ ["a" * 201, 201, false],
65
+ ].each { |value, length, expected|
66
+ assert_equal(length, value.size)
67
+ @basic.name = value
68
+ assert_equal(expected, @basic.valid?)
69
+ }
70
+ end
71
+
72
+ test "validates_length_of :password" do
73
+ [
74
+ ["a" * 3, false],
75
+ ["a" * 4, true ],
76
+ ["a" * 20, true ],
77
+ ["a" * 21, false],
78
+ ].each { |value, expected|
79
+ @basic.password = value
80
+ @basic.password_confirmation = value
81
+ assert_equal(expected, @basic.valid?)
82
+ }
83
+ end
84
+
85
+ test "validates_format_of :password" do
86
+ valid_chars = (0x21..0x7E).map { |c| c.chr }.join
87
+
88
+ [
89
+ [valid_chars.slice!(0, 20), true ],
90
+ [valid_chars.slice!(0, 20), true ],
91
+ [valid_chars.slice!(0, 20), true ],
92
+ [valid_chars.slice!(0, 20), true ],
93
+ [valid_chars.slice!(0, 20), true ],
94
+ ["aaaa", true ],
95
+ ["aaa ", false],
96
+ ["日本語", false],
97
+ ].each { |value, expected|
98
+ @basic.password = value
99
+ @basic.password_confirmation = value
100
+ assert_equal(expected, @basic.valid?)
101
+ }
102
+
103
+ assert_equal(true, valid_chars.empty?)
104
+ end
105
+
106
+ test "validates_each, password" do
107
+ @basic.password = "aaaa"
108
+ @basic.password_confirmation = "aaaa"
109
+ assert_equal(true, @basic.valid?)
110
+
111
+ @basic.password = "aaaa"
112
+ @basic.password_confirmation = "AAAA"
113
+ assert_equal(false, @basic.valid?)
114
+ end
115
+ #
116
+ # インスタンスメソッド
117
+ #
118
+
119
+ test "masked_password" do
120
+ @form.password = nil
121
+ assert_equal("", @form.masked_password)
122
+
123
+ @form.password = "a"
124
+ assert_equal("*", @form.masked_password)
125
+
126
+ @form.password = "abc"
127
+ assert_equal("***", @form.masked_password)
128
+ end
129
+
130
+ test "to_name_credential_hash, empty" do
131
+ hash = @form.to_name_credential_hash
132
+ assert_equal(
133
+ [:name, :hashed_password].map(&:to_s).sort,
134
+ hash.keys.map(&:to_s).sort)
135
+ assert_equal(nil, hash[:name])
136
+ assert_equal(true, NameCredential.compare_hashed_password("", hash[:hashed_password]))
137
+ end
138
+
139
+ test "to_name_credential_hash, full" do
140
+ @form.attributes = {
141
+ :name => "foo@example.com",
142
+ :password => "foo",
143
+ }
144
+ hash = @form.to_name_credential_hash
145
+ assert_equal(
146
+ [:name, :hashed_password].map(&:to_s).sort,
147
+ hash.keys.map(&:to_s).sort)
148
+ assert_equal(@form.name, hash[:name])
149
+ assert_equal(true, NameCredential.compare_hashed_password(@form.password, hash[:hashed_password]))
150
+ end
151
+ end