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,7 +9,13 @@ class MembershipsController < MyProfileController | ||
| 9 | def join | 9 | def join |
| 10 | @to_join = Profile.find(params[:id]) | 10 | @to_join = Profile.find(params[:id]) |
| 11 | if request.post? && params[:confirmation] | 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 | redirect_to @to_join.url | 19 | redirect_to @to_join.url |
| 14 | end | 20 | end |
| 15 | end | 21 | end |
| @@ -0,0 +1,24 @@ | @@ -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 | # Represents any organization of the system | 1 | # Represents any organization of the system |
| 2 | class Organization < Profile | 2 | class Organization < Profile |
| 3 | 3 | ||
| 4 | + settings_items :closed, :type => :boolean, :default => false | ||
| 5 | + def closed? | ||
| 6 | + closed | ||
| 7 | + end | ||
| 8 | + | ||
| 4 | belongs_to :region | 9 | belongs_to :region |
| 5 | 10 | ||
| 6 | has_one :validation_info | 11 | has_one :validation_info |
test/functional/memberships_controller_test.rb
| @@ -142,4 +142,13 @@ class MembershipsControllerTest < Test::Unit::TestCase | @@ -142,4 +142,13 @@ class MembershipsControllerTest < Test::Unit::TestCase | ||
| 142 | assert_not_includes profile.memberships, community | 142 | assert_not_includes profile.memberships, community |
| 143 | end | 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 | end | 154 | end |
| @@ -0,0 +1,64 @@ | @@ -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,4 +156,10 @@ class OrganizationTest < Test::Unit::TestCase | ||
| 156 | assert(summary.any? { |line| line[1] == 'my contact email' }) | 156 | assert(summary.any? { |line| line[1] == 'my contact email' }) |
| 157 | end | 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 | end | 165 | end |