okkez-multi_auth 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README +36 -0
- data/app/controllers/application_controller.rb +11 -0
- data/app/controllers/auth/email_controller.rb +34 -0
- data/app/controllers/auth/open_id_controller.rb +43 -0
- data/app/controllers/auth_controller.rb +24 -0
- data/app/controllers/credentials/email_controller.rb +156 -0
- data/app/controllers/credentials/open_id_controller.rb +85 -0
- data/app/controllers/credentials_controller.rb +14 -0
- data/app/controllers/signup/email_controller.rb +132 -0
- data/app/controllers/signup/open_id_controller.rb +62 -0
- data/app/controllers/signup_controller.rb +8 -0
- data/app/helpers/application_helper.rb +5 -0
- data/app/models/activation_mailer.rb +114 -0
- data/app/models/email_credential.rb +89 -0
- data/app/models/email_credential_edit_form.rb +52 -0
- data/app/models/email_login_form.rb +24 -0
- data/app/models/email_password_edit_form.rb +36 -0
- data/app/models/open_id_credential.rb +33 -0
- data/app/models/open_id_login_form.rb +17 -0
- data/app/models/session.rb +19 -0
- data/app/models/user.rb +37 -0
- data/app/views/activation_mailer/complete_for_credential.erb +4 -0
- data/app/views/activation_mailer/complete_for_notice.erb +4 -0
- data/app/views/activation_mailer/complete_for_signup.erb +4 -0
- data/app/views/activation_mailer/request_for_credential.erb +11 -0
- data/app/views/activation_mailer/request_for_notice.erb +11 -0
- data/app/views/activation_mailer/request_for_signup.erb +11 -0
- data/app/views/auth/email/index.html.erb +90 -0
- data/app/views/auth/logged_in.html.erb +21 -0
- data/app/views/auth/logged_out.html.erb +21 -0
- data/app/views/auth/open_id/index.html.erb +16 -0
- data/app/views/credentials/email/activated.html.erb +4 -0
- data/app/views/credentials/email/activation.html.erb +15 -0
- data/app/views/credentials/email/created.html.erb +15 -0
- data/app/views/credentials/email/delete.html.erb +20 -0
- data/app/views/credentials/email/edit_password.html.erb +31 -0
- data/app/views/credentials/email/new.html.erb +36 -0
- data/app/views/credentials/index.html.erb +88 -0
- data/app/views/credentials/open_id/delete.html.erb +20 -0
- data/app/views/credentials/open_id/new.html.erb +26 -0
- data/app/views/signup/email/_progress.html.erb +14 -0
- data/app/views/signup/email/activated.html.erb +9 -0
- data/app/views/signup/email/activation.html.erb +27 -0
- data/app/views/signup/email/created.html.erb +14 -0
- data/app/views/signup/email/index.html.erb +34 -0
- data/app/views/signup/email/validated.html.erb +21 -0
- data/app/views/signup/index.html.erb +51 -0
- data/app/views/signup/open_id/authenticated.html.erb +15 -0
- data/app/views/signup/open_id/created.html.erb +6 -0
- data/app/views/signup/open_id/index.html.erb +16 -0
- data/config/boot.rb +110 -0
- data/config/database.yml +22 -0
- data/config/database.yml.sqlite3 +22 -0
- data/config/environment.rb +62 -0
- data/config/routes.rb +51 -0
- data/config/smtp.yml.example +8 -0
- data/db/development.sqlite3 +0 -0
- data/db/schema.rb +88 -0
- data/db/test.sqlite3 +0 -0
- data/lib/action_mailer_util.rb +15 -0
- data/lib/multi_auth.rb +64 -0
- data/lib/multi_auth_helper.rb +98 -0
- data/lib/notice_formatter.rb +106 -0
- data/lib/open_id_authentication/result.rb +12 -0
- data/lib/token_util.rb +18 -0
- data/public/404.html +92 -0
- data/public/422.html +91 -0
- data/public/500.html +92 -0
- data/public/503.html +92 -0
- data/public/favicon.ico +0 -0
- data/public/images/battery/cell.png +0 -0
- data/public/images/battery/level-green.png +0 -0
- data/public/images/battery/level-orange.png +0 -0
- data/public/images/battery/level-red.png +0 -0
- data/public/images/battery/level-yellow.png +0 -0
- data/public/images/battery/style.html +82 -0
- data/public/images/favicons/livedoor.png +0 -0
- data/public/images/favicons/mixi.png +0 -0
- data/public/images/favicons/yahoo.png +0 -0
- data/public/images/h1-back.png +0 -0
- data/public/images/icons/fam/add.png +0 -0
- data/public/images/icons/fam/bin.png +0 -0
- data/public/images/icons/fam/bomb.png +0 -0
- data/public/images/icons/fam/cog.png +0 -0
- data/public/images/icons/fam/delete.png +0 -0
- data/public/images/icons/fam/email-with-desc.png +0 -0
- data/public/images/icons/fam/email.png +0 -0
- data/public/images/icons/fam/feed.png +0 -0
- data/public/images/icons/fam/help.png +0 -0
- data/public/images/icons/fam/key-with-desc.png +0 -0
- data/public/images/icons/fam/key.png +0 -0
- data/public/images/icons/fam/lightning.png +0 -0
- data/public/images/icons/fam/plugin.png +0 -0
- data/public/images/icons/fam/stop.png +0 -0
- data/public/images/icons/fam/table_save.png +0 -0
- data/public/images/icons/fam/tick.png +0 -0
- data/public/images/icons/fam/user.png +0 -0
- data/public/images/icons/fam/vcard.png +0 -0
- data/public/images/icons/openid-with-desc.png +0 -0
- data/public/images/icons/openid.png +0 -0
- data/public/images/logo-back.png +0 -0
- data/public/images/logo.png +0 -0
- data/public/images/side-column-back.png +0 -0
- data/public/javascripts/application.js +2 -0
- data/public/javascripts/controls.js +963 -0
- data/public/javascripts/dragdrop.js +973 -0
- data/public/javascripts/effects.js +1128 -0
- data/public/javascripts/prototype.js +4320 -0
- data/public/robots.txt +5 -0
- data/public/stylesheets/application.css +365 -0
- data/public/stylesheets/auth.css +22 -0
- data/public/stylesheets/home.css +114 -0
- data/rails/init.rb +24 -0
- data/test/functional/auth/email_controller_test.rb +102 -0
- data/test/functional/auth/open_id_controller_test.rb +76 -0
- data/test/functional/auth_controller_test.rb +74 -0
- data/test/functional/credentials/email_controller_test.rb +488 -0
- data/test/functional/credentials/open_id_controller_test.rb +308 -0
- data/test/functional/credentials_controller_test.rb +49 -0
- data/test/functional/signup/email_controller_test.rb +369 -0
- data/test/functional/signup/open_id_controller_test.rb +44 -0
- data/test/functional/signup_controller_test.rb +17 -0
- data/test/performance/browsing_test.rb +9 -0
- data/test/test_helper.rb +82 -0
- data/test/unit/action_mailer_util_test.rb +63 -0
- data/test/unit/activation_mailer_test.rb +181 -0
- data/test/unit/email_credential_edit_form_test.rb +173 -0
- data/test/unit/email_credential_test.rb +324 -0
- data/test/unit/email_login_form_test.rb +76 -0
- data/test/unit/email_password_edit_form_test.rb +117 -0
- data/test/unit/helpers/auth_helper_test.rb +4 -0
- data/test/unit/helpers/credentials/email_helper_test.rb +4 -0
- data/test/unit/helpers/credentials/open_id_helper_test.rb +4 -0
- data/test/unit/helpers/credentials_helper_test.rb +4 -0
- data/test/unit/helpers/email_auth_helper_test.rb +4 -0
- data/test/unit/helpers/email_signup_helper_test.rb +4 -0
- data/test/unit/helpers/open_id_auth_helper_test.rb +4 -0
- data/test/unit/helpers/open_id_signup_helper_test.rb +4 -0
- data/test/unit/helpers/password_auth_helper_test.rb +4 -0
- data/test/unit/helpers/password_signup_helper_test.rb +4 -0
- data/test/unit/helpers/signup_helper_test.rb +4 -0
- data/test/unit/notice_formatter_test.rb +153 -0
- data/test/unit/open_id_credential_test.rb +108 -0
- data/test/unit/open_id_login_form_test.rb +57 -0
- data/test/unit/session_test.rb +53 -0
- data/test/unit/token_util_test.rb +51 -0
- data/test/unit/user_test.rb +177 -0
- metadata +220 -0
@@ -0,0 +1,76 @@
|
|
1
|
+
|
2
|
+
require 'test_helper'
|
3
|
+
|
4
|
+
class EmailLoginFormTest < ActiveSupport::TestCase
|
5
|
+
def setup
|
6
|
+
@klass = EmailLoginForm
|
7
|
+
@form = @klass.new
|
8
|
+
@basic = @klass.new(
|
9
|
+
:email => "email@example.jp",
|
10
|
+
:password => "password")
|
11
|
+
end
|
12
|
+
|
13
|
+
#
|
14
|
+
# 基底クラス
|
15
|
+
#
|
16
|
+
|
17
|
+
test "superclass" do
|
18
|
+
assert_equal(ActiveForm, @klass.superclass)
|
19
|
+
end
|
20
|
+
|
21
|
+
#
|
22
|
+
# カラム
|
23
|
+
#
|
24
|
+
|
25
|
+
test "columns" do
|
26
|
+
[
|
27
|
+
[:email, nil, "str", "str"],
|
28
|
+
[:password, 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 :email" do
|
46
|
+
@basic.email = 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
|
+
#
|
56
|
+
# インスタンスメソッド
|
57
|
+
#
|
58
|
+
|
59
|
+
test "authenticate, success" do
|
60
|
+
@form.email = email_credentials(:yuya_gmail).email
|
61
|
+
@form.password = "yuya_gmail"
|
62
|
+
assert_equal(
|
63
|
+
email_credentials(:yuya_gmail),
|
64
|
+
@form.authenticate)
|
65
|
+
end
|
66
|
+
|
67
|
+
test "authenticate, not activated" do
|
68
|
+
@form.email = email_credentials(:yuya_nayutaya).email
|
69
|
+
@form.password = "yuya_nayutaya"
|
70
|
+
assert_equal(nil, @form.authenticate)
|
71
|
+
end
|
72
|
+
|
73
|
+
test "authenticate, empty" do
|
74
|
+
assert_equal(nil, @form.authenticate)
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,117 @@
|
|
1
|
+
|
2
|
+
require 'test_helper'
|
3
|
+
|
4
|
+
class EmailPasswordEditFormTest < ActiveSupport::TestCase
|
5
|
+
def setup
|
6
|
+
@klass = EmailPasswordEditForm
|
7
|
+
@form = @klass.new
|
8
|
+
@basic = @klass.new(
|
9
|
+
:password => "password",
|
10
|
+
:password_confirmation => "password")
|
11
|
+
end
|
12
|
+
|
13
|
+
#
|
14
|
+
# 基底クラス
|
15
|
+
#
|
16
|
+
|
17
|
+
test "superclass" do
|
18
|
+
assert_equal(ActiveForm, @klass.superclass)
|
19
|
+
end
|
20
|
+
|
21
|
+
#
|
22
|
+
# カラム
|
23
|
+
#
|
24
|
+
|
25
|
+
test "columns" do
|
26
|
+
[
|
27
|
+
[:password, nil, "1", "1"],
|
28
|
+
[:password_confirmation, nil, "1", "1"],
|
29
|
+
].each { |name, default, set_value, get_value|
|
30
|
+
form = @klass.new
|
31
|
+
assert_equal(default, form.__send__(name), name)
|
32
|
+
form.__send__("#{name}=", set_value)
|
33
|
+
assert_equal(get_value, form.__send__(name), 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 :password" do
|
46
|
+
@basic.password = nil
|
47
|
+
assert_equal(false, @basic.valid?)
|
48
|
+
end
|
49
|
+
|
50
|
+
test "validates_presence_of :password_confirmation" do
|
51
|
+
@basic.password_confirmation = nil
|
52
|
+
assert_equal(false, @basic.valid?)
|
53
|
+
end
|
54
|
+
|
55
|
+
test "validates_length_of :password" do
|
56
|
+
[
|
57
|
+
["a" * 3, false],
|
58
|
+
["a" * 4, true ],
|
59
|
+
["a" * 20, true ],
|
60
|
+
["a" * 21, false],
|
61
|
+
].each { |value, expected|
|
62
|
+
@basic.password = value
|
63
|
+
@basic.password_confirmation = value
|
64
|
+
assert_equal(expected, @basic.valid?, value)
|
65
|
+
}
|
66
|
+
end
|
67
|
+
|
68
|
+
test "validates_format_of :password" do
|
69
|
+
valid_chars = (0x21..0x7E).map { |c| c.chr }.join
|
70
|
+
|
71
|
+
[
|
72
|
+
[valid_chars.slice!(0, 20), true ],
|
73
|
+
[valid_chars.slice!(0, 20), true ],
|
74
|
+
[valid_chars.slice!(0, 20), true ],
|
75
|
+
[valid_chars.slice!(0, 20), true ],
|
76
|
+
[valid_chars.slice!(0, 20), true ],
|
77
|
+
["aaaa", true ],
|
78
|
+
["aaa ", false],
|
79
|
+
["日本語", false],
|
80
|
+
].each { |value, expected|
|
81
|
+
@basic.password = value
|
82
|
+
@basic.password_confirmation = value
|
83
|
+
assert_equal(expected, @basic.valid?, value)
|
84
|
+
}
|
85
|
+
|
86
|
+
assert_equal(true, valid_chars.empty?)
|
87
|
+
end
|
88
|
+
|
89
|
+
test "validates_each, password" do
|
90
|
+
@basic.password = "aaaa"
|
91
|
+
@basic.password_confirmation = "aaaa"
|
92
|
+
assert_equal(true, @basic.valid?)
|
93
|
+
|
94
|
+
@basic.password = "aaaa"
|
95
|
+
@basic.password_confirmation = "AAAA"
|
96
|
+
assert_equal(false, @basic.valid?)
|
97
|
+
end
|
98
|
+
|
99
|
+
#
|
100
|
+
# インスタンスメソッド
|
101
|
+
#
|
102
|
+
|
103
|
+
test "to_email_credential_hash, empty" do
|
104
|
+
hash = @form.to_email_credential_hash
|
105
|
+
assert_equal([:hashed_password], hash.keys)
|
106
|
+
assert_equal(true, EmailCredential.compare_hashed_password("", hash[:hashed_password]))
|
107
|
+
end
|
108
|
+
|
109
|
+
test "to_email_credential_hash, full" do
|
110
|
+
@form.attributes = {
|
111
|
+
:password => "foo",
|
112
|
+
}
|
113
|
+
hash = @form.to_email_credential_hash
|
114
|
+
assert_equal([:hashed_password], hash.keys)
|
115
|
+
assert_equal(true, EmailCredential.compare_hashed_password(@form.password, hash[:hashed_password]))
|
116
|
+
end
|
117
|
+
end
|
@@ -0,0 +1,153 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
require 'test_helper'
|
4
|
+
|
5
|
+
class NoticeFormatterTest < ActiveSupport::TestCase
|
6
|
+
def setup
|
7
|
+
@module = NoticeFormatter
|
8
|
+
end
|
9
|
+
|
10
|
+
test "replace_keywords, empty" do
|
11
|
+
assert_equal("", @module.replace_keywords("", {}))
|
12
|
+
end
|
13
|
+
|
14
|
+
test "replace_keywords" do
|
15
|
+
assert_equal(
|
16
|
+
"A",
|
17
|
+
@module.replace_keywords("{a}", "a" => "A"))
|
18
|
+
assert_equal(
|
19
|
+
"A,B",
|
20
|
+
@module.replace_keywords("{a},{b}", "a" => "A", "b" => "B"))
|
21
|
+
assert_equal(
|
22
|
+
"A,B,A,B",
|
23
|
+
@module.replace_keywords("{a},{b},{a},{b}", "a" => "A", "b" => "B"))
|
24
|
+
end
|
25
|
+
|
26
|
+
test "add_namespace" do
|
27
|
+
expected = {
|
28
|
+
"name:a" => "b",
|
29
|
+
"name:c" => "d",
|
30
|
+
}
|
31
|
+
assert_equal(expected, @module.add_namespace("name", {"a" => "b", "c" => "d"}))
|
32
|
+
end
|
33
|
+
|
34
|
+
test "format_integer_value" do
|
35
|
+
assert_equal("1", @module.format_integer_value(1))
|
36
|
+
assert_equal("-", @module.format_integer_value(nil))
|
37
|
+
end
|
38
|
+
|
39
|
+
test "format_integer_json_value" do
|
40
|
+
assert_equal("1", @module.format_integer_json_value(1))
|
41
|
+
assert_equal("null", @module.format_integer_json_value(nil))
|
42
|
+
end
|
43
|
+
|
44
|
+
test "format_string_value" do
|
45
|
+
assert_equal("a", @module.format_string_value("a"))
|
46
|
+
assert_equal("あ", @module.format_string_value("あ"))
|
47
|
+
assert_equal("-", @module.format_string_value(""))
|
48
|
+
assert_equal("-", @module.format_string_value(nil))
|
49
|
+
end
|
50
|
+
|
51
|
+
test "format_string_json_value" do
|
52
|
+
assert_equal('"a"', @module.format_string_json_value("a"))
|
53
|
+
assert_equal('"\\u3042"', @module.format_string_json_value("あ"))
|
54
|
+
assert_equal("null", @module.format_string_json_value(""))
|
55
|
+
assert_equal("null", @module.format_string_json_value(nil))
|
56
|
+
end
|
57
|
+
|
58
|
+
test "format_part_of_date" do
|
59
|
+
expected = {
|
60
|
+
"date" => "2009-01-02",
|
61
|
+
"date:json" => '"2009-01-02"',
|
62
|
+
"date:ja" => "2009年01月02日",
|
63
|
+
"yyyy" => "2009",
|
64
|
+
"mm" => "01",
|
65
|
+
"dd" => "02",
|
66
|
+
}
|
67
|
+
assert_equal(expected, @module.format_part_of_date(Date.new(2009, 1, 2)))
|
68
|
+
end
|
69
|
+
|
70
|
+
test "format_part_of_date, nil" do
|
71
|
+
expected = {
|
72
|
+
"date" => "-",
|
73
|
+
"date:json" => "null",
|
74
|
+
"date:ja" => "-",
|
75
|
+
"yyyy" => "-",
|
76
|
+
"mm" => "-",
|
77
|
+
"dd" => "-",
|
78
|
+
}
|
79
|
+
assert_equal(expected, @module.format_part_of_date(nil))
|
80
|
+
end
|
81
|
+
|
82
|
+
test "format_part_of_time" do
|
83
|
+
expected = {
|
84
|
+
"time" => "01:02:03",
|
85
|
+
"time:json" => '"01:02:03"',
|
86
|
+
"time:ja" => "01時02分03秒",
|
87
|
+
"hh" => "01",
|
88
|
+
"nn" => "02",
|
89
|
+
"ss" => "03",
|
90
|
+
}
|
91
|
+
assert_equal(expected, @module.format_part_of_time(Time.local(2009, 12, 31, 1, 2, 3)))
|
92
|
+
end
|
93
|
+
|
94
|
+
test "format_part_of_time, nil" do
|
95
|
+
expected = {
|
96
|
+
"time" => "-",
|
97
|
+
"time:json" => "null",
|
98
|
+
"time:ja" => "-",
|
99
|
+
"hh" => "-",
|
100
|
+
"nn" => "-",
|
101
|
+
"ss" => "-",
|
102
|
+
}
|
103
|
+
assert_equal(expected, @module.format_part_of_time(nil))
|
104
|
+
end
|
105
|
+
|
106
|
+
test "format_part_of_datetime" do
|
107
|
+
datetime = Time.local(2009, 12, 31, 12, 34, 56)
|
108
|
+
expected = {
|
109
|
+
"datetime" => "2009-12-31 12:34:56",
|
110
|
+
"datetime:json" => '"2009-12-31 12:34:56"',
|
111
|
+
"datetime:ja" => "2009年12月31日 12時34分56秒",
|
112
|
+
}
|
113
|
+
expected.merge!(@module.format_part_of_date(datetime))
|
114
|
+
expected.merge!(@module.format_part_of_time(datetime))
|
115
|
+
assert_equal(expected, @module.format_part_of_datetime(datetime))
|
116
|
+
end
|
117
|
+
|
118
|
+
test "format_part_of_datetime, nil" do
|
119
|
+
expected = {
|
120
|
+
"datetime" => "-",
|
121
|
+
"datetime:json" => "null",
|
122
|
+
"datetime:ja" => "-",
|
123
|
+
}
|
124
|
+
expected.merge!(@module.format_part_of_date(nil))
|
125
|
+
expected.merge!(@module.format_part_of_time(nil))
|
126
|
+
assert_equal(expected, @module.format_part_of_datetime(nil))
|
127
|
+
end
|
128
|
+
|
129
|
+
test "format_part_of_user" do
|
130
|
+
expected = {
|
131
|
+
"user:token" => "0" * User::TokenLength,
|
132
|
+
"user:token:json" => '"' + "0" * User::TokenLength + '"',
|
133
|
+
"user:nickname" => "nickname",
|
134
|
+
"user:nickname:json" => '"nickname"',
|
135
|
+
}
|
136
|
+
user = User.new(
|
137
|
+
:user_token => "0" * User::TokenLength,
|
138
|
+
:nickname => "nickname")
|
139
|
+
assert_equal(expected, @module.format_part_of_user(user))
|
140
|
+
end
|
141
|
+
|
142
|
+
test "format_part_of_user, nil" do
|
143
|
+
expected = {
|
144
|
+
"user:token" => "-",
|
145
|
+
"user:token:json" => "null",
|
146
|
+
"user:nickname" => "-",
|
147
|
+
"user:nickname:json" => "null",
|
148
|
+
}
|
149
|
+
assert_equal(expected, @module.format_part_of_user(User.new))
|
150
|
+
assert_equal(expected, @module.format_part_of_user(nil))
|
151
|
+
end
|
152
|
+
|
153
|
+
end
|
@@ -0,0 +1,108 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
require 'test_helper'
|
4
|
+
|
5
|
+
class OpenIdCredentialTest < ActiveSupport::TestCase
|
6
|
+
def setup
|
7
|
+
@klass = OpenIdCredential
|
8
|
+
@basic = @klass.new(
|
9
|
+
:user_id => users(:yuya).id,
|
10
|
+
:identity_url => "http://example.jp/identity_url")
|
11
|
+
|
12
|
+
@yuya_livedoor = open_id_credentials(:yuya_livedoor)
|
13
|
+
@shinya_example = open_id_credentials(:shinya_example)
|
14
|
+
end
|
15
|
+
|
16
|
+
#
|
17
|
+
# 関連
|
18
|
+
#
|
19
|
+
|
20
|
+
test "belongs_to :user" do
|
21
|
+
assert_equal(
|
22
|
+
users(:yuya),
|
23
|
+
@yuya_livedoor.user)
|
24
|
+
|
25
|
+
assert_equal(
|
26
|
+
users(:shinya),
|
27
|
+
@shinya_example.user)
|
28
|
+
end
|
29
|
+
|
30
|
+
#
|
31
|
+
# 検証
|
32
|
+
#
|
33
|
+
|
34
|
+
test "all fixtures are valid" do
|
35
|
+
assert_equal(true, @klass.all.all?(&:valid?))
|
36
|
+
end
|
37
|
+
|
38
|
+
test "basic is valid" do
|
39
|
+
assert_equal(true, @basic.valid?)
|
40
|
+
end
|
41
|
+
|
42
|
+
test "validates_presence_of :identity_url" do
|
43
|
+
@basic.identity_url = nil
|
44
|
+
assert_equal(false, @basic.valid?)
|
45
|
+
assert_equal(true, @basic.errors.invalid?(:identity_url))
|
46
|
+
end
|
47
|
+
|
48
|
+
test "validates_length_of :identity_url" do
|
49
|
+
@basic.identity_url = "http://example.com/" + "a" * 182
|
50
|
+
assert_equal(201, @basic.identity_url.size)
|
51
|
+
|
52
|
+
assert_equal(false, @basic.valid?)
|
53
|
+
assert_equal(true, @basic.errors.invalid?(:identity_url))
|
54
|
+
end
|
55
|
+
|
56
|
+
test "validates_format_of :identity_url" do
|
57
|
+
[
|
58
|
+
["http://example.com/foo", true, false],
|
59
|
+
["https://example.com/foo", true, false],
|
60
|
+
["ftp://example.com/foo", false, true ],
|
61
|
+
["HTTP://EXAMPLE.COM/foo", false, true ],
|
62
|
+
].each{|value, expected1, expected2|
|
63
|
+
@basic.identity_url = value
|
64
|
+
assert_equal(expected1, @basic.valid?)
|
65
|
+
assert_equal(expected2, @basic.errors.invalid?(:identity_url))
|
66
|
+
}
|
67
|
+
end
|
68
|
+
|
69
|
+
test "validates_uniqueness_of :identity_url, on create" do
|
70
|
+
@basic.identity_url = @yuya_livedoor.identity_url
|
71
|
+
assert_equal(false, @basic.valid?)
|
72
|
+
end
|
73
|
+
|
74
|
+
test "validates_uniqueness_of :identity_url, on update" do
|
75
|
+
@yuya_livedoor.identity_url = @shinya_example.identity_url
|
76
|
+
assert_equal(false, @yuya_livedoor.valid?)
|
77
|
+
end
|
78
|
+
|
79
|
+
test "validates_each :user_id" do
|
80
|
+
srand(0)
|
81
|
+
user = users(:yuya)
|
82
|
+
create_record = proc {
|
83
|
+
user.open_id_credentials.create!(
|
84
|
+
:identity_url => "http://example.jp/identity_url#{rand(1000)}")
|
85
|
+
}
|
86
|
+
|
87
|
+
assert_nothing_raised {
|
88
|
+
(10 - user.open_id_credentials.size).times {
|
89
|
+
record = create_record[]
|
90
|
+
record.save!
|
91
|
+
}
|
92
|
+
}
|
93
|
+
assert_raise(ActiveRecord::RecordInvalid) {
|
94
|
+
create_record[]
|
95
|
+
}
|
96
|
+
end
|
97
|
+
|
98
|
+
#
|
99
|
+
# インスタンスメソッド
|
100
|
+
#
|
101
|
+
|
102
|
+
test "login!" do
|
103
|
+
time = Time.local(2010, 1, 1)
|
104
|
+
assert_equal(nil, @shinya_example.loggedin_at)
|
105
|
+
Kagemusha::DateTime.at(time) { @shinya_example.login! }
|
106
|
+
assert_equal(time, @shinya_example.reload.loggedin_at)
|
107
|
+
end
|
108
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
|
2
|
+
require 'test_helper'
|
3
|
+
|
4
|
+
class OpenIdLoginFormTest < ActiveSupport::TestCase
|
5
|
+
def setup
|
6
|
+
@klass = OpenIdLoginForm
|
7
|
+
@basic = @klass.new(
|
8
|
+
:openid_url => "example.jp")
|
9
|
+
end
|
10
|
+
|
11
|
+
#
|
12
|
+
# 基底クラス
|
13
|
+
#
|
14
|
+
|
15
|
+
test "superclass" do
|
16
|
+
assert_equal(ActiveForm, @klass.superclass)
|
17
|
+
end
|
18
|
+
|
19
|
+
#
|
20
|
+
# カラム
|
21
|
+
#
|
22
|
+
|
23
|
+
test "columns" do
|
24
|
+
[
|
25
|
+
[:openid_url, nil, "1", "1"],
|
26
|
+
].each { |name, default, set_value, get_value|
|
27
|
+
form = @klass.new
|
28
|
+
assert_equal(default, form.__send__(name), name)
|
29
|
+
form.__send__("#{name}=", set_value)
|
30
|
+
assert_equal(get_value, form.__send__(name), name)
|
31
|
+
}
|
32
|
+
end
|
33
|
+
|
34
|
+
#
|
35
|
+
# 検証
|
36
|
+
#
|
37
|
+
|
38
|
+
test "basic is valid" do
|
39
|
+
assert_equal(true, @basic.valid?)
|
40
|
+
end
|
41
|
+
|
42
|
+
test "validates_presence_of :openid_url" do
|
43
|
+
@basic.openid_url = nil
|
44
|
+
assert_equal(false, @basic.valid?)
|
45
|
+
end
|
46
|
+
|
47
|
+
test "validates_length_of :openid_url" do
|
48
|
+
[
|
49
|
+
["a" * 1, true ],
|
50
|
+
["a" * 200, true ],
|
51
|
+
["a" * 201, false],
|
52
|
+
].each { |value, expected|
|
53
|
+
@basic.openid_url = value
|
54
|
+
assert_equal(expected, @basic.valid?, value)
|
55
|
+
}
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
|
2
|
+
require 'test_helper'
|
3
|
+
|
4
|
+
class SessionTest < ActiveSupport::TestCase
|
5
|
+
def setup
|
6
|
+
@klass = Session
|
7
|
+
@record = @klass.new
|
8
|
+
end
|
9
|
+
|
10
|
+
#
|
11
|
+
# クラスメソッド
|
12
|
+
#
|
13
|
+
|
14
|
+
test "self.cleanup, 1 hour" do
|
15
|
+
session_a = create_empty_session(Time.local(2009, 1, 1, 11, 59, 59), "a")
|
16
|
+
session_b = create_empty_session(Time.local(2009, 1, 1, 12, 0, 0), "b")
|
17
|
+
session_c = create_empty_session(Time.local(2009, 1, 1, 12, 0, 1), "c")
|
18
|
+
|
19
|
+
assert_difference("Session.count", -1) {
|
20
|
+
Kagemusha::DateTime.at(2009, 1, 1, 13, 0, 0) {
|
21
|
+
assert_equal(nil, @klass.cleanup(1.hour))
|
22
|
+
}
|
23
|
+
}
|
24
|
+
|
25
|
+
assert_nil(@klass.find_by_id(session_a.id))
|
26
|
+
assert_not_nil(@klass.find_by_id(session_b.id))
|
27
|
+
assert_not_nil(@klass.find_by_id(session_c.id))
|
28
|
+
end
|
29
|
+
|
30
|
+
test "self.cleanup, 2 hours" do
|
31
|
+
session_a = create_empty_session(Time.local(2009, 12, 31, 0, 30, 29), "a")
|
32
|
+
session_b = create_empty_session(Time.local(2009, 12, 31, 0, 30, 30), "b")
|
33
|
+
session_c = create_empty_session(Time.local(2009, 12, 31, 0, 30, 31), "c")
|
34
|
+
|
35
|
+
assert_difference("Session.count", -1) {
|
36
|
+
Kagemusha::DateTime.at(2009, 12, 31, 2, 30, 30) {
|
37
|
+
assert_equal(nil, @klass.cleanup(2.hours))
|
38
|
+
}
|
39
|
+
}
|
40
|
+
|
41
|
+
assert_nil(@klass.find_by_id(session_a.id))
|
42
|
+
assert_not_nil(@klass.find_by_id(session_b.id))
|
43
|
+
assert_not_nil(@klass.find_by_id(session_c.id))
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
def create_empty_session(time, key)
|
49
|
+
return Kagemusha::DateTime.at(time) {
|
50
|
+
Session.create!(:session_id => key, :data => "")
|
51
|
+
}
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
require 'test_helper'
|
4
|
+
|
5
|
+
class TokenUtilTest < ActiveSupport::TestCase
|
6
|
+
def setup
|
7
|
+
@mod = TokenUtil
|
8
|
+
end
|
9
|
+
|
10
|
+
test "create_token" do
|
11
|
+
assert_match(/\A[0-9a-f]{10}\z/, @mod.create_token(10))
|
12
|
+
assert_match(/\A[0-9a-f]{20}\z/, @mod.create_token(20))
|
13
|
+
assert_match(/\A[0-9a-f]{30}\z/, @mod.create_token(30))
|
14
|
+
|
15
|
+
srand(0)
|
16
|
+
assert_not_equal(
|
17
|
+
@mod.create_token(20),
|
18
|
+
@mod.create_token(20))
|
19
|
+
end
|
20
|
+
|
21
|
+
test "create_unique_token" do
|
22
|
+
assert_match(/\A[0-9a-f]{10}\z/, @mod.create_unique_token(User, :user_token, 10))
|
23
|
+
assert_match(/\A[0-9a-f]{20}\z/, @mod.create_unique_token(User, :user_token, 20))
|
24
|
+
assert_match(/\A[0-9a-f]{30}\z/, @mod.create_unique_token(User, :user_token, 30))
|
25
|
+
|
26
|
+
srand(0)
|
27
|
+
assert_not_equal(
|
28
|
+
@mod.create_unique_token(User, :user_token, 20),
|
29
|
+
@mod.create_unique_token(User, :user_token, 20))
|
30
|
+
end
|
31
|
+
|
32
|
+
test "create_unique_token, conflict" do
|
33
|
+
[
|
34
|
+
[User, :user_token],
|
35
|
+
].each { |klass, column|
|
36
|
+
exist_token = klass.first[column]
|
37
|
+
unique_token = "0" * exist_token.size
|
38
|
+
assert_equal(true, klass.exists?(column => exist_token))
|
39
|
+
assert_equal(false, klass.exists?(column => unique_token))
|
40
|
+
|
41
|
+
tokens = [exist_token, unique_token]
|
42
|
+
musha = Kagemusha.new(@mod)
|
43
|
+
musha.defs(:create_token) { tokens.shift }
|
44
|
+
musha.swap {
|
45
|
+
assert_equal(
|
46
|
+
unique_token,
|
47
|
+
@mod.create_unique_token(klass, column, exist_token.size))
|
48
|
+
}
|
49
|
+
}
|
50
|
+
end
|
51
|
+
end
|