Commit 692bbc33f1ccb23d8aa360de7fccd99d3e302af8
1 parent
9ea382de
Exists in
master
and in
28 other branches
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
Showing
6 changed files
with
115 additions
and
1 deletions
Show diff stats
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 | ... | ... |
| ... | ... | @@ -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
test/functional/memberships_controller_test.rb
| ... | ... | @@ -142,4 +142,13 @@ class MembershipsControllerTest < 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 | ... | ... |
| ... | ... | @@ -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 < 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 | ... | ... |