Commit 647ca1a57898e6d942ff3f8cf79595e76a7a3939
1 parent
ab83d73d
Exists in
master
and in
28 other branches
Show message in view instead of flash and remove user after 72 hours without activation
Showing
10 changed files
with
84 additions
and
15 deletions
Show diff stats
app/controllers/public/account_controller.rb
... | ... | @@ -19,11 +19,11 @@ class AccountController < ApplicationController |
19 | 19 | def activate |
20 | 20 | @user = User.find_by_activation_code(params[:activation_code]) if params[:activation_code] |
21 | 21 | if @user and @user.activate |
22 | - session[:notice] = _("Your account has been activated, now you can log in!") | |
23 | - redirect_to :action => 'login', :userlogin => @user.login | |
22 | + @message = _("Your account has been activated, now you can log in!") | |
23 | + render :action => 'login', :userlogin => @user.login | |
24 | 24 | else |
25 | 25 | session[:notice] = _("It looks like you're trying to activate an account. Perhaps have already activated this account?") |
26 | - redirect_back_or_default(:controller => 'home') | |
26 | + redirect_to :controller => :home | |
27 | 27 | end |
28 | 28 | end |
29 | 29 | |
... | ... | @@ -78,8 +78,7 @@ class AccountController < ApplicationController |
78 | 78 | invitation.update_attributes!({:friend => @user.person}) |
79 | 79 | invitation.finish |
80 | 80 | end |
81 | - session[:notice] = _("Thanks for signing up! Now go to your e-mail and activate your account.") | |
82 | - redirect_back_or_default(:controller => 'home') | |
81 | + @register_pending = true | |
83 | 82 | end |
84 | 83 | rescue ActiveRecord::RecordInvalid |
85 | 84 | @person.valid? | ... | ... |
app/models/user.rb
... | ... | @@ -37,6 +37,7 @@ class User < ActiveRecord::Base |
37 | 37 | user.person.save! |
38 | 38 | end |
39 | 39 | after_create :deliver_activation_code |
40 | + after_create :delay_activation_check | |
40 | 41 | |
41 | 42 | attr_writer :person_data |
42 | 43 | def person_data |
... | ... | @@ -290,4 +291,8 @@ class User < ActiveRecord::Base |
290 | 291 | def deliver_activation_code |
291 | 292 | User::Mailer.deliver_activation_code(self) unless self.activation_code.blank? |
292 | 293 | end |
294 | + | |
295 | + def delay_activation_check | |
296 | + Delayed::Job.enqueue(UserActivationJob.new(self.id), 0, 72.hours.from_now) | |
297 | + end | |
293 | 298 | end | ... | ... |
app/views/account/login.rhtml
... | ... | @@ -5,6 +5,8 @@ |
5 | 5 | <% @user ||= User.new %> |
6 | 6 | <% is_thickbox ||= false %> |
7 | 7 | |
8 | +<%= @message %> | |
9 | + | |
8 | 10 | <% labelled_form_for :user, @user, :url => login_url do |f| %> |
9 | 11 | |
10 | 12 | <%= f.text_field :login, :id => 'main_user_login', :onchange => 'this.value = convToValidLogin( this.value )', :value => params[:userlogin] %> | ... | ... |
app/views/account/signup.rhtml
1 | 1 | <h1><%= _('Signup') %></h1> |
2 | -<%= render :partial => 'signup_form' %> | |
2 | +<% if @register_pending %> | |
3 | + <%= _('Thanks for signing up! Now check your e-mail to activate your account!') %> | |
4 | + <p style="text-align: center"><%= link_to(_('Go to the homepage'), '/') %></p> | |
5 | +<% else %> | |
6 | + <%= render :partial => 'signup_form' %> | |
7 | +<% end %> | ... | ... |
test/functional/account_controller_test.rb
... | ... | @@ -70,7 +70,8 @@ class AccountControllerTest < Test::Unit::TestCase |
70 | 70 | def test_should_allow_signup |
71 | 71 | assert_difference User, :count do |
72 | 72 | new_user |
73 | - assert_response :redirect | |
73 | + assert_response :success | |
74 | + assert_not_nil assigns(:register_pending) | |
74 | 75 | end |
75 | 76 | end |
76 | 77 | |
... | ... | @@ -79,6 +80,7 @@ class AccountControllerTest < Test::Unit::TestCase |
79 | 80 | new_user(:login => nil) |
80 | 81 | assert assigns(:user).errors.on(:login) |
81 | 82 | assert_response :success |
83 | + assert_nil assigns(:register_pending) | |
82 | 84 | end |
83 | 85 | end |
84 | 86 | |
... | ... | @@ -87,6 +89,7 @@ class AccountControllerTest < Test::Unit::TestCase |
87 | 89 | new_user(:password => nil) |
88 | 90 | assert assigns(:user).errors.on(:password) |
89 | 91 | assert_response :success |
92 | + assert_nil assigns(:register_pending) | |
90 | 93 | end |
91 | 94 | end |
92 | 95 | |
... | ... | @@ -95,6 +98,7 @@ class AccountControllerTest < Test::Unit::TestCase |
95 | 98 | new_user(:password_confirmation => nil) |
96 | 99 | assert assigns(:user).errors.on(:password_confirmation) |
97 | 100 | assert_response :success |
101 | + assert_nil assigns(:register_pending) | |
98 | 102 | end |
99 | 103 | end |
100 | 104 | |
... | ... | @@ -103,6 +107,7 @@ class AccountControllerTest < Test::Unit::TestCase |
103 | 107 | new_user(:email => nil) |
104 | 108 | assert assigns(:user).errors.on(:email) |
105 | 109 | assert_response :success |
110 | + assert_nil assigns(:register_pending) | |
106 | 111 | end |
107 | 112 | end |
108 | 113 | |
... | ... | @@ -111,6 +116,7 @@ class AccountControllerTest < Test::Unit::TestCase |
111 | 116 | Environment.default.update_attributes(:terms_of_use => 'some terms ...') |
112 | 117 | new_user |
113 | 118 | assert_response :success |
119 | + assert_nil assigns(:register_pending) | |
114 | 120 | end |
115 | 121 | end |
116 | 122 | |
... | ... | @@ -118,7 +124,8 @@ class AccountControllerTest < Test::Unit::TestCase |
118 | 124 | assert_difference User, :count do |
119 | 125 | Environment.default.update_attributes(:terms_of_use => 'some terms ...') |
120 | 126 | new_user(:terms_accepted => '1') |
121 | - assert_response :redirect | |
127 | + assert_response :success | |
128 | + assert_not_nil assigns(:register_pending) | |
122 | 129 | end |
123 | 130 | end |
124 | 131 | |
... | ... | @@ -643,7 +650,7 @@ class AccountControllerTest < Test::Unit::TestCase |
643 | 650 | Person.any_instance.stubs(:required_fields).returns(['organization']) |
644 | 651 | assert_difference User, :count do |
645 | 652 | post :signup, :user => { :login => 'testuser', :password => '123456', :password_confirmation => '123456', :email => 'testuser@example.com' }, :profile_data => { :organization => 'example.com' } |
646 | - assert_redirected_to :controller => 'home' | |
653 | + assert_response :success | |
647 | 654 | end |
648 | 655 | assert_equal 'example.com', Person['testuser'].organization |
649 | 656 | end |
... | ... | @@ -692,7 +699,8 @@ class AccountControllerTest < Test::Unit::TestCase |
692 | 699 | should 'activate user when activation code is present and correct' do |
693 | 700 | user = User.create! :login => 'testuser', :password => 'test123', :password_confirmation => 'test123', :email => 'test@test.org' |
694 | 701 | get :activate, :activation_code => user.activation_code |
695 | - assert_redirected_to :action => :login, :userlogin => user.login | |
702 | + assert_not_nil assigns(:message) | |
703 | + assert_response :success | |
696 | 704 | post :login, :user => {:login => 'testuser', :password => 'test123'} |
697 | 705 | assert_not_nil session[:user] |
698 | 706 | assert_redirected_to :controller => 'profile_editor', :profile => 'testuser' |
... | ... | @@ -702,6 +710,7 @@ class AccountControllerTest < Test::Unit::TestCase |
702 | 710 | @request.env["HTTP_REFERER"] = '/bli' |
703 | 711 | user = User.create! :login => 'testuser', :password => 'test123', :password_confirmation => 'test123', :email => 'test@test.org' |
704 | 712 | get :activate |
713 | + assert_nil assigns(:message) | |
705 | 714 | post :login, :user => {:login => 'testuser', :password => 'test123'} |
706 | 715 | assert_nil session[:user] |
707 | 716 | assert_redirected_to '/bli' |
... | ... | @@ -711,6 +720,7 @@ class AccountControllerTest < Test::Unit::TestCase |
711 | 720 | @request.env["HTTP_REFERER"] = '/bli' |
712 | 721 | user = User.create! :login => 'testuser', :password => 'test123', :password_confirmation => 'test123', :email => 'test@test.org' |
713 | 722 | get :activate, :activation_code => 'wrongcode' |
723 | + assert_nil assigns(:message) | |
714 | 724 | post :login, :user => {:login => 'testuser', :password => 'test123'} |
715 | 725 | assert_nil session[:user] |
716 | 726 | assert_redirected_to '/bli' | ... | ... |
test/integration/signup_test.rb
... | ... | @@ -24,10 +24,8 @@ class SignupTest < ActionController::IntegrationTest |
24 | 24 | assert_equal mail_count, ActionMailer::Base.deliveries.count |
25 | 25 | |
26 | 26 | post '/account/signup', :user => { :login => 'shouldaccepterms', :password => 'test', :password_confirmation => 'test', :email => 'shouldaccepterms@example.com', :terms_accepted => '1' }, :profile_data => person_data |
27 | - assert_response :redirect | |
27 | + assert_response :success | |
28 | 28 | |
29 | - follow_redirect! | |
30 | - assert_response :redirect | |
31 | 29 | assert_equal count + 1, User.count |
32 | 30 | assert_equal mail_count + 1, ActionMailer::Base.deliveries.count |
33 | 31 | ... | ... |
test/integration/user_registers_at_the_application_test.rb
... | ... | @@ -13,9 +13,8 @@ class UserRegistersAtTheApplicationTest < ActionController::IntegrationTest |
13 | 13 | assert_response :success |
14 | 14 | |
15 | 15 | post '/account/signup', :user => { :login => 'mylogin', :password => 'mypassword', :password_confirmation => 'mypassword', :email => 'mylogin@example.com' } |
16 | - assert_response :redirect | |
16 | + assert_response :success | |
17 | 17 | |
18 | - follow_redirect! | |
19 | 18 | assert_tag :tag => 'a', :attributes => { :href => /^\/account\/login/ } |
20 | 19 | end |
21 | 20 | ... | ... |
... | ... | @@ -0,0 +1,39 @@ |
1 | +require File.dirname(__FILE__) + '/../test_helper' | |
2 | + | |
3 | +class NotifyActivityToProfilesJobTest < ActiveSupport::TestCase | |
4 | + | |
5 | + should 'create job on user creation' do | |
6 | + assert_difference Delayed::Job, :count, 1 do | |
7 | + user = new_user :login => 'test1' | |
8 | + assert_equal user.id, YAML.load(Delayed::Job.last.handler).user_id | |
9 | + end | |
10 | + process_delayed_job_queue | |
11 | + end | |
12 | + | |
13 | + should 'destroy user if not activated' do | |
14 | + user = new_user :login => 'test2' | |
15 | + job = UserActivationJob.new(user.id) | |
16 | + assert_difference User, :count, -1 do | |
17 | + job.perform | |
18 | + process_delayed_job_queue | |
19 | + end | |
20 | + end | |
21 | + | |
22 | + should 'not destroy user if activated' do | |
23 | + user = new_user :login => 'test3' | |
24 | + user.activate | |
25 | + job = UserActivationJob.new(user.id) | |
26 | + assert_no_difference User, :count do | |
27 | + job.perform | |
28 | + process_delayed_job_queue | |
29 | + end | |
30 | + end | |
31 | + | |
32 | + protected | |
33 | + def new_user(options = {}) | |
34 | + user = User.new({ :login => 'quire', :email => 'quire@example.com', :password => 'quire', :password_confirmation => 'quire' }.merge(options)) | |
35 | + user.save | |
36 | + user | |
37 | + end | |
38 | + | |
39 | +end | ... | ... |
test/unit/user_test.rb
... | ... | @@ -472,6 +472,12 @@ class UserTest < Test::Unit::TestCase |
472 | 472 | assert user.activated? |
473 | 473 | end |
474 | 474 | |
475 | + should 'delay activation check' do | |
476 | + assert_difference Delayed::Job, :count, 1 do | |
477 | + user = new_user | |
478 | + end | |
479 | + end | |
480 | + | |
475 | 481 | protected |
476 | 482 | def new_user(options = {}) |
477 | 483 | user = User.new({ :login => 'quire', :email => 'quire@example.com', :password => 'quire', :password_confirmation => 'quire' }.merge(options)) | ... | ... |