sorcery 0.5.0 → 0.6.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 (98) hide show
  1. data/README.rdoc +9 -1
  2. data/VERSION +1 -1
  3. data/lib/sorcery/controller/adapters/sinatra.rb +35 -28
  4. data/lib/sorcery/controller/submodules/activity_logging.rb +11 -7
  5. data/lib/sorcery/controller/submodules/brute_force_protection.rb +8 -5
  6. data/lib/sorcery/controller/submodules/external.rb +11 -6
  7. data/lib/sorcery/controller/submodules/http_basic_auth.rb +12 -7
  8. data/lib/sorcery/controller/submodules/remember_me.rb +14 -5
  9. data/lib/sorcery/controller/submodules/session_timeout.rb +3 -1
  10. data/lib/sorcery/controller.rb +12 -9
  11. data/lib/sorcery/crypto_providers/aes256.rb +8 -5
  12. data/lib/sorcery/crypto_providers/bcrypt.rb +12 -6
  13. data/lib/sorcery/crypto_providers/sha256.rb +2 -1
  14. data/lib/sorcery/crypto_providers/sha512.rb +2 -1
  15. data/lib/sorcery/engine.rb +0 -7
  16. data/lib/sorcery/initializers/initializer.rb +127 -36
  17. data/lib/sorcery/model/adapters/active_record.rb +2 -2
  18. data/lib/sorcery/model/adapters/mongoid.rb +12 -7
  19. data/lib/sorcery/model/submodules/activity_logging.rb +7 -6
  20. data/lib/sorcery/model/submodules/brute_force_protection.rb +10 -6
  21. data/lib/sorcery/model/submodules/external.rb +4 -2
  22. data/lib/sorcery/model/submodules/remember_me.rb +4 -3
  23. data/lib/sorcery/model/submodules/reset_password.rb +21 -11
  24. data/lib/sorcery/model/submodules/user_activation.rb +23 -10
  25. data/lib/sorcery/model/temporary_token.rb +3 -2
  26. data/lib/sorcery/model.rb +60 -29
  27. data/lib/sorcery/test_helpers/internal/rails.rb +6 -1
  28. data/lib/sorcery/test_helpers/internal/sinatra.rb +3 -3
  29. data/lib/sorcery/test_helpers/internal/sinatra_modular.rb +74 -0
  30. data/lib/sorcery/test_helpers/internal.rb +2 -1
  31. data/lib/sorcery.rb +3 -5
  32. data/sorcery.gemspec +72 -2
  33. data/spec/Gemfile.lock +1 -4
  34. data/spec/rails3/Gemfile.lock +1 -4
  35. data/spec/rails3/spec/controller_oauth2_spec.rb +3 -24
  36. data/spec/rails3/spec/controller_oauth_spec.rb +3 -24
  37. data/spec/rails3/spec/controller_spec.rb +2 -2
  38. data/spec/rails3/spec/user_activation_spec.rb +2 -168
  39. data/spec/rails3/spec/user_activity_logging_spec.rb +2 -30
  40. data/spec/rails3/spec/user_brute_force_protection_spec.rb +2 -35
  41. data/spec/rails3/spec/user_oauth_spec.rb +2 -26
  42. data/spec/rails3/spec/user_remember_me_spec.rb +2 -45
  43. data/spec/rails3/spec/user_reset_password_spec.rb +3 -168
  44. data/spec/rails3/spec/user_spec.rb +3 -293
  45. data/spec/rails3_mongoid/Gemfile.lock +1 -4
  46. data/spec/rails3_mongoid/app/models/authentication.rb +3 -3
  47. data/spec/rails3_mongoid/spec/user_activation_spec.rb +2 -171
  48. data/spec/rails3_mongoid/spec/user_activity_logging_spec.rb +2 -25
  49. data/spec/rails3_mongoid/spec/user_brute_force_protection_spec.rb +2 -35
  50. data/spec/rails3_mongoid/spec/user_oauth_spec.rb +2 -28
  51. data/spec/rails3_mongoid/spec/user_remember_me_spec.rb +2 -45
  52. data/spec/rails3_mongoid/spec/user_reset_password_spec.rb +2 -168
  53. data/spec/rails3_mongoid/spec/user_spec.rb +3 -295
  54. data/spec/shared_examples/controller_oauth2_shared_examples.rb +37 -0
  55. data/spec/shared_examples/controller_oauth_shared_examples.rb +37 -0
  56. data/spec/shared_examples/user_activation_shared_examples.rb +173 -0
  57. data/spec/shared_examples/user_activity_logging_shared_examples.rb +27 -0
  58. data/spec/shared_examples/user_brute_force_protection_shared_examples.rb +37 -0
  59. data/spec/shared_examples/user_oauth_shared_examples.rb +31 -0
  60. data/spec/shared_examples/user_remember_me_shared_examples.rb +47 -0
  61. data/spec/shared_examples/user_reset_password_shared_examples.rb +177 -0
  62. data/spec/shared_examples/user_shared_examples.rb +292 -0
  63. data/spec/sinatra/Gemfile +3 -0
  64. data/spec/sinatra/Gemfile.lock +17 -34
  65. data/spec/sinatra/Rakefile +1 -1
  66. data/spec/sinatra/filters.rb +20 -14
  67. data/spec/sinatra/modular.rb +157 -0
  68. data/spec/sinatra/spec/controller_oauth2_spec.rb +3 -24
  69. data/spec/sinatra/spec/controller_oauth_spec.rb +3 -24
  70. data/spec/sinatra/spec/controller_spec.rb +2 -2
  71. data/spec/sinatra_modular/Gemfile +15 -0
  72. data/spec/sinatra_modular/Gemfile.lock +117 -0
  73. data/spec/sinatra_modular/Rakefile +11 -0
  74. data/spec/sinatra_modular/authentication.rb +3 -0
  75. data/spec/sinatra_modular/db/migrate/activation/20101224223622_add_activation_to_users.rb +17 -0
  76. data/spec/sinatra_modular/db/migrate/activity_logging/20101224223624_add_activity_logging_to_users.rb +17 -0
  77. data/spec/sinatra_modular/db/migrate/brute_force_protection/20101224223626_add_brute_force_protection_to_users.rb +11 -0
  78. data/spec/sinatra_modular/db/migrate/core/20101224223620_create_users.rb +16 -0
  79. data/spec/sinatra_modular/db/migrate/external/20101224223628_create_authentications.rb +14 -0
  80. data/spec/sinatra_modular/db/migrate/remember_me/20101224223623_add_remember_me_token_to_users.rb +15 -0
  81. data/spec/sinatra_modular/db/migrate/reset_password/20101224223622_add_reset_password_to_users.rb +13 -0
  82. data/spec/sinatra_modular/filters.rb +27 -0
  83. data/spec/sinatra_modular/modular.rb +157 -0
  84. data/spec/sinatra_modular/myapp.rb +133 -0
  85. data/spec/sinatra_modular/sorcery_mailer.rb +25 -0
  86. data/spec/sinatra_modular/spec_modular/controller_activity_logging_spec.rb +85 -0
  87. data/spec/sinatra_modular/spec_modular/controller_brute_force_protection_spec.rb +70 -0
  88. data/spec/sinatra_modular/spec_modular/controller_http_basic_auth_spec.rb +53 -0
  89. data/spec/sinatra_modular/spec_modular/controller_oauth2_spec.rb +99 -0
  90. data/spec/sinatra_modular/spec_modular/controller_oauth_spec.rb +100 -0
  91. data/spec/sinatra_modular/spec_modular/controller_remember_me_spec.rb +64 -0
  92. data/spec/sinatra_modular/spec_modular/controller_session_timeout_spec.rb +57 -0
  93. data/spec/sinatra_modular/spec_modular/controller_spec.rb +116 -0
  94. data/spec/sinatra_modular/spec_modular/spec.opts +2 -0
  95. data/spec/sinatra_modular/spec_modular/spec_helper.rb +51 -0
  96. data/spec/sinatra_modular/user.rb +6 -0
  97. data/spec/sinatra_modular/views/test_login.erb +4 -0
  98. metadata +72 -2
@@ -1,5 +1,6 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
  require File.expand_path(File.dirname(__FILE__) + '/../app/mailers/sorcery_mailer')
3
+ require File.expand_path(File.dirname(__FILE__) + '/../../shared_examples/user_activation_shared_examples')
3
4
 
4
5
  describe "User with activation submodule" do
5
6
  before(:all) do
@@ -10,173 +11,6 @@ describe "User with activation submodule" do
10
11
  ActiveRecord::Migrator.rollback("#{Rails.root}/db/migrate/activation")
11
12
  end
12
13
 
13
- # ----------------- PLUGIN CONFIGURATION -----------------------
14
- describe User, "loaded plugin configuration" do
15
- before(:all) do
16
- sorcery_reload!([:user_activation], :user_activation_mailer => ::SorceryMailer)
17
- end
18
-
19
- after(:each) do
20
- User.sorcery_config.reset!
21
- sorcery_reload!([:user_activation], :user_activation_mailer => ::SorceryMailer)
22
- end
23
-
24
- it "should enable configuration option 'activation_state_attribute_name'" do
25
- sorcery_model_property_set(:activation_state_attribute_name, :status)
26
- User.sorcery_config.activation_state_attribute_name.should equal(:status)
27
- end
28
-
29
- it "should enable configuration option 'activation_token_attribute_name'" do
30
- sorcery_model_property_set(:activation_token_attribute_name, :code)
31
- User.sorcery_config.activation_token_attribute_name.should equal(:code)
32
- end
33
-
34
- it "should enable configuration option 'user_activation_mailer'" do
35
- sorcery_model_property_set(:user_activation_mailer, TestMailer)
36
- User.sorcery_config.user_activation_mailer.should equal(TestMailer)
37
- end
38
-
39
- it "should enable configuration option 'activation_needed_email_method_name'" do
40
- sorcery_model_property_set(:activation_needed_email_method_name, :my_activation_email)
41
- User.sorcery_config.activation_needed_email_method_name.should equal(:my_activation_email)
42
- end
43
-
44
- it "should enable configuration option 'activation_success_email_method_name'" do
45
- sorcery_model_property_set(:activation_success_email_method_name, :my_activation_email)
46
- User.sorcery_config.activation_success_email_method_name.should equal(:my_activation_email)
47
- end
48
-
49
- it "if mailer is nil on activation, throw exception!" do
50
- expect{sorcery_reload!([:user_activation])}.to raise_error(ArgumentError)
51
- end
52
- end
53
-
54
- # ----------------- ACTIVATION PROCESS -----------------------
55
- describe User, "activation process" do
56
- before(:all) do
57
- sorcery_reload!([:user_activation], :user_activation_mailer => ::SorceryMailer)
58
- end
59
-
60
- before(:each) do
61
- create_new_user
62
- end
63
-
64
- it "should initialize user state to 'pending'" do
65
- @user.activation_state.should == "pending"
66
- end
67
-
68
- specify { @user.should respond_to(:activate!) }
69
-
70
- it "should clear activation code and change state to 'active' on activation" do
71
- activation_token = @user.activation_token
72
- @user.activate!
73
- @user2 = User.find(@user.id) # go to db to make sure it was saved and not just in memory
74
- @user2.activation_token.should be_nil
75
- @user2.activation_state.should == "active"
76
- User.find_by_activation_token(activation_token).should be_nil
77
- end
78
-
79
- it "should send the user an activation email" do
80
- old_size = ActionMailer::Base.deliveries.size
81
- create_new_user
82
- ActionMailer::Base.deliveries.size.should == old_size + 1
83
- end
84
-
85
- it "subsequent saves do not send activation email" do
86
- old_size = ActionMailer::Base.deliveries.size
87
- @user.username = "Shauli"
88
- @user.save!
89
- ActionMailer::Base.deliveries.size.should == old_size
90
- end
91
-
92
- it "should send the user an activation success email on successful activation" do
93
- old_size = ActionMailer::Base.deliveries.size
94
- @user.activate!
95
- ActionMailer::Base.deliveries.size.should == old_size + 1
96
- end
97
-
98
- it "subsequent saves do not send activation success email" do
99
- @user.activate!
100
- old_size = ActionMailer::Base.deliveries.size
101
- @user.username = "Shauli"
102
- @user.save!
103
- ActionMailer::Base.deliveries.size.should == old_size
104
- end
105
-
106
- it "activation needed email is optional" do
107
- sorcery_model_property_set(:activation_needed_email_method_name, nil)
108
- old_size = ActionMailer::Base.deliveries.size
109
- create_new_user
110
- ActionMailer::Base.deliveries.size.should == old_size
111
- end
112
-
113
- it "activation success email is optional" do
114
- sorcery_model_property_set(:activation_success_email_method_name, nil)
115
- old_size = ActionMailer::Base.deliveries.size
116
- @user.activate!
117
- ActionMailer::Base.deliveries.size.should == old_size
118
- end
119
- end
120
-
121
- describe User, "prevent non-active login feature" do
122
- before(:all) do
123
- sorcery_reload!([:user_activation], :user_activation_mailer => ::SorceryMailer)
124
- end
125
-
126
- it "should not allow a non-active user to authenticate" do
127
- create_new_user
128
- User.authenticate(@user.username,'secret').should be_false
129
- end
130
-
131
- it "should allow a non-active user to authenticate if configured so" do
132
- create_new_user
133
- sorcery_model_property_set(:prevent_non_active_users_to_login, false)
134
- User.authenticate(@user.username,'secret').should be_true
135
- end
136
- end
137
-
138
- describe User, "load_from_activation_token" do
139
- before(:all) do
140
- sorcery_reload!([:user_activation], :user_activation_mailer => ::SorceryMailer)
141
- end
142
-
143
- after(:each) do
144
- Timecop.return
145
- end
146
-
147
- it "load_from_activation_token should return user when token is found" do
148
- create_new_user
149
- User.load_from_activation_token(@user.activation_token).should == @user
150
- end
151
-
152
- it "load_from_activation_token should NOT return user when token is NOT found" do
153
- create_new_user
154
- User.load_from_activation_token("a").should == nil
155
- end
156
-
157
- it "load_from_activation_token should return user when token is found and not expired" do
158
- sorcery_model_property_set(:activation_token_expiration_period, 500)
159
- create_new_user
160
- User.load_from_activation_token(@user.activation_token).should == @user
161
- end
162
-
163
- it "load_from_activation_token should NOT return user when token is found and expired" do
164
- sorcery_model_property_set(:activation_token_expiration_period, 0.1)
165
- create_new_user
166
- Timecop.travel(Time.now+0.5)
167
- User.load_from_activation_token(@user.activation_token).should == nil
168
- end
169
-
170
- it "load_from_activation_token should return nil if token is blank" do
171
- User.load_from_activation_token(nil).should == nil
172
- User.load_from_activation_token("").should == nil
173
- end
174
-
175
- it "load_from_activation_token should always be valid if expiration period is nil" do
176
- sorcery_model_property_set(:activation_token_expiration_period, nil)
177
- create_new_user
178
- User.load_from_activation_token(@user.activation_token).should == @user
179
- end
180
- end
14
+ it_behaves_like "rails_3_activation_model"
181
15
 
182
16
  end
@@ -1,36 +1,8 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+ require File.expand_path(File.dirname(__FILE__) + '/../../shared_examples/user_activity_logging_shared_examples')
2
3
 
3
4
  describe "User with activity logging submodule" do
4
- before(:all) do
5
- end
6
-
7
- after(:all) do
8
- end
9
5
 
10
- # ----------------- PLUGIN CONFIGURATION -----------------------
11
- describe User, "loaded plugin configuration" do
12
- before(:all) do
13
- sorcery_reload!([:activity_logging])
14
- end
15
-
16
- after(:each) do
17
- User.sorcery_config.reset!
18
- end
19
-
20
- it "should allow configuration option 'last_login_at_attribute_name'" do
21
- sorcery_model_property_set(:last_login_at_attribute_name, :login_time)
22
- User.sorcery_config.last_login_at_attribute_name.should equal(:login_time)
23
- end
24
-
25
- it "should allow configuration option 'last_logout_at_attribute_name'" do
26
- sorcery_model_property_set(:last_logout_at_attribute_name, :logout_time)
27
- User.sorcery_config.last_logout_at_attribute_name.should equal(:logout_time)
28
- end
29
-
30
- it "should allow configuration option 'last_activity_at_attribute_name'" do
31
- sorcery_model_property_set(:last_activity_at_attribute_name, :activity_time)
32
- User.sorcery_config.last_activity_at_attribute_name.should equal(:activity_time)
33
- end
34
- end
6
+ it_behaves_like "rails_3_activity_logging_model"
35
7
 
36
8
  end
@@ -1,4 +1,5 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+ require File.expand_path(File.dirname(__FILE__) + '/../../shared_examples/user_brute_force_protection_shared_examples')
2
3
 
3
4
  describe "User with brute_force_protection submodule" do
4
5
  before(:all) do
@@ -9,40 +10,6 @@ describe "User with brute_force_protection submodule" do
9
10
  ActiveRecord::Migrator.rollback("#{Rails.root}/db/migrate/brute_force_protection")
10
11
  end
11
12
 
12
- # ----------------- PLUGIN CONFIGURATION -----------------------
13
- describe User, "loaded plugin configuration" do
14
-
15
- before(:all) do
16
- sorcery_reload!([:brute_force_protection])
17
- create_new_user
18
- end
19
-
20
- after(:each) do
21
- User.sorcery_config.reset!
22
- end
23
-
24
- specify { @user.should respond_to(:failed_logins_count) }
25
- specify { @user.should respond_to(:lock_expires_at) }
26
-
27
- it "should enable configuration option 'failed_logins_count_attribute_name'" do
28
- sorcery_model_property_set(:failed_logins_count_attribute_name, :my_count)
29
- User.sorcery_config.failed_logins_count_attribute_name.should equal(:my_count)
30
- end
31
-
32
- it "should enable configuration option 'lock_expires_at_attribute_name'" do
33
- sorcery_model_property_set(:lock_expires_at_attribute_name, :expires)
34
- User.sorcery_config.lock_expires_at_attribute_name.should equal(:expires)
35
- end
36
-
37
- it "should enable configuration option 'consecutive_login_retries_amount_allowed'" do
38
- sorcery_model_property_set(:consecutive_login_retries_amount_limit, 34)
39
- User.sorcery_config.consecutive_login_retries_amount_limit.should equal(34)
40
- end
41
-
42
- it "should enable configuration option 'login_lock_time_period'" do
43
- sorcery_model_property_set(:login_lock_time_period, 2.hours)
44
- User.sorcery_config.login_lock_time_period.should == 2.hours
45
- end
46
- end
13
+ it_behaves_like "rails_3_brute_force_protection_model"
47
14
 
48
15
  end
@@ -1,4 +1,5 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+ require File.expand_path(File.dirname(__FILE__) + '/../../shared_examples/user_oauth_shared_examples')
2
3
 
3
4
  describe "User with oauth submodule" do
4
5
  before(:all) do
@@ -9,31 +10,6 @@ describe "User with oauth submodule" do
9
10
  ActiveRecord::Migrator.rollback("#{Rails.root}/db/migrate/external")
10
11
  end
11
12
 
12
- # ----------------- PLUGIN CONFIGURATION -----------------------
13
- describe User, "loaded plugin configuration" do
14
-
15
- before(:all) do
16
- sorcery_reload!([:external])
17
- sorcery_controller_property_set(:external_providers, [:twitter])
18
- sorcery_model_property_set(:authentications_class, Authentication)
19
- sorcery_controller_external_property_set(:twitter, :key, "eYVNBjBDi33aa9GkA3w")
20
- sorcery_controller_external_property_set(:twitter, :secret, "XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8")
21
- sorcery_controller_external_property_set(:twitter, :callback_url, "http://blabla.com")
22
- create_new_external_user(:twitter)
23
- end
24
-
25
- it "should respond to 'load_from_provider'" do
26
- User.should respond_to(:load_from_provider)
27
- end
28
-
29
- it "'load_from_provider' should load user if exists" do
30
- User.load_from_provider(:twitter,123).should == @user
31
- end
32
-
33
- it "'load_from_provider' should return nil if user doesn't exist" do
34
- User.load_from_provider(:twitter,980342).should be_nil
35
- end
36
-
37
- end
13
+ it_behaves_like "rails_3_oauth_model"
38
14
 
39
15
  end
@@ -1,4 +1,5 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+ require File.expand_path(File.dirname(__FILE__) + '/../../shared_examples/user_remember_me_shared_examples')
2
3
 
3
4
  describe "User with remember_me submodule" do
4
5
  before(:all) do
@@ -9,50 +10,6 @@ describe "User with remember_me submodule" do
9
10
  ActiveRecord::Migrator.rollback("#{Rails.root}/db/migrate/remember_me")
10
11
  end
11
12
 
12
- # ----------------- PLUGIN CONFIGURATION -----------------------
13
- describe User, "loaded plugin configuration" do
14
- before(:all) do
15
- sorcery_reload!([:remember_me])
16
- create_new_user
17
- end
18
-
19
- after(:each) do
20
- User.sorcery_config.reset!
21
- end
22
-
23
- it "should allow configuration option 'remember_me_token_attribute_name'" do
24
- sorcery_model_property_set(:remember_me_token_attribute_name, :my_token)
25
- User.sorcery_config.remember_me_token_attribute_name.should equal(:my_token)
26
- end
27
-
28
- it "should allow configuration option 'remember_me_token_expires_at_attribute_name'" do
29
- sorcery_model_property_set(:remember_me_token_expires_at_attribute_name, :my_expires)
30
- User.sorcery_config.remember_me_token_expires_at_attribute_name.should equal(:my_expires)
31
- end
32
-
33
- specify { @user.should respond_to(:remember_me!) }
34
-
35
- specify { @user.should respond_to(:forget_me!) }
36
-
37
- it "should generate a new token on 'remember_me!'" do
38
- @user.remember_me_token.should be_nil
39
- @user.remember_me!
40
- @user.remember_me_token.should_not be_nil
41
- end
42
-
43
- it "should set an expiration based on 'remember_me_for' attribute" do
44
- sorcery_model_property_set(:remember_me_for, 2 * 60 * 60 * 24)
45
- @user.remember_me!
46
- @user.remember_me_token_expires_at.to_s.should == (Time.now + 2 * 60 * 60 * 24).utc.to_s
47
- end
48
-
49
- it "should delete the token and expiration on 'forget_me!'" do
50
- @user.remember_me!
51
- @user.remember_me_token.should_not be_nil
52
- @user.forget_me!
53
- @user.remember_me_token.should be_nil
54
- @user.remember_me_token_expires_at.should be_nil
55
- end
56
- end
13
+ it_behaves_like "rails_3_remember_me_model"
57
14
 
58
15
  end
@@ -1,4 +1,6 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+ require File.expand_path(File.dirname(__FILE__) + '/../../shared_examples/user_reset_password_shared_examples')
3
+
2
4
 
3
5
  describe "User with reset_password submodule" do
4
6
  before(:all) do
@@ -9,173 +11,6 @@ describe "User with reset_password submodule" do
9
11
  ActiveRecord::Migrator.rollback("#{Rails.root}/db/migrate/reset_password")
10
12
  end
11
13
 
12
- # ----------------- PLUGIN CONFIGURATION -----------------------
13
- describe User, "loaded plugin configuration" do
14
-
15
- before(:all) do
16
- sorcery_reload!([:reset_password], :reset_password_mailer => ::SorceryMailer)
17
- end
18
-
19
- after(:each) do
20
- User.sorcery_config.reset!
21
- end
22
-
23
- context "API" do
24
- before(:all) do
25
- create_new_user
26
- end
27
-
28
- specify { @user.should respond_to(:deliver_reset_password_instructions!) }
29
-
30
- specify { @user.should respond_to(:change_password!) }
31
-
32
- it "should respond to .load_from_reset_password_token" do
33
- User.should respond_to(:load_from_reset_password_token)
34
- end
35
- end
36
-
37
- it "should allow configuration option 'reset_password_token_attribute_name'" do
38
- sorcery_model_property_set(:reset_password_token_attribute_name, :my_code)
39
- User.sorcery_config.reset_password_token_attribute_name.should equal(:my_code)
40
- end
41
-
42
- it "should allow configuration option 'reset_password_mailer'" do
43
- sorcery_model_property_set(:reset_password_mailer, TestUser)
44
- User.sorcery_config.reset_password_mailer.should equal(TestUser)
45
- end
46
-
47
- it "should allow configuration option 'reset_password_email_method_name'" do
48
- sorcery_model_property_set(:reset_password_email_method_name, :my_mailer_method)
49
- User.sorcery_config.reset_password_email_method_name.should equal(:my_mailer_method)
50
- end
51
-
52
- it "should allow configuration option 'reset_password_expiration_period'" do
53
- sorcery_model_property_set(:reset_password_expiration_period, 16)
54
- User.sorcery_config.reset_password_expiration_period.should equal(16)
55
- end
56
-
57
- it "should allow configuration option 'reset_password_email_sent_at_attribute_name'" do
58
- sorcery_model_property_set(:reset_password_email_sent_at_attribute_name, :blabla)
59
- User.sorcery_config.reset_password_email_sent_at_attribute_name.should equal(:blabla)
60
- end
61
-
62
- it "should allow configuration option 'reset_password_time_between_emails'" do
63
- sorcery_model_property_set(:reset_password_time_between_emails, 16)
64
- User.sorcery_config.reset_password_time_between_emails.should equal(16)
65
- end
66
- end
67
-
68
- # ----------------- PLUGIN ACTIVATED -----------------------
69
- describe User, "when activated with sorcery" do
70
-
71
- before(:all) do
72
- sorcery_reload!([:reset_password], :reset_password_mailer => ::SorceryMailer)
73
- end
74
-
75
- before(:each) do
76
- User.delete_all
77
- end
78
-
79
- after(:each) do
80
- Timecop.return
81
- end
82
-
83
- it "load_from_reset_password_token should return user when token is found" do
84
- create_new_user
85
- @user.deliver_reset_password_instructions!
86
- User.load_from_reset_password_token(@user.reset_password_token).should == @user
87
- end
88
-
89
- it "load_from_reset_password_token should NOT return user when token is NOT found" do
90
- create_new_user
91
- @user.deliver_reset_password_instructions!
92
- User.load_from_reset_password_token("a").should == nil
93
- end
94
-
95
- it "load_from_reset_password_token should return user when token is found and not expired" do
96
- create_new_user
97
- sorcery_model_property_set(:reset_password_expiration_period, 500)
98
- @user.deliver_reset_password_instructions!
99
- User.load_from_reset_password_token(@user.reset_password_token).should == @user
100
- end
101
-
102
- it "load_from_reset_password_token should NOT return user when token is found and expired" do
103
- create_new_user
104
- sorcery_model_property_set(:reset_password_expiration_period, 0.1)
105
- @user.deliver_reset_password_instructions!
106
- Timecop.travel(Time.now+0.5)
107
- User.load_from_reset_password_token(@user.reset_password_token).should == nil
108
- end
109
-
110
- it "load_from_reset_password_token should always be valid if expiration period is nil" do
111
- create_new_user
112
- sorcery_model_property_set(:reset_password_expiration_period, nil)
113
- @user.deliver_reset_password_instructions!
114
- User.load_from_reset_password_token(@user.reset_password_token).should == @user
115
- end
116
-
117
- it "load_from_reset_password_token should return nil if token is blank" do
118
- User.load_from_reset_password_token(nil).should == nil
119
- User.load_from_reset_password_token("").should == nil
120
- end
121
-
122
- it "'deliver_reset_password_instructions!' should generate a reset_password_token" do
123
- create_new_user
124
- @user.reset_password_token.should be_nil
125
- @user.deliver_reset_password_instructions!
126
- @user.reset_password_token.should_not be_nil
127
- end
128
-
129
- it "the reset_password_token should be random" do
130
- create_new_user
131
- sorcery_model_property_set(:reset_password_time_between_emails, 0)
132
- @user.deliver_reset_password_instructions!
133
- old_password_code = @user.reset_password_token
134
- @user.deliver_reset_password_instructions!
135
- @user.reset_password_token.should_not == old_password_code
136
- end
137
-
138
- it "should send an email on reset" do
139
- create_new_user
140
- old_size = ActionMailer::Base.deliveries.size
141
- @user.deliver_reset_password_instructions!
142
- ActionMailer::Base.deliveries.size.should == old_size + 1
143
- end
144
-
145
- it "when reset_password! is called, should delete reset_password_token" do
146
- create_new_user
147
- @user.deliver_reset_password_instructions!
148
- @user.reset_password_token.should_not be_nil
149
- @user.change_password!("blabulsdf")
150
- @user.save!
151
- @user.reset_password_token.should be_nil
152
- end
153
-
154
- it "should not send an email if time between emails has not passed since last email" do
155
- create_new_user
156
- sorcery_model_property_set(:reset_password_time_between_emails, 10000)
157
- old_size = ActionMailer::Base.deliveries.size
158
- @user.deliver_reset_password_instructions!
159
- ActionMailer::Base.deliveries.size.should == old_size + 1
160
- @user.deliver_reset_password_instructions!
161
- ActionMailer::Base.deliveries.size.should == old_size + 1
162
- end
163
-
164
- it "should send an email if time between emails has passed since last email" do
165
- create_new_user
166
- sorcery_model_property_set(:reset_password_time_between_emails, 0.5)
167
- old_size = ActionMailer::Base.deliveries.size
168
- @user.deliver_reset_password_instructions!
169
- ActionMailer::Base.deliveries.size.should == old_size + 1
170
- Timecop.travel(Time.now+0.5)
171
- @user.deliver_reset_password_instructions!
172
- ActionMailer::Base.deliveries.size.should == old_size + 2
173
- end
174
-
175
- it "if mailer is nil on activation, throw exception!" do
176
- expect{sorcery_reload!([:reset_password])}.to raise_error(ArgumentError)
177
- end
178
-
179
- end
14
+ it_behaves_like "rails_3_reset_password_model"
180
15
 
181
16
  end