diff --git a/app/controllers/public/account_controller.rb b/app/controllers/public/account_controller.rb index a8458b9..0baaadd 100644 --- a/app/controllers/public/account_controller.rb +++ b/app/controllers/public/account_controller.rb @@ -19,11 +19,11 @@ class AccountController < ApplicationController def activate @user = User.find_by_activation_code(params[:activation_code]) if params[:activation_code] if @user and @user.activate - session[:notice] = _("Your account has been activated, now you can log in!") - redirect_to :action => 'login', :userlogin => @user.login + @message = _("Your account has been activated, now you can log in!") + render :action => 'login', :userlogin => @user.login else session[:notice] = _("It looks like you're trying to activate an account. Perhaps have already activated this account?") - redirect_back_or_default(:controller => 'home') + redirect_to :controller => :home end end @@ -78,8 +78,7 @@ class AccountController < ApplicationController invitation.update_attributes!({:friend => @user.person}) invitation.finish end - session[:notice] = _("Thanks for signing up! Now go to your e-mail and activate your account.") - redirect_back_or_default(:controller => 'home') + @register_pending = true end rescue ActiveRecord::RecordInvalid @person.valid? diff --git a/app/models/user.rb b/app/models/user.rb index e991924..7d6b2d9 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -37,6 +37,7 @@ class User < ActiveRecord::Base user.person.save! end after_create :deliver_activation_code + after_create :delay_activation_check attr_writer :person_data def person_data @@ -290,4 +291,8 @@ class User < ActiveRecord::Base def deliver_activation_code User::Mailer.deliver_activation_code(self) unless self.activation_code.blank? end + + def delay_activation_check + Delayed::Job.enqueue(UserActivationJob.new(self.id), 0, 72.hours.from_now) + end end diff --git a/app/views/account/login.rhtml b/app/views/account/login.rhtml index 3e8bf97..69ec0fc 100644 --- a/app/views/account/login.rhtml +++ b/app/views/account/login.rhtml @@ -5,6 +5,8 @@ <% @user ||= User.new %> <% is_thickbox ||= false %> +<%= @message %> + <% labelled_form_for :user, @user, :url => login_url do |f| %> <%= f.text_field :login, :id => 'main_user_login', :onchange => 'this.value = convToValidLogin( this.value )', :value => params[:userlogin] %> diff --git a/app/views/account/signup.rhtml b/app/views/account/signup.rhtml index 91dc999..3ddb693 100644 --- a/app/views/account/signup.rhtml +++ b/app/views/account/signup.rhtml @@ -1,2 +1,7 @@
<%= link_to(_('Go to the homepage'), '/') %>
+<% else %> + <%= render :partial => 'signup_form' %> +<% end %> diff --git a/lib/user_activation_job.rb b/lib/user_activation_job.rb new file mode 100644 index 0000000..84f5b9f --- /dev/null +++ b/lib/user_activation_job.rb @@ -0,0 +1,6 @@ +class UserActivationJob < Struct.new(:user_id) + def perform + user = User.find(user_id) + user.destroy unless user.activated? + end +end diff --git a/test/functional/account_controller_test.rb b/test/functional/account_controller_test.rb index e7e32e7..913aadb 100644 --- a/test/functional/account_controller_test.rb +++ b/test/functional/account_controller_test.rb @@ -70,7 +70,8 @@ class AccountControllerTest < Test::Unit::TestCase def test_should_allow_signup assert_difference User, :count do new_user - assert_response :redirect + assert_response :success + assert_not_nil assigns(:register_pending) end end @@ -79,6 +80,7 @@ class AccountControllerTest < Test::Unit::TestCase new_user(:login => nil) assert assigns(:user).errors.on(:login) assert_response :success + assert_nil assigns(:register_pending) end end @@ -87,6 +89,7 @@ class AccountControllerTest < Test::Unit::TestCase new_user(:password => nil) assert assigns(:user).errors.on(:password) assert_response :success + assert_nil assigns(:register_pending) end end @@ -95,6 +98,7 @@ class AccountControllerTest < Test::Unit::TestCase new_user(:password_confirmation => nil) assert assigns(:user).errors.on(:password_confirmation) assert_response :success + assert_nil assigns(:register_pending) end end @@ -103,6 +107,7 @@ class AccountControllerTest < Test::Unit::TestCase new_user(:email => nil) assert assigns(:user).errors.on(:email) assert_response :success + assert_nil assigns(:register_pending) end end @@ -111,6 +116,7 @@ class AccountControllerTest < Test::Unit::TestCase Environment.default.update_attributes(:terms_of_use => 'some terms ...') new_user assert_response :success + assert_nil assigns(:register_pending) end end @@ -118,7 +124,8 @@ class AccountControllerTest < Test::Unit::TestCase assert_difference User, :count do Environment.default.update_attributes(:terms_of_use => 'some terms ...') new_user(:terms_accepted => '1') - assert_response :redirect + assert_response :success + assert_not_nil assigns(:register_pending) end end @@ -643,7 +650,7 @@ class AccountControllerTest < Test::Unit::TestCase Person.any_instance.stubs(:required_fields).returns(['organization']) assert_difference User, :count do post :signup, :user => { :login => 'testuser', :password => '123456', :password_confirmation => '123456', :email => 'testuser@example.com' }, :profile_data => { :organization => 'example.com' } - assert_redirected_to :controller => 'home' + assert_response :success end assert_equal 'example.com', Person['testuser'].organization end @@ -692,7 +699,8 @@ class AccountControllerTest < Test::Unit::TestCase should 'activate user when activation code is present and correct' do user = User.create! :login => 'testuser', :password => 'test123', :password_confirmation => 'test123', :email => 'test@test.org' get :activate, :activation_code => user.activation_code - assert_redirected_to :action => :login, :userlogin => user.login + assert_not_nil assigns(:message) + assert_response :success post :login, :user => {:login => 'testuser', :password => 'test123'} assert_not_nil session[:user] assert_redirected_to :controller => 'profile_editor', :profile => 'testuser' @@ -702,6 +710,7 @@ class AccountControllerTest < Test::Unit::TestCase @request.env["HTTP_REFERER"] = '/bli' user = User.create! :login => 'testuser', :password => 'test123', :password_confirmation => 'test123', :email => 'test@test.org' get :activate + assert_nil assigns(:message) post :login, :user => {:login => 'testuser', :password => 'test123'} assert_nil session[:user] assert_redirected_to '/bli' @@ -711,6 +720,7 @@ class AccountControllerTest < Test::Unit::TestCase @request.env["HTTP_REFERER"] = '/bli' user = User.create! :login => 'testuser', :password => 'test123', :password_confirmation => 'test123', :email => 'test@test.org' get :activate, :activation_code => 'wrongcode' + assert_nil assigns(:message) post :login, :user => {:login => 'testuser', :password => 'test123'} assert_nil session[:user] assert_redirected_to '/bli' diff --git a/test/integration/signup_test.rb b/test/integration/signup_test.rb index d8ab192..396b04f 100644 --- a/test/integration/signup_test.rb +++ b/test/integration/signup_test.rb @@ -24,10 +24,8 @@ class SignupTest < ActionController::IntegrationTest assert_equal mail_count, ActionMailer::Base.deliveries.count post '/account/signup', :user => { :login => 'shouldaccepterms', :password => 'test', :password_confirmation => 'test', :email => 'shouldaccepterms@example.com', :terms_accepted => '1' }, :profile_data => person_data - assert_response :redirect + assert_response :success - follow_redirect! - assert_response :redirect assert_equal count + 1, User.count assert_equal mail_count + 1, ActionMailer::Base.deliveries.count diff --git a/test/integration/user_registers_at_the_application_test.rb b/test/integration/user_registers_at_the_application_test.rb index 04b326f..fb364e3 100644 --- a/test/integration/user_registers_at_the_application_test.rb +++ b/test/integration/user_registers_at_the_application_test.rb @@ -13,9 +13,8 @@ class UserRegistersAtTheApplicationTest < ActionController::IntegrationTest assert_response :success post '/account/signup', :user => { :login => 'mylogin', :password => 'mypassword', :password_confirmation => 'mypassword', :email => 'mylogin@example.com' } - assert_response :redirect + assert_response :success - follow_redirect! assert_tag :tag => 'a', :attributes => { :href => /^\/account\/login/ } end diff --git a/test/unit/user_activation_job_test.rb b/test/unit/user_activation_job_test.rb new file mode 100644 index 0000000..1f657b1 --- /dev/null +++ b/test/unit/user_activation_job_test.rb @@ -0,0 +1,39 @@ +require File.dirname(__FILE__) + '/../test_helper' + +class NotifyActivityToProfilesJobTest < ActiveSupport::TestCase + + should 'create job on user creation' do + assert_difference Delayed::Job, :count, 1 do + user = new_user :login => 'test1' + assert_equal user.id, YAML.load(Delayed::Job.last.handler).user_id + end + process_delayed_job_queue + end + + should 'destroy user if not activated' do + user = new_user :login => 'test2' + job = UserActivationJob.new(user.id) + assert_difference User, :count, -1 do + job.perform + process_delayed_job_queue + end + end + + should 'not destroy user if activated' do + user = new_user :login => 'test3' + user.activate + job = UserActivationJob.new(user.id) + assert_no_difference User, :count do + job.perform + process_delayed_job_queue + end + end + + protected + def new_user(options = {}) + user = User.new({ :login => 'quire', :email => 'quire@example.com', :password => 'quire', :password_confirmation => 'quire' }.merge(options)) + user.save + user + end + +end diff --git a/test/unit/user_test.rb b/test/unit/user_test.rb index 10916b7..1e42857 100644 --- a/test/unit/user_test.rb +++ b/test/unit/user_test.rb @@ -472,6 +472,12 @@ class UserTest < Test::Unit::TestCase assert user.activated? end + should 'delay activation check' do + assert_difference Delayed::Job, :count, 1 do + user = new_user + end + end + protected def new_user(options = {}) user = User.new({ :login => 'quire', :email => 'quire@example.com', :password => 'quire', :password_confirmation => 'quire' }.merge(options)) -- libgit2 0.21.2