Defect #32977 » 0001-removes-references-to-deleted-users-in-custom-field-.patch
| app/models/user.rb | ||
|---|---|---|
| 916 | 916 |
Watcher.where('user_id = ?', id).delete_all
|
| 917 | 917 |
WikiContent.where(['author_id = ?', id]).update_all(['author_id = ?', substitute.id]) |
| 918 | 918 |
WikiContent::Version.where(['author_id = ?', id]).update_all(['author_id = ?', substitute.id]) |
| 919 |
user_custom_field_ids = CustomField.where(field_format: 'user').pluck(:id) |
|
| 920 |
if user_custom_field_ids.any? |
|
| 921 |
CustomValue.where(custom_field_id: user_custom_field_ids, value: self.id.to_s).delete_all |
|
| 922 |
end |
|
| 919 | 923 |
end |
| 920 | 924 | |
| 921 | 925 |
# Singleton class method is public |
| db/migrate/20200211051351_remove_orphaned_user_custom_values.rb | ||
|---|---|---|
| 1 |
class RemoveOrphanedUserCustomValues < ActiveRecord::Migration[5.2] |
|
| 2 |
def up |
|
| 3 |
user_custom_field_ids = CustomField.where(field_format: 'user').pluck(:id) |
|
| 4 |
if user_custom_field_ids.any? |
|
| 5 |
user_ids = Principal.pluck(:id) |
|
| 6 |
CustomValue. |
|
| 7 |
where(custom_field_id: user_custom_field_ids). |
|
| 8 |
where.not(value: [nil, ''] + user_ids). |
|
| 9 |
delete_all |
|
| 10 |
end |
|
| 11 |
end |
|
| 12 |
end |
|
| test/unit/user_test.rb | ||
|---|---|---|
| 1295 | 1295 |
assert_equal [], User.find(2).bookmarked_project_ids |
| 1296 | 1296 |
end |
| 1297 | 1297 | |
| 1298 |
def test_remove_custom_field_references_upon_destroy |
|
| 1299 |
cf1 = IssueCustomField.create(field_format: 'user', name: 'user cf', is_for_all: true, tracker_ids: Tracker.pluck(:id)) |
|
| 1300 |
cf2 = IssueCustomField.create(field_format: 'user', name: 'users cf', is_for_all: true, multiple: true, tracker_ids: Tracker.pluck(:id)) |
|
| 1301 | ||
| 1302 |
issue = Issue.first |
|
| 1303 |
issue.init_journal(@admin) |
|
| 1304 |
assert_difference ->{cf1.custom_values.count} do
|
|
| 1305 |
assert_difference ->{cf2.custom_values.count}, 2 do
|
|
| 1306 |
issue.update_attributes(custom_field_values: {
|
|
| 1307 |
cf1.id => @jsmith.id, |
|
| 1308 |
cf2.id => [@dlopper.id, @jsmith.id] |
|
| 1309 |
}) |
|
| 1310 |
end |
|
| 1311 |
end |
|
| 1312 |
assert cv1 = cf1.custom_values.where(customized_id: issue.id).last |
|
| 1313 |
assert_equal @jsmith.id.to_s, cv1.value |
|
| 1314 | ||
| 1315 |
assert cv2 = cf2.custom_values.where(customized_id: issue.id) |
|
| 1316 |
assert_equal 2, cv2.size |
|
| 1317 |
assert cv2a = cv2.detect{|cv|cv.value == @dlopper.id.to_s}
|
|
| 1318 |
assert cv2b = cv2.detect{|cv|cv.value == @jsmith.id.to_s}
|
|
| 1319 | ||
| 1320 |
assert_difference ->{CustomValue.count}, -2 do
|
|
| 1321 |
@jsmith.destroy |
|
| 1322 |
end |
|
| 1323 | ||
| 1324 |
assert_raise(ActiveRecord::RecordNotFound){cv1.reload}
|
|
| 1325 |
assert_raise(ActiveRecord::RecordNotFound){cv2b.reload}
|
|
| 1326 | ||
| 1327 |
cv2a.reload |
|
| 1328 |
assert_equal @dlopper.id.to_s, cv2a.value |
|
| 1329 |
end |
|
| 1330 | ||
| 1298 | 1331 |
if Object.const_defined?(:OpenID) |
| 1299 | 1332 |
def test_setting_identity_url |
| 1300 | 1333 |
normalized_open_id_url = 'http://example.com/' |
- « Previous
- 1
- 2
- Next »