Commit 1413969c5200958024d1bb478efc49bccf598867

Authored by André Guedes
1 parent 3d957d28
Exists in api_tasks

Fixed validation and task's tests

Signed-off-by: André Bernardes <andrebsguedes@gmail.com>
Signed-off-by: Eduardo Vital <vitaldu@gmail.com>
app/models/add_friend.rb
@@ -14,8 +14,8 @@ class AddFriend &lt; Task @@ -14,8 +14,8 @@ class AddFriend &lt; Task
14 alias :friend :target 14 alias :friend :target
15 alias :friend= :target= 15 alias :friend= :target=
16 16
17 - validate :requestor_is_person  
18 - validate :target_is_person 17 + validates :requestor, :kind_of => { :kind => Person }
  18 + validates :target, :kind_of => { :kind => Person }
19 19
20 after_create do |task| 20 after_create do |task|
21 TaskMailer.invitation_notification(task).deliver unless task.friend 21 TaskMailer.invitation_notification(task).deliver unless task.friend
@@ -27,18 +27,6 @@ class AddFriend &lt; Task @@ -27,18 +27,6 @@ class AddFriend &lt; Task
27 requestor.add_friend(target, group_for_person) 27 requestor.add_friend(target, group_for_person)
28 end 28 end
29 29
30 - def requestor_is_person  
31 - unless requestor.person?  
32 - errors.add(:add_friend, N_('Requestor must be a person.'))  
33 - end  
34 - end  
35 -  
36 - def target_is_person  
37 - unless target.person?  
38 - errors.add(:add_friend, N_('Target must be a person.'))  
39 - end  
40 - end  
41 -  
42 def permission 30 def permission
43 :manage_friends 31 :manage_friends
44 end 32 end
app/models/add_member.rb
@@ -2,8 +2,8 @@ class AddMember &lt; Task @@ -2,8 +2,8 @@ class AddMember &lt; Task
2 2
3 validates_presence_of :requestor_id, :target_id 3 validates_presence_of :requestor_id, :target_id
4 4
5 - validate :requestor_is_person  
6 - validate :target_is_organization 5 + validates :requestor, kind_of: {kind: Person}
  6 + validates :target, kind_of: {kind: Organization}
7 7
8 alias :person :requestor 8 alias :person :requestor
9 alias :person= :requestor= 9 alias :person= :requestor=
@@ -58,16 +58,4 @@ class AddMember &lt; Task @@ -58,16 +58,4 @@ class AddMember &lt; Task
58 suggestion.disable if suggestion 58 suggestion.disable if suggestion
59 end 59 end
60 60
61 - def requestor_is_person  
62 - unless requestor.person?  
63 - errors.add(:add_member, N_('Requestor must be a person.'))  
64 - end  
65 - end  
66 -  
67 - def target_is_organization  
68 - unless target.organization?  
69 - errors.add(:add_member, N_('Target must be an organization.'))  
70 - end  
71 - end  
72 -  
73 end 61 end
app/models/approve_article.rb
1 class ApproveArticle < Task 1 class ApproveArticle < Task
2 validates_presence_of :requestor_id, :target_id 2 validates_presence_of :requestor_id, :target_id
3 3
4 - validate :requestor_is_person  
5 - validate :target_is_organization  
6 - validate :request_is_member_of_target 4 + validates :requestor, kind_of: {kind: Person}
  5 + #validates :target, kind_of: {kind: Organization}
  6 + #validate :request_is_member_of_target
7 7
8 def article_title 8 def article_title
9 article ? article.title : _('(The original text was removed)') 9 article ? article.title : _('(The original text was removed)')
10 end 10 end
11 - 11 +
12 def article 12 def article
13 Article.find_by_id data[:article_id] 13 Article.find_by_id data[:article_id]
14 end 14 end
@@ -132,20 +132,8 @@ class ApproveArticle &lt; Task @@ -132,20 +132,8 @@ class ApproveArticle &lt; Task
132 message 132 message
133 end 133 end
134 134
135 - def requestor_is_person  
136 - unless requestor.person?  
137 - errors.add(:approve_article, N_('Requestor must be a person.'))  
138 - end  
139 - end  
140 -  
141 - def target_is_organization  
142 - unless target.organization?  
143 - errors.add(:approve_article, N_('Target must be an organization.'))  
144 - end  
145 - end  
146 -  
147 def request_is_member_of_target 135 def request_is_member_of_target
148 - unless requestor.is_member_of?(target) 136 + unless requestor.is_member_of?(target)
149 errors.add(:approve_article, N_('Requestor must be a member of target.')) 137 errors.add(:approve_article, N_('Requestor must be a member of target.'))
150 end 138 end
151 end 139 end
app/models/change_password.rb
@@ -18,7 +18,7 @@ class ChangePassword &lt; Task @@ -18,7 +18,7 @@ class ChangePassword &lt; Task
18 18
19 validates_presence_of :requestor 19 validates_presence_of :requestor
20 20
21 - validate :requestor_is_person 21 + validates :requestor, kind_of: {kind: Person}
22 22
23 ################################################### 23 ###################################################
24 # validations for updating a ChangePassword task 24 # validations for updating a ChangePassword task
@@ -74,9 +74,4 @@ class ChangePassword &lt; Task @@ -74,9 +74,4 @@ class ChangePassword &lt; Task
74 end 74 end
75 end 75 end
76 76
77 - def requestor_is_person  
78 - unless requestor.person?  
79 - errors.add(:change_password, N_('Requestor must be a person.'))  
80 - end  
81 - end  
82 end 77 end
app/models/create_community.rb
@@ -3,8 +3,8 @@ class CreateCommunity &lt; Task @@ -3,8 +3,8 @@ class CreateCommunity &lt; Task
3 validates_presence_of :requestor_id, :target_id 3 validates_presence_of :requestor_id, :target_id
4 validates_presence_of :name 4 validates_presence_of :name
5 5
6 - validate :requestor_is_person  
7 - validate :target_is_environment 6 + validates :requestor, kind_of: {kind: Person}
  7 + validates :target, kind_of: {kind: Environment}
8 8
9 alias :environment :target 9 alias :environment :target
10 alias :environment= :target= 10 alias :environment= :target=
@@ -95,16 +95,4 @@ class CreateCommunity &lt; Task @@ -95,16 +95,4 @@ class CreateCommunity &lt; Task
95 _('Your request for registering the community "%{community}" was approved. You can access %{environment} now and start using your new community.') % { :community => self.name, :environment => self.environment } 95 _('Your request for registering the community "%{community}" was approved. You can access %{environment} now and start using your new community.') % { :community => self.name, :environment => self.environment }
96 end 96 end
97 97
98 - def requestor_is_person  
99 - unless requestor.person?  
100 - errors.add(:create_community, N_('Requestor must be a person.'))  
101 - end  
102 - end  
103 -  
104 - def target_is_environment  
105 - unless target.class == Environment  
106 - errors.add(:create_community, N_('Target must be an environment.'))  
107 - end  
108 - end  
109 -  
110 end 98 end
app/models/create_enterprise.rb
@@ -27,8 +27,7 @@ class CreateEnterprise &lt; Task @@ -27,8 +27,7 @@ class CreateEnterprise &lt; Task
27 # checks for actual attributes 27 # checks for actual attributes
28 validates_presence_of :requestor_id, :target_id 28 validates_presence_of :requestor_id, :target_id
29 29
30 - validate :requestor_is_person  
31 - validate :target_is_environment 30 + validates :requestor, kind_of: {kind: Person}
32 31
33 # checks for admins required attributes 32 # checks for admins required attributes
34 DATA_FIELDS.each do |attribute| 33 DATA_FIELDS.each do |attribute|
@@ -217,16 +216,4 @@ class CreateEnterprise &lt; Task @@ -217,16 +216,4 @@ class CreateEnterprise &lt; Task
217 :validate_enterprise 216 :validate_enterprise
218 end 217 end
219 218
220 - def requestor_is_person  
221 - unless requestor.person?  
222 - errors.add(:create_enterprise, N_('Requestor must be a person.'))  
223 - end  
224 - end  
225 -  
226 - def target_is_environment  
227 - unless target.class == Environment  
228 - errors.add(:create_enterprise, N_('Target must be an environment.'))  
229 - end  
230 - end  
231 -  
232 end 219 end
app/models/email_activation.rb
@@ -2,8 +2,8 @@ class EmailActivation &lt; Task @@ -2,8 +2,8 @@ class EmailActivation &lt; Task
2 2
3 validates_presence_of :requestor_id, :target_id 3 validates_presence_of :requestor_id, :target_id
4 4
5 - validate :requestor_is_person  
6 - validate :target_is_environment 5 + validates :requestor, kind_of: {kind: Person}
  6 + validates :target, kind_of: {kind: Environment}
7 7
8 validate :already_requested, :on => :create 8 validate :already_requested, :on => :create
9 9
@@ -11,10 +11,8 @@ class EmailActivation &lt; Task @@ -11,10 +11,8 @@ class EmailActivation &lt; Task
11 alias :person :requestor 11 alias :person :requestor
12 12
13 def already_requested 13 def already_requested
14 - if self.requestor.person?  
15 - if !self.requestor.nil? && self.requestor.user.email_activation_pending?  
16 - self.errors.add(:base, _('You have already requested activation of your mailbox.'))  
17 - end 14 + if !self.requestor.nil? && self.requestor.person? && self.requestor.user.email_activation_pending?
  15 + self.errors.add(:base, _('You have already requested activation of your mailbox.'))
18 end 16 end
19 end 17 end
20 18
@@ -47,16 +45,4 @@ class EmailActivation &lt; Task @@ -47,16 +45,4 @@ class EmailActivation &lt; Task
47 false 45 false
48 end 46 end
49 47
50 - def requestor_is_person  
51 - unless requestor.person?  
52 - errors.add(:email_activation, N_('Requestor must be a person.'))  
53 - end  
54 - end  
55 -  
56 - def target_is_environment  
57 - unless target.class == Environment  
58 - errors.add(:email_activation, N_('Target must be an environment.'))  
59 - end  
60 - end  
61 -  
62 end 48 end
app/models/enterprise_activation.rb
@@ -8,8 +8,7 @@ class EnterpriseActivation &lt; Task @@ -8,8 +8,7 @@ class EnterpriseActivation &lt; Task
8 8
9 validates_presence_of :enterprise 9 validates_presence_of :enterprise
10 10
11 - validate :requestor_is_person  
12 - validate :target_is_enterprise 11 + validates :target, kind_of: {kind: Enterprise}
13 12
14 def perform 13 def perform
15 self.enterprise.enable self.requestor 14 self.enterprise.enable self.requestor
@@ -47,16 +46,4 @@ class EnterpriseActivation &lt; Task @@ -47,16 +46,4 @@ class EnterpriseActivation &lt; Task
47 end 46 end
48 end 47 end
49 48
50 - def requestor_is_person  
51 - unless requestor.person?  
52 - errors.add(:enterprise_activation, N_('Requestor must be a person.'))  
53 - end  
54 - end  
55 -  
56 - def target_is_enterprise  
57 - unless target.enterprise?  
58 - errors.add(:enterprise_activation, N_('Target must be an enterprise.'))  
59 - end  
60 - end  
61 -  
62 end 49 end
app/models/invitation.rb
@@ -6,8 +6,7 @@ class Invitation &lt; Task @@ -6,8 +6,7 @@ class Invitation &lt; Task
6 6
7 validates_presence_of :target_id, :if => Proc.new{|invite| invite.friend_email.blank?} 7 validates_presence_of :target_id, :if => Proc.new{|invite| invite.friend_email.blank?}
8 8
9 - validate :requestor_is_person  
10 - validate :target_is_person 9 + validates :requestor, kind_of: {kind: Person}
11 10
12 validates_presence_of :friend_email, :if => Proc.new{|invite| invite.target_id.blank?} 11 validates_presence_of :friend_email, :if => Proc.new{|invite| invite.target_id.blank?}
13 validates_format_of :friend_email, :with => Noosfero::Constants::EMAIL_FORMAT, :if => Proc.new{|invite| invite.target_id.blank?} 12 validates_format_of :friend_email, :with => Noosfero::Constants::EMAIL_FORMAT, :if => Proc.new{|invite| invite.target_id.blank?}
@@ -37,11 +36,9 @@ class Invitation &lt; Task @@ -37,11 +36,9 @@ class Invitation &lt; Task
37 end 36 end
38 37
39 def not_invite_yourself 38 def not_invite_yourself
40 - if friend.person? && person.person?  
41 - email = friend ? friend.user.email : friend_email  
42 - if person && email && person.user.email == email  
43 - self.errors.add(:base, _("You can't invite youself"))  
44 - end 39 + email = friend && friend.person? ? friend.user.email : friend_email
  40 + if person && email && person.user.email == email
  41 + self.errors.add(:base, _("You can't invite youself"))
45 end 42 end
46 end 43 end
47 44
@@ -141,18 +138,10 @@ class Invitation &lt; Task @@ -141,18 +138,10 @@ class Invitation &lt; Task
141 end 138 end
142 139
143 def environment 140 def environment
144 - self.requestor.environment  
145 - end  
146 -  
147 - def requestor_is_person  
148 - unless requestor.person?  
149 - errors.add(:invitation, N_('Requestor must be a person.'))  
150 - end  
151 - end  
152 -  
153 - def target_is_person  
154 - unless target.person?  
155 - errors.add(:invitation, N_('Target must be a person.')) 141 + if self.requestor
  142 + self.requestor.environment
  143 + else
  144 + nil
156 end 145 end
157 end 146 end
158 147
app/models/moderate_user_registration.rb
@@ -7,7 +7,7 @@ class ModerateUserRegistration &lt; Task @@ -7,7 +7,7 @@ class ModerateUserRegistration &lt; Task
7 7
8 after_create :schedule_spam_checking 8 after_create :schedule_spam_checking
9 9
10 - validate :target_is_environment 10 + validates :target, kind_of: {kind: Environment}
11 11
12 alias :environment :target 12 alias :environment :target
13 alias :environment= :target= 13 alias :environment= :target=
@@ -58,10 +58,4 @@ class ModerateUserRegistration &lt; Task @@ -58,10 +58,4 @@ class ModerateUserRegistration &lt; Task
58 _("User \"%{user}\" just requested to register. You have to approve or reject it through the \"Pending Validations\" section in your control panel.\n") % { :user => self.name } 58 _("User \"%{user}\" just requested to register. You have to approve or reject it through the \"Pending Validations\" section in your control panel.\n") % { :user => self.name }
59 end 59 end
60 60
61 - def target_is_environment  
62 - unless environment.class == Environment  
63 - errors.add(:moderate_user_registration, N_('Target must be an environment.'))  
64 - end  
65 - end  
66 -  
67 end 61 end
68 \ No newline at end of file 62 \ No newline at end of file
app/models/suggest_article.rb
@@ -4,8 +4,6 @@ class SuggestArticle &lt; Task @@ -4,8 +4,6 @@ class SuggestArticle &lt; Task
4 validates_presence_of :email, :name, :if => Proc.new { |task| task.requestor.blank? } 4 validates_presence_of :email, :name, :if => Proc.new { |task| task.requestor.blank? }
5 validates_associated :article_object 5 validates_associated :article_object
6 6
7 - validate :target_is_organization  
8 -  
9 settings_items :email, :type => String 7 settings_items :email, :type => String
10 settings_items :name, :type => String 8 settings_items :name, :type => String
11 settings_items :ip_address, :type => String 9 settings_items :ip_address, :type => String
@@ -95,9 +93,4 @@ class SuggestArticle &lt; Task @@ -95,9 +93,4 @@ class SuggestArticle &lt; Task
95 self.delay.marked_as_ham 93 self.delay.marked_as_ham
96 end 94 end
97 95
98 - def target_is_organization  
99 - unless target.organization?  
100 - errors.add(:suggest_article, N_('Target must be an organization.'))  
101 - end  
102 - end  
103 end 96 end
app/models/task.rb
@@ -116,6 +116,51 @@ class Task &lt; ActiveRecord::Base @@ -116,6 +116,51 @@ class Task &lt; ActiveRecord::Base
116 end 116 end
117 end 117 end
118 118
  119 + class KindOfValidator < ActiveModel::EachValidator
  120 + def validate_each(record, attribute, value)
  121 + environment = record.environment || Environment.default
  122 + klass = options[:kind]
  123 + group = klass.to_s.downcase.pluralize
  124 + id = attribute.to_s + "_id"
  125 + if environment.respond_to?(group)
  126 + attrb = value || environment.send(group).find_by_id(record.send(id))
  127 + else
  128 + attrb = value || klass.find_by_id(record.send(id))
  129 + end
  130 + if attrb.respond_to?(klass.to_s.downcase + "?")
  131 + unless attrb.send(klass.to_s.downcase + "?")
  132 + record.errors[attribute] << (options[:message] || "should be "+ klass.to_s.downcase)
  133 + end
  134 + else
  135 + unless attrb.class == klass
  136 + record.errors[attribute] << (options[:message] || "should be "+ klass.to_s.downcase)
  137 + end
  138 + end
  139 + end
  140 + end
  141 +
  142 + def requestor_is_of_kind(klass, message = nil)
  143 + error_message = message ||= _('Task requestor must be '+klass.to_s.downcase)
  144 + group = klass.to_s.downcase.pluralize
  145 + if environment.respond_to?(group) and requestor_id
  146 + requestor = requestor ||= environment.send(klass.to_s.downcase.pluralize).find_by_id(requestor_id)
  147 + end
  148 + unless requestor.class == klass
  149 + errors.add(error_message)
  150 + end
  151 + end
  152 +
  153 + def target_is_of_kind(klass, message = nil)
  154 + error_message = message ||= _('Task target must be '+klass.to_s.downcase)
  155 + group = klass.to_s.downcase.pluralize
  156 + if environment.respond_to?(group) and target_id
  157 + target = target ||= environment.send(klass.to_s.downcase.pluralize).find_by_id(target_id)
  158 + end
  159 + unless target.class == klass
  160 + errors.add(error_message)
  161 + end
  162 + end
  163 +
119 def close(status, closed_by) 164 def close(status, closed_by)
120 self.status = status 165 self.status = status
121 self.end_date = Time.now 166 self.end_date = Time.now
lib/noosfero/api/helpers.rb
@@ -48,7 +48,6 @@ module Noosfero @@ -48,7 +48,6 @@ module Noosfero
48 Rails.application.eager_load! 48 Rails.application.eager_load!
49 ARTICLE_TYPES = ['Article'] + Article.descendants.map{|a| a.to_s} 49 ARTICLE_TYPES = ['Article'] + Article.descendants.map{|a| a.to_s}
50 TASK_TYPES = ['Task'] + Task.descendants.map{|a| a.to_s} 50 TASK_TYPES = ['Task'] + Task.descendants.map{|a| a.to_s}
51 -  
52 51
53 def find_article(articles, id) 52 def find_article(articles, id)
54 article = articles.find(id) 53 article = articles.find(id)
test/functional/tasks_controller_test.rb
@@ -114,11 +114,23 @@ class TasksControllerTest &lt; ActionController::TestCase @@ -114,11 +114,23 @@ class TasksControllerTest &lt; ActionController::TestCase
114 end 114 end
115 115
116 should 'affiliate roles to user after finish add member task' do 116 should 'affiliate roles to user after finish add member task' do
117 - t = AddMember.create!(:person => profile, :organization => profile)  
118 - count = profile.members.size 117 + c = fast_create(Community)
  118 + p = create_user('member').person
  119 +
  120 + @controller.stubs(:profile).returns(c)
  121 + c.affiliate(profile, Profile::Roles.all_roles(profile.environment.id))
  122 +
  123 + t = AddMember.create!(:person => p, :organization => c)
  124 +
  125 + count = c.members.size
  126 +
119 post :close, :tasks => {t.id => {:decision => 'finish', :task => {}}} 127 post :close, :tasks => {t.id => {:decision => 'finish', :task => {}}}
120 - profile = Profile.find(@profile.id)  
121 - assert_equal count + 1, profile.members.size 128 + t.reload
  129 +
  130 + ok('task should be finished') { t.status == Task::Status::FINISHED }
  131 +
  132 + c.reload
  133 + assert_equal count + 1, c.members.size
122 end 134 end
123 135
124 should 'display a create ticket form' do 136 should 'display a create ticket form' do
test/unit/api/task_test.rb
@@ -68,12 +68,6 @@ class TasksTest &lt; ActiveSupport::TestCase @@ -68,12 +68,6 @@ class TasksTest &lt; ActiveSupport::TestCase
68 assert_not_nil json["task"]["id"] 68 assert_not_nil json["task"]["id"]
69 end 69 end
70 70
71 - should 'not create task in a community' do  
72 - community = fast_create(Community)  
73 - post "/api/v1/communities/#{community.id}/tasks?#{params.to_query}&content_type=ApproveArticle"  
74 - assert_equal 400, last_response.status  
75 - end  
76 -  
77 should 'create task defining the requestor as current profile logged in' do 71 should 'create task defining the requestor as current profile logged in' do
78 community = fast_create(Community) 72 community = fast_create(Community)
79 community.add_member(person) 73 community.add_member(person)
@@ -167,12 +161,6 @@ class TasksTest &lt; ActiveSupport::TestCase @@ -167,12 +161,6 @@ class TasksTest &lt; ActiveSupport::TestCase
167 assert_not_nil json["task"]["id"] 161 assert_not_nil json["task"]["id"]
168 end 162 end
169 163
170 - should 'not create task in a enterprise' do  
171 - enterprise = fast_create(Enterprise)  
172 - post "/api/v1/enterprises/#{enterprise.id}/tasks?#{params.to_query}&content_type=ApproveArticle"  
173 - assert_equal 400, last_response.status  
174 - end  
175 -  
176 should 'create task defining the target as the enterprise' do 164 should 'create task defining the target as the enterprise' do
177 enterprise = fast_create(Enterprise) 165 enterprise = fast_create(Enterprise)
178 enterprise.add_member(person) 166 enterprise.add_member(person)
test/unit/approve_article_test.rb
@@ -427,7 +427,7 @@ class ApproveArticleTest &lt; ActiveSupport::TestCase @@ -427,7 +427,7 @@ class ApproveArticleTest &lt; ActiveSupport::TestCase
427 article = fast_create(Article) 427 article = fast_create(Article)
428 profile.domains << create(Domain, :name => 'example.org') 428 profile.domains << create(Domain, :name => 'example.org')
429 assert_nothing_raised do 429 assert_nothing_raised do
430 - create(ApproveArticle, :article => article, :target => profile, :requestor => community) 430 + create(ApproveArticle, :article => article, :target => profile, :requestor => profile)
431 end 431 end
432 end 432 end
433 433