##// END OF EJS Templates
add unit test of member_role validate...
Toshi MARUYAMA -
r7947:747afd808839
parent child
Show More
@@ -1,157 +1,166
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_validate_member_role
80 user = User.new(:firstname => "new1", :lastname => "user1", :mail => "test_validate@somenet.foo")
81 user.login = "test_validate_member_role"
82 user.password, user.password_confirmation = "password", "password"
83 assert user.save
84 member = Member.new(:project_id => 1, :user_id => user.id, :role_ids => [5])
85 assert !member.save
86 end
87
79 def test_destroy
88 def test_destroy
80 category1 = IssueCategory.find(1)
89 category1 = IssueCategory.find(1)
81 assert_equal @jsmith.user.id, category1.assigned_to_id
90 assert_equal @jsmith.user.id, category1.assigned_to_id
82 assert_difference 'Member.count', -1 do
91 assert_difference 'Member.count', -1 do
83 assert_difference 'MemberRole.count', -1 do
92 assert_difference 'MemberRole.count', -1 do
84 @jsmith.destroy
93 @jsmith.destroy
85 end
94 end
86 end
95 end
87 assert_raise(ActiveRecord::RecordNotFound) { Member.find(@jsmith.id) }
96 assert_raise(ActiveRecord::RecordNotFound) { Member.find(@jsmith.id) }
88 category1.reload
97 category1.reload
89 assert_nil category1.assigned_to_id
98 assert_nil category1.assigned_to_id
90 end
99 end
91
100
92 context "removing permissions" do
101 context "removing permissions" do
93 setup do
102 setup do
94 Watcher.delete_all("user_id = 9")
103 Watcher.delete_all("user_id = 9")
95 user = User.find(9)
104 user = User.find(9)
96 # public
105 # public
97 Watcher.create!(:watchable => Issue.find(1), :user => user)
106 Watcher.create!(:watchable => Issue.find(1), :user => user)
98 # private
107 # private
99 Watcher.create!(:watchable => Issue.find(4), :user => user)
108 Watcher.create!(:watchable => Issue.find(4), :user => user)
100 Watcher.create!(:watchable => Message.find(7), :user => user)
109 Watcher.create!(:watchable => Message.find(7), :user => user)
101 Watcher.create!(:watchable => Wiki.find(2), :user => user)
110 Watcher.create!(:watchable => Wiki.find(2), :user => user)
102 Watcher.create!(:watchable => WikiPage.find(3), :user => user)
111 Watcher.create!(:watchable => WikiPage.find(3), :user => user)
103 end
112 end
104
113
105 context "of user" do
114 context "of user" do
106 setup do
115 setup do
107 @member = Member.create!(:project => Project.find(2), :principal => User.find(9), :role_ids => [1, 2])
116 @member = Member.create!(:project => Project.find(2), :principal => User.find(9), :role_ids => [1, 2])
108 end
117 end
109
118
110 context "by deleting membership" do
119 context "by deleting membership" do
111 should "prune watchers" do
120 should "prune watchers" do
112 assert_difference 'Watcher.count', -4 do
121 assert_difference 'Watcher.count', -4 do
113 @member.destroy
122 @member.destroy
114 end
123 end
115 end
124 end
116 end
125 end
117
126
118 context "by updating roles" do
127 context "by updating roles" do
119 should "prune watchers" do
128 should "prune watchers" do
120 Role.find(2).remove_permission! :view_wiki_pages
129 Role.find(2).remove_permission! :view_wiki_pages
121 member = Member.first(:order => 'id desc')
130 member = Member.first(:order => 'id desc')
122 assert_difference 'Watcher.count', -2 do
131 assert_difference 'Watcher.count', -2 do
123 member.role_ids = [2]
132 member.role_ids = [2]
124 member.save
133 member.save
125 end
134 end
126 assert !Message.find(7).watched_by?(@user)
135 assert !Message.find(7).watched_by?(@user)
127 end
136 end
128 end
137 end
129 end
138 end
130
139
131 context "of group" do
140 context "of group" do
132 setup do
141 setup do
133 group = Group.find(10)
142 group = Group.find(10)
134 @member = Member.create!(:project => Project.find(2), :principal => group, :role_ids => [1, 2])
143 @member = Member.create!(:project => Project.find(2), :principal => group, :role_ids => [1, 2])
135 group.users << User.find(9)
144 group.users << User.find(9)
136 end
145 end
137
146
138 context "by deleting membership" do
147 context "by deleting membership" do
139 should "prune watchers" do
148 should "prune watchers" do
140 assert_difference 'Watcher.count', -4 do
149 assert_difference 'Watcher.count', -4 do
141 @member.destroy
150 @member.destroy
142 end
151 end
143 end
152 end
144 end
153 end
145
154
146 context "by updating roles" do
155 context "by updating roles" do
147 should "prune watchers" do
156 should "prune watchers" do
148 Role.find(2).remove_permission! :view_wiki_pages
157 Role.find(2).remove_permission! :view_wiki_pages
149 assert_difference 'Watcher.count', -2 do
158 assert_difference 'Watcher.count', -2 do
150 @member.role_ids = [2]
159 @member.role_ids = [2]
151 @member.save
160 @member.save
152 end
161 end
153 end
162 end
154 end
163 end
155 end
164 end
156 end
165 end
157 end
166 end
General Comments 0
You need to be logged in to leave comments. Login now