Commit 692bbc33f1ccb23d8aa360de7fccd99d3e302af8
1 parent
9ea382de
Exists in
master
and in
29 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 |