From 692bbc33f1ccb23d8aa360de7fccd99d3e302af8 Mon Sep 17 00:00:00 2001 From: JoenioCosta Date: Wed, 28 May 2008 01:50:49 +0000 Subject: [PATCH] ActionItem165: members to closed organization must be aproved by admin --- app/controllers/my_profile/memberships_controller.rb | 8 +++++++- app/models/add_member.rb | 24 ++++++++++++++++++++++++ app/models/organization.rb | 5 +++++ test/functional/memberships_controller_test.rb | 9 +++++++++ test/unit/add_member_test.rb | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ test/unit/organization_test.rb | 6 ++++++ 6 files changed, 115 insertions(+), 1 deletion(-) create mode 100644 app/models/add_member.rb create mode 100644 test/unit/add_member_test.rb diff --git a/app/controllers/my_profile/memberships_controller.rb b/app/controllers/my_profile/memberships_controller.rb index 7719736..7cdbdfb 100644 --- a/app/controllers/my_profile/memberships_controller.rb +++ b/app/controllers/my_profile/memberships_controller.rb @@ -9,7 +9,13 @@ class MembershipsController < MyProfileController def join @to_join = Profile.find(params[:id]) if request.post? && params[:confirmation] - @to_join.add_member(profile) + if @to_join.closed? + # FIXME closed field added to organization, dont to profile. its correct? + AddMember.create!(:person => profile, :community => @to_join) + else + @to_join.add_member(profile) + end + redirect_to @to_join.url end end diff --git a/app/models/add_member.rb b/app/models/add_member.rb new file mode 100644 index 0000000..20ea17b --- /dev/null +++ b/app/models/add_member.rb @@ -0,0 +1,24 @@ +class AddMember < Task + + validates_presence_of :requestor_id, :target_id + + alias :person :requestor + alias :person= :requestor= + + alias :community :target + alias :community= :target= + + def perform + target.add_member(requestor) + end + + # FIXME should send email to community admin? + def sends_email? + false + end + + def description + _('%s wants to be a member') % requestor.name + end + +end diff --git a/app/models/organization.rb b/app/models/organization.rb index be8fbac..087f5fc 100644 --- a/app/models/organization.rb +++ b/app/models/organization.rb @@ -1,6 +1,11 @@ # Represents any organization of the system class Organization < Profile + settings_items :closed, :type => :boolean, :default => false + def closed? + closed + end + belongs_to :region has_one :validation_info diff --git a/test/functional/memberships_controller_test.rb b/test/functional/memberships_controller_test.rb index 8c332b7..ec72917 100644 --- a/test/functional/memberships_controller_test.rb +++ b/test/functional/memberships_controller_test.rb @@ -142,4 +142,13 @@ class MembershipsControllerTest < Test::Unit::TestCase assert_not_includes profile.memberships, community end + should 'create task when join to closed organization' do + community = Community.create!(:name => 'my test community', :closed => true) + assert_difference AddMember, :count do + post :join, :profile => profile.identifier, :id => community.id, :confirmation => '1' + end + end + + should 'show task to organization administrador' + end diff --git a/test/unit/add_member_test.rb b/test/unit/add_member_test.rb new file mode 100644 index 0000000..cce4d47 --- /dev/null +++ b/test/unit/add_member_test.rb @@ -0,0 +1,64 @@ +require File.dirname(__FILE__) + '/../test_helper' + +class AddMemberTest < ActiveSupport::TestCase + + should 'be a task' do + ok { AddMember.new.kind_of?(Task) } + end + + should 'actually add memberships when confirmed' do + p = create_user('testuser1').person + c = Community.create!(:name => 'closed community', :closed => true) + task = AddMember.create!(:person => p, :community => c) + assert_difference c, :members, [p] do + task.finish + c.reload + end + end + + should 'require requestor' do + task = AddMember.new + task.valid? + + ok('must not validate with empty requestor') { task.errors.invalid?(:requestor_id) } + + task.requestor = Person.new + task.valid? + ok('must validate when requestor is given') { task.errors.invalid?(:requestor_id)} + end + + should 'require target' do + task = AddMember.new + task.valid? + + ok('must not validate with empty target') { task.errors.invalid?(:target_id) } + + task.target = Person.new + task.valid? + ok('must validate when target is given') { task.errors.invalid?(:target_id)} + end + + should 'not send e-mails' do + p = create_user('testuser1').person + c = Community.create!(:name => 'closed community', :closed => true) + + TaskMailer.expects(:deliver_task_finished).never + TaskMailer.expects(:deliver_task_created).never + + task = AddMember.create!(:person => p, :community => c) + task.finish + end + + should 'provide proper description' do + p = create_user('testuser1').person + c = Community.create!(:name => 'closed community', :closed => true) + + TaskMailer.expects(:deliver_task_finished).never + TaskMailer.expects(:deliver_task_created).never + + task = AddMember.create!(:person => p, :community => c) + + assert_equal 'testuser1 wants to be a member', task.description + end + +end diff --git a/test/unit/organization_test.rb b/test/unit/organization_test.rb index b96fc68..cae9e44 100644 --- a/test/unit/organization_test.rb +++ b/test/unit/organization_test.rb @@ -156,4 +156,10 @@ class OrganizationTest < Test::Unit::TestCase assert(summary.any? { |line| line[1] == 'my contact email' }) end + should 'has closed' do + org = Organization.new + assert_respond_to org, :closed + assert_respond_to org, :closed? + end + end -- libgit2 0.21.2