comparison test/unit/member_test.rb @ 1526:404aa68d4227

Merge from live branch
author Chris Cannam
date Thu, 11 Sep 2014 12:46:20 +0100
parents dffacf8a6908
children
comparison
equal deleted inserted replaced
1493:a5f2bdf3b486 1526:404aa68d4227
1 # Redmine - project management software 1 # Redmine - project management software
2 # Copyright (C) 2006-2012 Jean-Philippe Lang 2 # Copyright (C) 2006-2014 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.
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,
29 :groups_users, 28 :groups_users,
30 :watchers, 29 :watchers,
31 :journals, :journal_details, 30 :journals, :journal_details,
32 :messages, 31 :messages,
33 :wikis, :wiki_pages, :wiki_contents, :wiki_content_versions, 32 :wikis, :wiki_pages, :wiki_contents, :wiki_content_versions,
68 member = Member.new(:project_id => 1, :user_id => 2, :role_ids => [2]) 67 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 68 # same use can't have more than one membership for a project
70 assert !member.save 69 assert !member.save
71 70
72 # must have one role at least 71 # must have one role at least
73 user = User.new(:firstname => "new1", :lastname => "user1", :mail => "test_validate@somenet.foo") 72 user = User.new(:firstname => "new1", :lastname => "user1",
73 :mail => "test_validate@somenet.foo")
74 user.login = "test_validate" 74 user.login = "test_validate"
75 user.password, user.password_confirmation = "password", "password" 75 user.password, user.password_confirmation = "password", "password"
76 assert user.save 76 assert user.save
77 77
78 set_language_if_valid 'fr' 78 set_language_if_valid 'fr'
83 str.force_encoding('UTF-8') if str.respond_to?(:force_encoding) 83 str.force_encoding('UTF-8') if str.respond_to?(:force_encoding)
84 assert_equal str, [member.errors.full_messages].flatten.join 84 assert_equal str, [member.errors.full_messages].flatten.join
85 end 85 end
86 86
87 def test_validate_member_role 87 def test_validate_member_role
88 user = User.new(:firstname => "new1", :lastname => "user1", :mail => "test_validate@somenet.foo") 88 user = User.new(:firstname => "new1", :lastname => "user1",
89 :mail => "test_validate@somenet.foo")
89 user.login = "test_validate_member_role" 90 user.login = "test_validate_member_role"
90 user.password, user.password_confirmation = "password", "password" 91 user.password, user.password_confirmation = "password", "password"
91 assert user.save 92 assert user.save
92 member = Member.new(:project_id => 1, :user_id => user.id, :role_ids => [5]) 93 member = Member.new(:project_id => 1, :user_id => user.id, :role_ids => [5])
93 assert !member.save 94 assert !member.save
104 assert_raise(ActiveRecord::RecordNotFound) { Member.find(@jsmith.id) } 105 assert_raise(ActiveRecord::RecordNotFound) { Member.find(@jsmith.id) }
105 category1.reload 106 category1.reload
106 assert_nil category1.assigned_to_id 107 assert_nil category1.assigned_to_id
107 end 108 end
108 109
110 def test_destroy_should_trigger_callbacks_only_once
111 Member.class_eval { def destroy_test_callback; end}
112 Member.after_destroy :destroy_test_callback
113
114 m = Member.create!(:user_id => 1, :project_id => 1, :role_ids => [1,3])
115
116 Member.any_instance.expects(:destroy_test_callback).once
117 assert_difference 'Member.count', -1 do
118 assert_difference 'MemberRole.count', -2 do
119 m.destroy
120 end
121 end
122 assert m.destroyed?
123 ensure
124 Member._destroy_callbacks.reject! {|c| c.filter==:destroy_test_callback}
125 end
126
109 def test_sort_without_roles 127 def test_sort_without_roles
110 a = Member.new(:roles => [Role.first]) 128 a = Member.new(:roles => [Role.first])
111 b = Member.new 129 b = Member.new
112 130
113 assert_equal -1, a <=> b 131 assert_equal -1, a <=> b
120 b = Member.new(:roles => [role]) 138 b = Member.new(:roles => [role])
121 139
122 assert_equal -1, a <=> b 140 assert_equal -1, a <=> b
123 assert_equal 1, b <=> a 141 assert_equal 1, b <=> a
124 end 142 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 143 end