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 | 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 | ... | ... |