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 / 05 / 058be0b3a53e81bfbd2f18f23f7014355fe7cd0a.svn-base @ 912:5e80956cc792
History | View | Annotate | Download (4.47 KB)
| 1 | 909:cbb26bc654de | Chris | # Redmine - project management software |
|---|---|---|---|
| 2 | # Copyright (C) 2006-2011 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 | def setup |
||
| 37 | @jsmith = Member.find(1) |
||
| 38 | end |
||
| 39 | |||
| 40 | def test_create |
||
| 41 | member = Member.new(:project_id => 1, :user_id => 4, :role_ids => [1, 2]) |
||
| 42 | assert member.save |
||
| 43 | member.reload |
||
| 44 | |||
| 45 | assert_equal 2, member.roles.size |
||
| 46 | assert_equal Role.find(1), member.roles.sort.first |
||
| 47 | end |
||
| 48 | |||
| 49 | def test_update |
||
| 50 | assert_equal "eCookbook", @jsmith.project.name |
||
| 51 | assert_equal "Manager", @jsmith.roles.first.name |
||
| 52 | assert_equal "jsmith", @jsmith.user.login |
||
| 53 | |||
| 54 | @jsmith.mail_notification = !@jsmith.mail_notification |
||
| 55 | assert @jsmith.save |
||
| 56 | end |
||
| 57 | |||
| 58 | def test_update_roles |
||
| 59 | assert_equal 1, @jsmith.roles.size |
||
| 60 | @jsmith.role_ids = [1, 2] |
||
| 61 | assert @jsmith.save |
||
| 62 | assert_equal 2, @jsmith.reload.roles.size |
||
| 63 | end |
||
| 64 | |||
| 65 | def test_validate |
||
| 66 | member = Member.new(:project_id => 1, :user_id => 2, :role_ids => [2]) |
||
| 67 | # same use can't have more than one membership for a project |
||
| 68 | assert !member.save |
||
| 69 | |||
| 70 | member = Member.new(:project_id => 1, :user_id => 2, :role_ids => []) |
||
| 71 | # must have one role at least |
||
| 72 | assert !member.save |
||
| 73 | end |
||
| 74 | |||
| 75 | def test_destroy |
||
| 76 | assert_difference 'Member.count', -1 do |
||
| 77 | assert_difference 'MemberRole.count', -1 do |
||
| 78 | @jsmith.destroy |
||
| 79 | end |
||
| 80 | end |
||
| 81 | |||
| 82 | assert_raise(ActiveRecord::RecordNotFound) { Member.find(@jsmith.id) }
|
||
| 83 | end |
||
| 84 | |||
| 85 | context "removing permissions" do |
||
| 86 | setup do |
||
| 87 | Watcher.delete_all("user_id = 9")
|
||
| 88 | user = User.find(9) |
||
| 89 | # public |
||
| 90 | Watcher.create!(:watchable => Issue.find(1), :user => user) |
||
| 91 | # private |
||
| 92 | Watcher.create!(:watchable => Issue.find(4), :user => user) |
||
| 93 | Watcher.create!(:watchable => Message.find(7), :user => user) |
||
| 94 | Watcher.create!(:watchable => Wiki.find(2), :user => user) |
||
| 95 | Watcher.create!(:watchable => WikiPage.find(3), :user => user) |
||
| 96 | end |
||
| 97 | |||
| 98 | context "of user" do |
||
| 99 | setup do |
||
| 100 | @member = Member.create!(:project => Project.find(2), :principal => User.find(9), :role_ids => [1, 2]) |
||
| 101 | end |
||
| 102 | |||
| 103 | context "by deleting membership" do |
||
| 104 | should "prune watchers" do |
||
| 105 | assert_difference 'Watcher.count', -4 do |
||
| 106 | @member.destroy |
||
| 107 | end |
||
| 108 | end |
||
| 109 | end |
||
| 110 | |||
| 111 | context "by updating roles" do |
||
| 112 | should "prune watchers" do |
||
| 113 | Role.find(2).remove_permission! :view_wiki_pages |
||
| 114 | member = Member.first(:order => 'id desc') |
||
| 115 | assert_difference 'Watcher.count', -2 do |
||
| 116 | member.role_ids = [2] |
||
| 117 | member.save |
||
| 118 | end |
||
| 119 | assert !Message.find(7).watched_by?(@user) |
||
| 120 | end |
||
| 121 | end |
||
| 122 | end |
||
| 123 | |||
| 124 | context "of group" do |
||
| 125 | setup do |
||
| 126 | group = Group.find(10) |
||
| 127 | @member = Member.create!(:project => Project.find(2), :principal => group, :role_ids => [1, 2]) |
||
| 128 | group.users << User.find(9) |
||
| 129 | end |
||
| 130 | |||
| 131 | context "by deleting membership" do |
||
| 132 | should "prune watchers" do |
||
| 133 | assert_difference 'Watcher.count', -4 do |
||
| 134 | @member.destroy |
||
| 135 | end |
||
| 136 | end |
||
| 137 | end |
||
| 138 | |||
| 139 | context "by updating roles" do |
||
| 140 | should "prune watchers" do |
||
| 141 | Role.find(2).remove_permission! :view_wiki_pages |
||
| 142 | assert_difference 'Watcher.count', -2 do |
||
| 143 | @member.role_ids = [2] |
||
| 144 | @member.save |
||
| 145 | end |
||
| 146 | end |
||
| 147 | end |
||
| 148 | end |
||
| 149 | end |
||
| 150 | end |