From 06cb2c6531eed0113dfe95657b845fc3d5aab71c Mon Sep 17 00:00:00 2001 From: Larissa Reis Date: Fri, 18 Jul 2014 11:55:46 -0300 Subject: [PATCH] invite-members: encapsulates logic for check of existence of task --- app/models/invitation.rb | 4 ++-- app/models/invite_friend.rb | 8 ++++++++ app/models/invite_member.rb | 8 ++++++++ test/unit/invitation_test.rb | 19 ------------------- test/unit/invite_friend_test.rb | 12 ++++++++++++ test/unit/invite_member_test.rb | 13 +++++++++++++ 6 files changed, 43 insertions(+), 21 deletions(-) diff --git a/app/models/invitation.rb b/app/models/invitation.rb index cce5965..2c42e36 100644 --- a/app/models/invitation.rb +++ b/app/models/invitation.rb @@ -77,9 +77,9 @@ class Invitation < Task if !task_args.nil? if profile.person? - InviteFriend.create(task_args) if !user || user.person.tasks.pending.of("InviteFriend").find(:all, :conditions => {:requestor_id => person.id, :target_id => user.person.id}).blank? + InviteFriend.create(task_args) elsif profile.community? - InviteMember.create(task_args.merge(:community_id => profile.id)) if !user || user.person.tasks.pending.of("InviteMember").find(:all, :conditions => {:requestor_id => person.id}).select { |t| t.data[:community_id] == profile.id }.blank? + InviteMember.create(task_args.merge(:community_id => profile.id)) else raise NotImplementedError, 'Don\'t know how to invite people to a %s' % profile.class.to_s end diff --git a/app/models/invite_friend.rb b/app/models/invite_friend.rb index 01dd780..b3b6dc5 100644 --- a/app/models/invite_friend.rb +++ b/app/models/invite_friend.rb @@ -1,6 +1,7 @@ class InviteFriend < Invitation settings_items :group_for_person, :group_for_friend + before_create :check_for_invitation_existence def perform person.add_friend(friend, group_for_person) @@ -41,4 +42,11 @@ class InviteFriend < Invitation ].join("\n\n") end + private + def check_for_invitation_existence + if friend + friend.tasks.pending.of("InviteFriend").find(:all, :conditions => {:requestor_id => person.id, :target_id => friend.id}).blank? + end + end + end diff --git a/app/models/invite_member.rb b/app/models/invite_member.rb index 84d37d8..b4c252f 100644 --- a/app/models/invite_member.rb +++ b/app/models/invite_member.rb @@ -2,6 +2,7 @@ class InviteMember < Invitation settings_items :community_id, :type => :integer validates_presence_of :community_id + before_create :check_for_invitation_existence def community Community.find(community_id) @@ -61,4 +62,11 @@ class InviteMember < Invitation ].join("\n\n") end + private + def check_for_invitation_existence + if friend + friend.tasks.pending.of("InviteMember").find(:all, :conditions => {:requestor_id => person.id}).select { |t| t.data[:community_id] == community_id }.blank? + end + end + end diff --git a/test/unit/invitation_test.rb b/test/unit/invitation_test.rb index 7909732..8576bde 100644 --- a/test/unit/invitation_test.rb +++ b/test/unit/invitation_test.rb @@ -134,23 +134,4 @@ class InvitationTest < ActiveSupport::TestCase end end - should 'not invite friends if there is a pending invitation' do - person = create_user('testuser1').person - friend = create_user('testuser2').person - community = fast_create(Community) - - assert_difference InviteMember, :count do - Invitation.invite(person, [friend.id.to_s], 'hello friend ', community) - end - assert_difference InviteFriend, :count do - Invitation.invite(person, [friend.id.to_s], 'hello friend ', person) - end - - assert_no_difference InviteMember, :count do - Invitation.invite(person, [friend.id.to_s], 'hello friend ', community) - end - assert_no_difference InviteFriend, :count do - Invitation.invite(person, [friend.id.to_s], 'hello friend ', person) - end - end end diff --git a/test/unit/invite_friend_test.rb b/test/unit/invite_friend_test.rb index 2445acf..110b90d 100644 --- a/test/unit/invite_friend_test.rb +++ b/test/unit/invite_friend_test.rb @@ -138,4 +138,16 @@ class InviteFriendTest < ActiveSupport::TestCase assert_match(/#{task.requestor.name} wants to be your friend./, email.subject) end + should 'not invite friends if there is a pending invitation' do + person = create_user('testuser1').person + friend = create_user('testuser2').person + + assert_difference 'InviteFriend.count' do + InviteFriend.create({:person => person, :target => friend}) + end + + assert_no_difference 'InviteFriend.count' do + InviteFriend.create({:person => person, :target => friend}) + end + end end diff --git a/test/unit/invite_member_test.rb b/test/unit/invite_member_test.rb index 3ace26b..ff158ff 100644 --- a/test/unit/invite_member_test.rb +++ b/test/unit/invite_member_test.rb @@ -154,4 +154,17 @@ class InviteMemberTest < ActiveSupport::TestCase assert_match(/#{task.requestor.name} invited you to join #{task.community.name}/, email.subject) end + should 'not invite member if there is a pending invitation' do + person = create_user('testuser1').person + friend = create_user('testuser2').person + community = fast_create(Community) + + assert_difference 'InviteMember.count' do + InviteMember.create({:person => person, :target => friend, :community_id => community.id}) + end + + assert_no_difference 'InviteMember.count' do + InviteMember.create({:person => person, :target => friend, :community_id => community.id}) + end + end end -- libgit2 0.21.2