Commit 997ef39a8aa53747eb5c3d297948a3de12ac05fa

Authored by Leandro Santos
2 parents 1be73178 e8e5c33a

Merge branch 'not_destroy_user_with_moderate_task' into 'master'

 Not destroy an user that has a pending ModerateUserRegistration task

See merge request !506
app/models/user.rb
@@ -159,6 +159,7 @@ class User < ActiveRecord::Base @@ -159,6 +159,7 @@ class User < ActiveRecord::Base
159 @task.name = self.name 159 @task.name = self.name
160 @task.email = self.email 160 @task.email = self.email
161 @task.target = self.environment 161 @task.target = self.environment
  162 + @task.requestor = self.person
162 @task.save 163 @task.save
163 end 164 end
164 165
@@ -301,6 +302,10 @@ class User < ActiveRecord::Base @@ -301,6 +302,10 @@ class User < ActiveRecord::Base
301 end 302 end
302 end 303 end
303 304
  305 + def moderate_registration_pending?
  306 + return ModerateUserRegistration.exists?(:requestor_id => self.person.id, :target_id => self.environment.id, :status => Task::Status::ACTIVE)
  307 + end
  308 +
304 def data_hash(gravatar_default = nil) 309 def data_hash(gravatar_default = nil)
305 friends_list = {} 310 friends_list = {}
306 enterprises = person.enterprises.map { |e| { 'name' => e.short_name, 'identifier' => e.identifier } } 311 enterprises = person.enterprises.map { |e| { 'name' => e.short_name, 'identifier' => e.identifier } }
lib/user_activation_job.rb
1 class UserActivationJob < Struct.new(:user_id) 1 class UserActivationJob < Struct.new(:user_id)
2 def perform 2 def perform
3 user = User.find(user_id) 3 user = User.find(user_id)
4 - user.destroy unless user.activated? || user.person.is_template? 4 + user.destroy unless user.activated? || user.person.is_template? || user.moderate_registration_pending?
5 end 5 end
6 end 6 end
test/unit/user_activation_job_test.rb
@@ -40,6 +40,18 @@ class UserActivationJobTest &lt; ActiveSupport::TestCase @@ -40,6 +40,18 @@ class UserActivationJobTest &lt; ActiveSupport::TestCase
40 end 40 end
41 end 41 end
42 42
  43 + should 'not destroy user if a moderate user registration task exists' do
  44 + env = Environment.default
  45 + env.enable('skip_new_user_email_confirmation')
  46 + env.enable('admin_must_approve_new_users')
  47 + user = new_user :login => 'test3'
  48 + job = UserActivationJob.new(user.id)
  49 + assert_no_difference 'User.count' do
  50 + job.perform
  51 + process_delayed_job_queue
  52 + end
  53 + end
  54 +
43 protected 55 protected
44 def new_user(options = {}) 56 def new_user(options = {})
45 user = User.new({ :login => 'quire', :email => 'quire@example.com', :password => 'quire', :password_confirmation => 'quire' }.merge(options)) 57 user = User.new({ :login => 'quire', :email => 'quire@example.com', :password => 'quire', :password_confirmation => 'quire' }.merge(options))
test/unit/user_test.rb
@@ -302,6 +302,17 @@ class UserTest &lt; ActiveSupport::TestCase @@ -302,6 +302,17 @@ class UserTest &lt; ActiveSupport::TestCase
302 assert !user.email_activation_pending? 302 assert !user.email_activation_pending?
303 end 303 end
304 304
  305 + should 'has moderate registration pending' do
  306 + user = create_user('cooler')
  307 + ModerateUserRegistration.create!(:requestor => user.person, :target => Environment.default)
  308 + assert user.moderate_registration_pending?
  309 + end
  310 +
  311 + should 'not has moderate registration pending if not have a pending task' do
  312 + user = create_user('cooler')
  313 + assert !user.moderate_registration_pending?
  314 + end
  315 +
305 should 'be able to use [] operator to find users by login' do 316 should 'be able to use [] operator to find users by login' do
306 user = fast_create(User) 317 user = fast_create(User)
307 assert_equal user, User[user.login] 318 assert_equal user, User[user.login]