Commit 692bbc33f1ccb23d8aa360de7fccd99d3e302af8

Authored by JoenioCosta
1 parent 9ea382de

ActionItem165: members to closed organization must be aproved by admin

git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@1841 3f533792-8f58-4932-b0fe-aaf55b0a4547
app/controllers/my_profile/memberships_controller.rb
... ... @@ -9,7 +9,13 @@ class MembershipsController < MyProfileController
9 9 def join
10 10 @to_join = Profile.find(params[:id])
11 11 if request.post? && params[:confirmation]
12   - @to_join.add_member(profile)
  12 + if @to_join.closed?
  13 + # FIXME closed field added to organization, dont to profile. its correct?
  14 + AddMember.create!(:person => profile, :community => @to_join)
  15 + else
  16 + @to_join.add_member(profile)
  17 + end
  18 +
13 19 redirect_to @to_join.url
14 20 end
15 21 end
... ...
app/models/add_member.rb 0 → 100644
... ... @@ -0,0 +1,24 @@
  1 +class AddMember < Task
  2 +
  3 + validates_presence_of :requestor_id, :target_id
  4 +
  5 + alias :person :requestor
  6 + alias :person= :requestor=
  7 +
  8 + alias :community :target
  9 + alias :community= :target=
  10 +
  11 + def perform
  12 + target.add_member(requestor)
  13 + end
  14 +
  15 + # FIXME should send email to community admin?
  16 + def sends_email?
  17 + false
  18 + end
  19 +
  20 + def description
  21 + _('%s wants to be a member') % requestor.name
  22 + end
  23 +
  24 +end
... ...
app/models/organization.rb
1 1 # Represents any organization of the system
2 2 class Organization < Profile
3 3  
  4 + settings_items :closed, :type => :boolean, :default => false
  5 + def closed?
  6 + closed
  7 + end
  8 +
4 9 belongs_to :region
5 10  
6 11 has_one :validation_info
... ...
test/functional/memberships_controller_test.rb
... ... @@ -142,4 +142,13 @@ class MembershipsControllerTest &lt; Test::Unit::TestCase
142 142 assert_not_includes profile.memberships, community
143 143 end
144 144  
  145 + should 'create task when join to closed organization' do
  146 + community = Community.create!(:name => 'my test community', :closed => true)
  147 + assert_difference AddMember, :count do
  148 + post :join, :profile => profile.identifier, :id => community.id, :confirmation => '1'
  149 + end
  150 + end
  151 +
  152 + should 'show task to organization administrador'
  153 +
145 154 end
... ...
test/unit/add_member_test.rb 0 → 100644
... ... @@ -0,0 +1,64 @@
  1 +require File.dirname(__FILE__) + '/../test_helper'
  2 +
  3 +class AddMemberTest < ActiveSupport::TestCase
  4 +
  5 + should 'be a task' do
  6 + ok { AddMember.new.kind_of?(Task) }
  7 + end
  8 +
  9 + should 'actually add memberships when confirmed' do
  10 + p = create_user('testuser1').person
  11 + c = Community.create!(:name => 'closed community', :closed => true)
  12 + task = AddMember.create!(:person => p, :community => c)
  13 + assert_difference c, :members, [p] do
  14 + task.finish
  15 + c.reload
  16 + end
  17 + end
  18 +
  19 + should 'require requestor' do
  20 + task = AddMember.new
  21 + task.valid?
  22 +
  23 + ok('must not validate with empty requestor') { task.errors.invalid?(:requestor_id) }
  24 +
  25 + task.requestor = Person.new
  26 + task.valid?
  27 + ok('must validate when requestor is given') { task.errors.invalid?(:requestor_id)}
  28 + end
  29 +
  30 + should 'require target' do
  31 + task = AddMember.new
  32 + task.valid?
  33 +
  34 + ok('must not validate with empty target') { task.errors.invalid?(:target_id) }
  35 +
  36 + task.target = Person.new
  37 + task.valid?
  38 + ok('must validate when target is given') { task.errors.invalid?(:target_id)}
  39 + end
  40 +
  41 + should 'not send e-mails' do
  42 + p = create_user('testuser1').person
  43 + c = Community.create!(:name => 'closed community', :closed => true)
  44 +
  45 + TaskMailer.expects(:deliver_task_finished).never
  46 + TaskMailer.expects(:deliver_task_created).never
  47 +
  48 + task = AddMember.create!(:person => p, :community => c)
  49 + task.finish
  50 + end
  51 +
  52 + should 'provide proper description' do
  53 + p = create_user('testuser1').person
  54 + c = Community.create!(:name => 'closed community', :closed => true)
  55 +
  56 + TaskMailer.expects(:deliver_task_finished).never
  57 + TaskMailer.expects(:deliver_task_created).never
  58 +
  59 + task = AddMember.create!(:person => p, :community => c)
  60 +
  61 + assert_equal 'testuser1 wants to be a member', task.description
  62 + end
  63 +
  64 +end
... ...
test/unit/organization_test.rb
... ... @@ -156,4 +156,10 @@ class OrganizationTest &lt; Test::Unit::TestCase
156 156 assert(summary.any? { |line| line[1] == 'my contact email' })
157 157 end
158 158  
  159 + should 'has closed' do
  160 + org = Organization.new
  161 + assert_respond_to org, :closed
  162 + assert_respond_to org, :closed?
  163 + end
  164 +
159 165 end
... ...