##// END OF EJS Templates
add test to check to set issue category assignee nil in destroying member...
Toshi MARUYAMA -
r7937:7a5d6f61c773
parent child
Show More
@@ -1,154 +1,157
1 # Redmine - project management software
1 # Redmine - project management software
2 # Copyright (C) 2006-2011 Jean-Philippe Lang
2 # Copyright (C) 2006-2011 Jean-Philippe Lang
3 #
3 #
4 # This program is free software; you can redistribute it and/or
4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU General Public License
5 # modify it under the terms of the GNU General Public License
6 # as published by the Free Software Foundation; either version 2
6 # as published by the Free Software Foundation; either version 2
7 # of the License, or (at your option) any later version.
7 # of the License, or (at your option) any later version.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU General Public License
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
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.
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17
17
18 require File.expand_path('../../test_helper', __FILE__)
18 require File.expand_path('../../test_helper', __FILE__)
19
19
20 class MemberTest < ActiveSupport::TestCase
20 class MemberTest < ActiveSupport::TestCase
21 fixtures :projects, :trackers, :issue_statuses, :issues,
21 fixtures :projects, :trackers, :issue_statuses, :issues,
22 :enumerations, :users, :issue_categories,
22 :enumerations, :users, :issue_categories,
23 :projects_trackers,
23 :projects_trackers,
24 :roles,
24 :roles,
25 :member_roles,
25 :member_roles,
26 :members,
26 :members,
27 :enabled_modules,
27 :enabled_modules,
28 :workflows,
28 :workflows,
29 :groups_users,
29 :groups_users,
30 :watchers,
30 :watchers,
31 :journals, :journal_details,
31 :journals, :journal_details,
32 :messages,
32 :messages,
33 :wikis, :wiki_pages, :wiki_contents, :wiki_content_versions,
33 :wikis, :wiki_pages, :wiki_contents, :wiki_content_versions,
34 :boards
34 :boards
35
35
36 def setup
36 def setup
37 @jsmith = Member.find(1)
37 @jsmith = Member.find(1)
38 end
38 end
39
39
40 def test_create
40 def test_create
41 member = Member.new(:project_id => 1, :user_id => 4, :role_ids => [1, 2])
41 member = Member.new(:project_id => 1, :user_id => 4, :role_ids => [1, 2])
42 assert member.save
42 assert member.save
43 member.reload
43 member.reload
44
44
45 assert_equal 2, member.roles.size
45 assert_equal 2, member.roles.size
46 assert_equal Role.find(1), member.roles.sort.first
46 assert_equal Role.find(1), member.roles.sort.first
47 end
47 end
48
48
49 def test_update
49 def test_update
50 assert_equal "eCookbook", @jsmith.project.name
50 assert_equal "eCookbook", @jsmith.project.name
51 assert_equal "Manager", @jsmith.roles.first.name
51 assert_equal "Manager", @jsmith.roles.first.name
52 assert_equal "jsmith", @jsmith.user.login
52 assert_equal "jsmith", @jsmith.user.login
53
53
54 @jsmith.mail_notification = !@jsmith.mail_notification
54 @jsmith.mail_notification = !@jsmith.mail_notification
55 assert @jsmith.save
55 assert @jsmith.save
56 end
56 end
57
57
58 def test_update_roles
58 def test_update_roles
59 assert_equal 1, @jsmith.roles.size
59 assert_equal 1, @jsmith.roles.size
60 @jsmith.role_ids = [1, 2]
60 @jsmith.role_ids = [1, 2]
61 assert @jsmith.save
61 assert @jsmith.save
62 assert_equal 2, @jsmith.reload.roles.size
62 assert_equal 2, @jsmith.reload.roles.size
63 end
63 end
64
64
65 def test_validate
65 def test_validate
66 member = Member.new(:project_id => 1, :user_id => 2, :role_ids => [2])
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
67 # same use can't have more than one membership for a project
68 assert !member.save
68 assert !member.save
69
69
70 # must have one role at least
70 # must have one role at least
71 user = User.new(:firstname => "new1", :lastname => "user1", :mail => "test_validate@somenet.foo")
71 user = User.new(:firstname => "new1", :lastname => "user1", :mail => "test_validate@somenet.foo")
72 user.login = "test_validate"
72 user.login = "test_validate"
73 user.password, user.password_confirmation = "password", "password"
73 user.password, user.password_confirmation = "password", "password"
74 assert user.save
74 assert user.save
75 member = Member.new(:project_id => 1, :user_id => user.id, :role_ids => [])
75 member = Member.new(:project_id => 1, :user_id => user.id, :role_ids => [])
76 assert !member.save
76 assert !member.save
77 end
77 end
78
78
79 def test_destroy
79 def test_destroy
80 category1 = IssueCategory.find(1)
81 assert_equal @jsmith.user.id, category1.assigned_to_id
80 assert_difference 'Member.count', -1 do
82 assert_difference 'Member.count', -1 do
81 assert_difference 'MemberRole.count', -1 do
83 assert_difference 'MemberRole.count', -1 do
82 @jsmith.destroy
84 @jsmith.destroy
83 end
85 end
84 end
86 end
85
86 assert_raise(ActiveRecord::RecordNotFound) { Member.find(@jsmith.id) }
87 assert_raise(ActiveRecord::RecordNotFound) { Member.find(@jsmith.id) }
88 category1.reload
89 assert_nil category1.assigned_to_id
87 end
90 end
88
91
89 context "removing permissions" do
92 context "removing permissions" do
90 setup do
93 setup do
91 Watcher.delete_all("user_id = 9")
94 Watcher.delete_all("user_id = 9")
92 user = User.find(9)
95 user = User.find(9)
93 # public
96 # public
94 Watcher.create!(:watchable => Issue.find(1), :user => user)
97 Watcher.create!(:watchable => Issue.find(1), :user => user)
95 # private
98 # private
96 Watcher.create!(:watchable => Issue.find(4), :user => user)
99 Watcher.create!(:watchable => Issue.find(4), :user => user)
97 Watcher.create!(:watchable => Message.find(7), :user => user)
100 Watcher.create!(:watchable => Message.find(7), :user => user)
98 Watcher.create!(:watchable => Wiki.find(2), :user => user)
101 Watcher.create!(:watchable => Wiki.find(2), :user => user)
99 Watcher.create!(:watchable => WikiPage.find(3), :user => user)
102 Watcher.create!(:watchable => WikiPage.find(3), :user => user)
100 end
103 end
101
104
102 context "of user" do
105 context "of user" do
103 setup do
106 setup do
104 @member = Member.create!(:project => Project.find(2), :principal => User.find(9), :role_ids => [1, 2])
107 @member = Member.create!(:project => Project.find(2), :principal => User.find(9), :role_ids => [1, 2])
105 end
108 end
106
109
107 context "by deleting membership" do
110 context "by deleting membership" do
108 should "prune watchers" do
111 should "prune watchers" do
109 assert_difference 'Watcher.count', -4 do
112 assert_difference 'Watcher.count', -4 do
110 @member.destroy
113 @member.destroy
111 end
114 end
112 end
115 end
113 end
116 end
114
117
115 context "by updating roles" do
118 context "by updating roles" do
116 should "prune watchers" do
119 should "prune watchers" do
117 Role.find(2).remove_permission! :view_wiki_pages
120 Role.find(2).remove_permission! :view_wiki_pages
118 member = Member.first(:order => 'id desc')
121 member = Member.first(:order => 'id desc')
119 assert_difference 'Watcher.count', -2 do
122 assert_difference 'Watcher.count', -2 do
120 member.role_ids = [2]
123 member.role_ids = [2]
121 member.save
124 member.save
122 end
125 end
123 assert !Message.find(7).watched_by?(@user)
126 assert !Message.find(7).watched_by?(@user)
124 end
127 end
125 end
128 end
126 end
129 end
127
130
128 context "of group" do
131 context "of group" do
129 setup do
132 setup do
130 group = Group.find(10)
133 group = Group.find(10)
131 @member = Member.create!(:project => Project.find(2), :principal => group, :role_ids => [1, 2])
134 @member = Member.create!(:project => Project.find(2), :principal => group, :role_ids => [1, 2])
132 group.users << User.find(9)
135 group.users << User.find(9)
133 end
136 end
134
137
135 context "by deleting membership" do
138 context "by deleting membership" do
136 should "prune watchers" do
139 should "prune watchers" do
137 assert_difference 'Watcher.count', -4 do
140 assert_difference 'Watcher.count', -4 do
138 @member.destroy
141 @member.destroy
139 end
142 end
140 end
143 end
141 end
144 end
142
145
143 context "by updating roles" do
146 context "by updating roles" do
144 should "prune watchers" do
147 should "prune watchers" do
145 Role.find(2).remove_permission! :view_wiki_pages
148 Role.find(2).remove_permission! :view_wiki_pages
146 assert_difference 'Watcher.count', -2 do
149 assert_difference 'Watcher.count', -2 do
147 @member.role_ids = [2]
150 @member.role_ids = [2]
148 @member.save
151 @member.save
149 end
152 end
150 end
153 end
151 end
154 end
152 end
155 end
153 end
156 end
154 end
157 end
General Comments 0
You need to be logged in to leave comments. Login now