diff --git a/app/models/user.rb b/app/models/user.rb index 672a7af..bf9490e 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -159,6 +159,7 @@ class User < ActiveRecord::Base @task.name = self.name @task.email = self.email @task.target = self.environment + @task.requestor = self.person @task.save end @@ -301,6 +302,10 @@ class User < ActiveRecord::Base end end + def moderate_registration_pending? + return ModerateUserRegistration.exists?(:requestor_id => self.person.id, :target_id => self.environment.id, :status => Task::Status::ACTIVE) + end + def data_hash(gravatar_default = nil) friends_list = {} enterprises = person.enterprises.map { |e| { 'name' => e.short_name, 'identifier' => e.identifier } } diff --git a/lib/user_activation_job.rb b/lib/user_activation_job.rb index 7900b20..19b1a48 100644 --- a/lib/user_activation_job.rb +++ b/lib/user_activation_job.rb @@ -1,6 +1,6 @@ class UserActivationJob < Struct.new(:user_id) def perform user = User.find(user_id) - user.destroy unless user.activated? || user.person.is_template? + user.destroy unless user.activated? || user.person.is_template? || user.moderate_registration_pending? end end diff --git a/test/unit/user_activation_job_test.rb b/test/unit/user_activation_job_test.rb index 62ea5a8..a1f454c 100644 --- a/test/unit/user_activation_job_test.rb +++ b/test/unit/user_activation_job_test.rb @@ -40,6 +40,18 @@ class UserActivationJobTest < ActiveSupport::TestCase end end + should 'not destroy user if a moderate user registration task exists' do + env = Environment.default + env.enable('skip_new_user_email_confirmation') + env.enable('admin_must_approve_new_users') + user = new_user :login => 'test3' + 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)) diff --git a/test/unit/user_test.rb b/test/unit/user_test.rb index 9f508d4..5cd1dbe 100644 --- a/test/unit/user_test.rb +++ b/test/unit/user_test.rb @@ -302,6 +302,17 @@ class UserTest < ActiveSupport::TestCase assert !user.email_activation_pending? end + should 'has moderate registration pending' do + user = create_user('cooler') + ModerateUserRegistration.create!(:requestor => user.person, :target => Environment.default) + assert user.moderate_registration_pending? + end + + should 'not has moderate registration pending if not have a pending task' do + user = create_user('cooler') + assert !user.moderate_registration_pending? + end + should 'be able to use [] operator to find users by login' do user = fast_create(User) assert_equal user, User[user.login] -- libgit2 0.21.2