summaryrefslogtreecommitdiffstats
path: root/test/unit/membership_test.rb
blob: 973f20076d955c953a441641b2ca0a4579dd1280 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# encoding: utf-8
#--
#   Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies)
#
#   This program is free software: you can redistribute it and/or modify
#   it under the terms of the GNU Affero General Public License as published by
#   the Free Software Foundation, either version 3 of the License, or
#   (at your option) any later version.
#
#   This program is distributed in the hope that it will be useful,
#   but WITHOUT ANY WARRANTY; without even the implied warranty of
#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#   GNU Affero General Public License for more details.
#
#   You should have received a copy of the GNU Affero General Public License
#   along with this program.  If not, see <http://www.gnu.org/licenses/>.
#++


require File.dirname(__FILE__) + '/../test_helper'

class MembershipTest < ActiveSupport::TestCase
  should "have valid associations" do
    assert_equal groups(:team_thunderbird), memberships(:team_thunderbird_mike).group
    assert_equal roles(:admin), memberships(:team_thunderbird_mike).role
    assert_equal users(:mike), memberships(:team_thunderbird_mike).user
  end
  
  context 'Adding members to a group' do
    setup do
      @group = Factory.create(:group)
      @user = @group.creator
      @inviter = Factory.create(:user)
    end
    
    should 'send a message to a newly added member after he is added to the group' do
      @user.received_messages.destroy_all
      membership = Membership.build_invitation(@inviter, :user => @user, :group => @group, :role => Role.member)
      assert membership.save
      assert_not_nil message = @user.received_messages.find(:first, :conditions => {:notifiable_id => membership.id, :notifiable_type => membership.class.name})
      assert_equal(@inviter, message.sender)
      assert_equal(membership, message.notifiable)
    end
    
    should 'nullify messages when deleted' do
      @invitee = Factory.create(:user)
      @user.received_messages.destroy_all
      membership = Membership.build_invitation(@inviter, :user => @invitee, :group => @group, :role => Role.member)
      membership.save
      message = membership.messages.first
      assert membership.destroy
      assert_nil message.reload.notifiable_type
      assert_nil message.notifiable_id
    end
    
    should 'not send a notification if no inviter is set' do
      membership = Membership.new(:user => @user, :group => @group, :role => roles(:member))
      membership.expects(:send_notification).never
      membership.save
    end
  end
  
  context 'The group creator' do
    setup do
      @group = Factory.create(:group)
      @creator = @group.creator
      @membership = Factory.create(:membership, :user => @creator, :group => @group)
      assert_equal @creator, @group.creator      
    end
    
    should 'not be demotable' do
      @membership.role = Role.member
      assert !@membership.save
      assert !@membership.valid?
    end
    
    should 'not be deletable' do
      assert !@membership.destroy
    end
  end
  
  context 'A membership' do
    setup {
      @group = Factory.create(:group)
      @membership = Factory.create(:membership, :user => @group.creator, :group => @group)
    }
    
    should 'be unique for each user' do
      duplicate_membership = Membership.new(:group => @membership.group, :user => @membership.user, :role => @membership.role)
      assert !duplicate_membership.save
    end
  end
end