diff --git a/app/models/add_friend.rb b/app/models/add_friend.rb new file mode 100644 index 0000000..d14e7e5 --- /dev/null +++ b/app/models/add_friend.rb @@ -0,0 +1,24 @@ +class AddFriend < Task + + acts_as_having_settings :group_for_person, :group_for_friend, :field => :data + + validates_presence_of :requestor_id, :target_id + + alias :person :requestor + alias :person= :requestor= + + alias :friend :target + alias :friend= :target= + + def perform + Friendship.create!(:person => requestor, :friend => target) + Friendship.create!(:person => target, :friend => requestor) + end + + # Returns false. Adding friends by itself does not trigger e-mail + # sending. + def sends_email? + false + end + +end diff --git a/test/unit/add_friend_test.rb b/test/unit/add_friend_test.rb new file mode 100644 index 0000000..518c2a3 --- /dev/null +++ b/test/unit/add_friend_test.rb @@ -0,0 +1,59 @@ +require File.dirname(__FILE__) + '/../test_helper' + +class AddFriendTest < ActiveSupport::TestCase + + should 'be a task' do + ok { AddFriend.new.kind_of?(Task) } + end + + should 'actually create friendships (two way) when confirmed' do + p1 = create_user('testuser1').person + p2 = create_user('testuser2').person + + task = AddFriend.create!(:person => p1, :friend => p2) + + assert_difference Friendship, :count, 2 do + task.finish + end + + ok('p1 should have p2 as friend') { p1.friends.include?(p2) } + ok('p2 should have p1 as friend') { p2.friends.include?(p1) } + end + + should 'require requestor (person adding other as friend)' do + task = AddFriend.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 (person being added)' do + task = AddFriend.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 + + p1 = create_user('testuser1').person + p2 = create_user('testuser2').person + + TaskMailer.expects(:deliver_task_finished).never + TaskMailer.expects(:deliver_task_created).never + + task = AddFriend.create!(:person => p1, :friend => p2) + task.finish + + end + +end -- libgit2 0.21.2