To check out this repository please hg clone the following URL, or open the URL using EasyMercurial or your preferred Mercurial client.
root / .svn / pristine / 57 / 57004ea0d71683df384c4e3126bc90d754acca49.svn-base @ 1297:0a574315af3e
History | View | Annotate | Download (5.94 KB)
| 1 | 1296:038ba2d95de8 | Chris | # Redmine - project management software |
|---|---|---|---|
| 2 | # Copyright (C) 2006-2012 Jean-Philippe Lang |
||
| 3 | # |
||
| 4 | # This program is free software; you can redistribute it and/or |
||
| 5 | # modify it under the terms of the GNU General Public License |
||
| 6 | # as published by the Free Software Foundation; either version 2 |
||
| 7 | # of the License, or (at your option) any later version. |
||
| 8 | # |
||
| 9 | # This program is distributed in the hope that it will be useful, |
||
| 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of |
||
| 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||
| 12 | # GNU General Public License for more details. |
||
| 13 | # |
||
| 14 | # You should have received a copy of the GNU General Public License |
||
| 15 | # along with this program; if not, write to the Free Software |
||
| 16 | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
||
| 17 | |||
| 18 | require File.expand_path('../../test_helper', __FILE__)
|
||
| 19 | |||
| 20 | class MemberTest < ActiveSupport::TestCase |
||
| 21 | fixtures :projects, :trackers, :issue_statuses, :issues, |
||
| 22 | :enumerations, :users, :issue_categories, |
||
| 23 | :projects_trackers, |
||
| 24 | :roles, |
||
| 25 | :member_roles, |
||
| 26 | :members, |
||
| 27 | :enabled_modules, |
||
| 28 | :workflows, |
||
| 29 | :groups_users, |
||
| 30 | :watchers, |
||
| 31 | :journals, :journal_details, |
||
| 32 | :messages, |
||
| 33 | :wikis, :wiki_pages, :wiki_contents, :wiki_content_versions, |
||
| 34 | :boards |
||
| 35 | |||
| 36 | include Redmine::I18n |
||
| 37 | |||
| 38 | def setup |
||
| 39 | @jsmith = Member.find(1) |
||
| 40 | end |
||
| 41 | |||
| 42 | def test_create |
||
| 43 | member = Member.new(:project_id => 1, :user_id => 4, :role_ids => [1, 2]) |
||
| 44 | assert member.save |
||
| 45 | member.reload |
||
| 46 | |||
| 47 | assert_equal 2, member.roles.size |
||
| 48 | assert_equal Role.find(1), member.roles.sort.first |
||
| 49 | end |
||
| 50 | |||
| 51 | def test_update |
||
| 52 | assert_equal "eCookbook", @jsmith.project.name |
||
| 53 | assert_equal "Manager", @jsmith.roles.first.name |
||
| 54 | assert_equal "jsmith", @jsmith.user.login |
||
| 55 | |||
| 56 | @jsmith.mail_notification = !@jsmith.mail_notification |
||
| 57 | assert @jsmith.save |
||
| 58 | end |
||
| 59 | |||
| 60 | def test_update_roles |
||
| 61 | assert_equal 1, @jsmith.roles.size |
||
| 62 | @jsmith.role_ids = [1, 2] |
||
| 63 | assert @jsmith.save |
||
| 64 | assert_equal 2, @jsmith.reload.roles.size |
||
| 65 | end |
||
| 66 | |||
| 67 | def test_validate |
||
| 68 | member = Member.new(:project_id => 1, :user_id => 2, :role_ids => [2]) |
||
| 69 | # same use can't have more than one membership for a project |
||
| 70 | assert !member.save |
||
| 71 | |||
| 72 | # must have one role at least |
||
| 73 | user = User.new(:firstname => "new1", :lastname => "user1", :mail => "test_validate@somenet.foo") |
||
| 74 | user.login = "test_validate" |
||
| 75 | user.password, user.password_confirmation = "password", "password" |
||
| 76 | assert user.save |
||
| 77 | |||
| 78 | set_language_if_valid 'fr' |
||
| 79 | member = Member.new(:project_id => 1, :user_id => user.id, :role_ids => []) |
||
| 80 | assert !member.save |
||
| 81 | assert_include I18n.translate('activerecord.errors.messages.empty'), member.errors[:role]
|
||
| 82 | str = "R\xc3\xb4le doit \xc3\xaatre renseign\xc3\xa9(e)" |
||
| 83 | str.force_encoding('UTF-8') if str.respond_to?(:force_encoding)
|
||
| 84 | assert_equal str, [member.errors.full_messages].flatten.join |
||
| 85 | end |
||
| 86 | |||
| 87 | def test_validate_member_role |
||
| 88 | user = User.new(:firstname => "new1", :lastname => "user1", :mail => "test_validate@somenet.foo") |
||
| 89 | user.login = "test_validate_member_role" |
||
| 90 | user.password, user.password_confirmation = "password", "password" |
||
| 91 | assert user.save |
||
| 92 | member = Member.new(:project_id => 1, :user_id => user.id, :role_ids => [5]) |
||
| 93 | assert !member.save |
||
| 94 | end |
||
| 95 | |||
| 96 | def test_destroy |
||
| 97 | category1 = IssueCategory.find(1) |
||
| 98 | assert_equal @jsmith.user.id, category1.assigned_to_id |
||
| 99 | assert_difference 'Member.count', -1 do |
||
| 100 | assert_difference 'MemberRole.count', -1 do |
||
| 101 | @jsmith.destroy |
||
| 102 | end |
||
| 103 | end |
||
| 104 | assert_raise(ActiveRecord::RecordNotFound) { Member.find(@jsmith.id) }
|
||
| 105 | category1.reload |
||
| 106 | assert_nil category1.assigned_to_id |
||
| 107 | end |
||
| 108 | |||
| 109 | def test_sort_without_roles |
||
| 110 | a = Member.new(:roles => [Role.first]) |
||
| 111 | b = Member.new |
||
| 112 | |||
| 113 | assert_equal -1, a <=> b |
||
| 114 | assert_equal 1, b <=> a |
||
| 115 | end |
||
| 116 | |||
| 117 | def test_sort_without_principal |
||
| 118 | role = Role.first |
||
| 119 | a = Member.new(:roles => [role], :principal => User.first) |
||
| 120 | b = Member.new(:roles => [role]) |
||
| 121 | |||
| 122 | assert_equal -1, a <=> b |
||
| 123 | assert_equal 1, b <=> a |
||
| 124 | end |
||
| 125 | |||
| 126 | context "removing permissions" do |
||
| 127 | setup do |
||
| 128 | Watcher.delete_all("user_id = 9")
|
||
| 129 | user = User.find(9) |
||
| 130 | # public |
||
| 131 | Watcher.create!(:watchable => Issue.find(1), :user => user) |
||
| 132 | # private |
||
| 133 | Watcher.create!(:watchable => Issue.find(4), :user => user) |
||
| 134 | Watcher.create!(:watchable => Message.find(7), :user => user) |
||
| 135 | Watcher.create!(:watchable => Wiki.find(2), :user => user) |
||
| 136 | Watcher.create!(:watchable => WikiPage.find(3), :user => user) |
||
| 137 | end |
||
| 138 | |||
| 139 | context "of user" do |
||
| 140 | setup do |
||
| 141 | @member = Member.create!(:project => Project.find(2), :principal => User.find(9), :role_ids => [1, 2]) |
||
| 142 | end |
||
| 143 | |||
| 144 | context "by deleting membership" do |
||
| 145 | should "prune watchers" do |
||
| 146 | assert_difference 'Watcher.count', -4 do |
||
| 147 | @member.destroy |
||
| 148 | end |
||
| 149 | end |
||
| 150 | end |
||
| 151 | |||
| 152 | context "by updating roles" do |
||
| 153 | should "prune watchers" do |
||
| 154 | Role.find(2).remove_permission! :view_wiki_pages |
||
| 155 | member = Member.first(:order => 'id desc') |
||
| 156 | assert_difference 'Watcher.count', -2 do |
||
| 157 | member.role_ids = [2] |
||
| 158 | member.save |
||
| 159 | end |
||
| 160 | assert !Message.find(7).watched_by?(@user) |
||
| 161 | end |
||
| 162 | end |
||
| 163 | end |
||
| 164 | |||
| 165 | context "of group" do |
||
| 166 | setup do |
||
| 167 | group = Group.find(10) |
||
| 168 | @member = Member.create!(:project => Project.find(2), :principal => group, :role_ids => [1, 2]) |
||
| 169 | group.users << User.find(9) |
||
| 170 | end |
||
| 171 | |||
| 172 | context "by deleting membership" do |
||
| 173 | should "prune watchers" do |
||
| 174 | assert_difference 'Watcher.count', -4 do |
||
| 175 | @member.destroy |
||
| 176 | end |
||
| 177 | end |
||
| 178 | end |
||
| 179 | |||
| 180 | context "by updating roles" do |
||
| 181 | should "prune watchers" do |
||
| 182 | Role.find(2).remove_permission! :view_wiki_pages |
||
| 183 | assert_difference 'Watcher.count', -2 do |
||
| 184 | @member.role_ids = [2] |
||
| 185 | @member.save |
||
| 186 | end |
||
| 187 | end |
||
| 188 | end |
||
| 189 | end |
||
| 190 | end |
||
| 191 | end |