group_test.rb 4.7 KB
Newer Older
jplang's avatar
jplang committed
1
# Redmine - project management software
jplang's avatar
jplang committed
2
# Copyright (C) 2006-2015  Jean-Philippe Lang
jplang's avatar
jplang committed
3 4 5 6 7
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
8
#
jplang's avatar
jplang committed
9 10 11 12
# 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 General Public License for more details.
13
#
jplang's avatar
jplang committed
14 15 16 17
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.

18
require File.expand_path('../../test_helper', __FILE__)
jplang's avatar
jplang committed
19

edavis10's avatar
edavis10 committed
20
class GroupTest < ActiveSupport::TestCase
21
  fixtures :projects, :trackers, :issue_statuses, :issues,
jplang's avatar
jplang committed
22
           :enumerations, :users,
23 24 25 26 27
           :projects_trackers,
           :roles,
           :member_roles,
           :members,
           :groups_users
jplang's avatar
jplang committed
28

29 30
  include Redmine::I18n

jplang's avatar
jplang committed
31
  def test_create
32
    g = Group.new(:name => 'New group')
jplang's avatar
jplang committed
33
    assert g.save
34 35
    g.reload
    assert_equal 'New group', g.name
jplang's avatar
jplang committed
36
  end
37

38 39 40 41 42 43 44 45
  def test_name_should_accept_255_characters
    name = 'a' * 255
    g = Group.new(:name => name)
    assert g.save
    g.reload
    assert_equal name, g.name
  end

46
  def test_blank_name_error_message
47
    set_language_if_valid 'en'
48 49
    g = Group.new
    assert !g.save
50
    assert_include "Name cannot be blank", g.errors.full_messages
51 52
  end

53 54
  def test_blank_name_error_message_fr
    set_language_if_valid 'fr'
jplang's avatar
jplang committed
55
    str = "Nom doit \xc3\xaatre renseign\xc3\xa9(e)".force_encoding('UTF-8')
56 57 58 59 60
    g = Group.new
    assert !g.save
    assert_include str, g.errors.full_messages
  end

jplang's avatar
jplang committed
61
  def test_group_roles_should_be_given_to_added_user
jplang's avatar
jplang committed
62 63 64
    group = Group.find(11)
    user = User.find(9)
    project = Project.first
65

jplang's avatar
jplang committed
66 67 68 69
    Member.create!(:principal => group, :project => project, :role_ids => [1, 2])
    group.users << user
    assert user.member_of?(project)
  end
70

jplang's avatar
jplang committed
71
  def test_new_roles_should_be_given_to_existing_user
jplang's avatar
jplang committed
72 73 74
    group = Group.find(11)
    user = User.find(9)
    project = Project.first
75

jplang's avatar
jplang committed
76 77 78 79
    group.users << user
    m = Member.create!(:principal => group, :project => project, :role_ids => [1, 2])
    assert user.member_of?(project)
  end
80

jplang's avatar
jplang committed
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
  def test_user_roles_should_updated_when_updating_user_ids
    group = Group.find(11)
    user = User.find(9)
    project = Project.first

    Member.create!(:principal => group, :project => project, :role_ids => [1, 2])
    group.user_ids = [user.id]
    group.save!
    assert User.find(9).member_of?(project)

    group.user_ids = [1]
    group.save!
    assert !User.find(9).member_of?(project)
  end

  def test_user_roles_should_updated_when_updating_group_roles
jplang's avatar
jplang committed
97 98 99 100 101 102
    group = Group.find(11)
    user = User.find(9)
    project = Project.first
    group.users << user
    m = Member.create!(:principal => group, :project => project, :role_ids => [1])
    assert_equal [1], user.reload.roles_for_project(project).collect(&:id).sort
103

jplang's avatar
jplang committed
104 105
    m.role_ids = [1, 2]
    assert_equal [1, 2], user.reload.roles_for_project(project).collect(&:id).sort
106

jplang's avatar
jplang committed
107 108
    m.role_ids = [2]
    assert_equal [2], user.reload.roles_for_project(project).collect(&:id).sort
109

jplang's avatar
jplang committed
110 111 112 113
    m.role_ids = [1]
    assert_equal [1], user.reload.roles_for_project(project).collect(&:id).sort
  end

jplang's avatar
jplang committed
114
  def test_user_memberships_should_be_removed_when_removing_group_membership
jplang's avatar
jplang committed
115 116 117 118 119
    assert User.find(8).member_of?(Project.find(5))
    Member.find_by_project_id_and_user_id(5, 10).destroy
    assert !User.find(8).member_of?(Project.find(5))
  end

jplang's avatar
jplang committed
120
  def test_user_roles_should_be_removed_when_removing_user_from_group
jplang's avatar
jplang committed
121
    assert User.find(8).member_of?(Project.find(5))
122
    User.find(8).groups = []
jplang's avatar
jplang committed
123 124
    assert !User.find(8).member_of?(Project.find(5))
  end
125

126
  def test_destroy_should_unassign_issues
127
    group = Group.find(10)
128
    Issue.where(:id => 1).update_all(["assigned_to_id = ?", group.id])
129

130 131
    assert group.destroy
    assert group.destroyed?
132

133 134
    assert_equal nil, Issue.find(1).assigned_to_id
  end
jplang's avatar
jplang committed
135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160

  def test_builtin_groups_should_be_created_if_missing
    Group.delete_all

    assert_difference 'Group.count', 2 do
      group = Group.anonymous
      assert_equal GroupAnonymous, group.class

      group = Group.non_member
      assert_equal GroupNonMember, group.class
    end
  end

  def test_builtin_in_group_should_be_uniq
    group = GroupAnonymous.new
    group.name = 'Foo'
    assert !group.save
  end

  def test_builtin_in_group_should_not_accept_users
    group = Group.anonymous
    assert_raise RuntimeError do
      group.users << User.find(1)
    end
    assert_equal 0, group.reload.users.count
  end
jplang's avatar
jplang committed
161
end