Merge ~clinton-fung/launchpad:account-deletion-person-merge-skip01 into launchpad:master

Proposed by Clinton Fung
Status: Merged
Approved by: Clinton Fung
Approved revision: 3e93666d5edde65d70313a3daf93fc369d4b1130
Merge reported by: Otto Co-Pilot
Merged at revision: not available
Proposed branch: ~clinton-fung/launchpad:account-deletion-person-merge-skip01
Merge into: launchpad:master
Diff against target: 50 lines (+21/-0)
2 files modified
lib/lp/registry/scripts/closeaccount.py (+2/-0)
lib/lp/registry/scripts/tests/test_closeaccount.py (+19/-0)
Reviewer Review Type Date Requested Status
Colin Watson (community) Approve
Review via email: mp+436973@code.launchpad.net

Commit message

Add a skip for person.merged (and also personnotification.person) to allow account closure to proceed.

Description of the change

When merging two accounts, the source (from) account has a field set that links it to the target (to) account, for audit purposes. This link prevents account deletion. Add a skip to allow deletion to complete in this scenario.

To post a comment you must log in.
Revision history for this message
Colin Watson (cjwatson) :
review: Approve
Revision history for this message
Otto Co-Pilot (otto-copilot) wrote :

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
diff --git a/lib/lp/registry/scripts/closeaccount.py b/lib/lp/registry/scripts/closeaccount.py
index f673a02..cb2bf4f 100644
--- a/lib/lp/registry/scripts/closeaccount.py
+++ b/lib/lp/registry/scripts/closeaccount.py
@@ -140,7 +140,9 @@ def close_account(username, log):
140 ("packagecopyrequest", "requester"),140 ("packagecopyrequest", "requester"),
141 ("packagediff", "requester"),141 ("packagediff", "requester"),
142 ("packageupload", "signing_key_owner"),142 ("packageupload", "signing_key_owner"),
143 ("person", "merged"),
143 ("personlocation", "last_modified_by"),144 ("personlocation", "last_modified_by"),
145 ("personnotification", "person"),
144 ("persontransferjob", "major_person"),146 ("persontransferjob", "major_person"),
145 ("persontransferjob", "minor_person"),147 ("persontransferjob", "minor_person"),
146 ("poexportrequest", "person"),148 ("poexportrequest", "person"),
diff --git a/lib/lp/registry/scripts/tests/test_closeaccount.py b/lib/lp/registry/scripts/tests/test_closeaccount.py
index 41ca7e5..c1270d4 100644
--- a/lib/lp/registry/scripts/tests/test_closeaccount.py
+++ b/lib/lp/registry/scripts/tests/test_closeaccount.py
@@ -32,8 +32,10 @@ from lp.code.tests.helpers import GitHostingFixture
32from lp.registry.interfaces.person import IPersonSet32from lp.registry.interfaces.person import IPersonSet
33from lp.registry.interfaces.teammembership import ITeamMembershipSet33from lp.registry.interfaces.teammembership import ITeamMembershipSet
34from lp.registry.model.productrelease import ProductRelease34from lp.registry.model.productrelease import ProductRelease
35from lp.registry.personmerge import merge_people
35from lp.registry.scripts.closeaccount import CloseAccountScript36from lp.registry.scripts.closeaccount import CloseAccountScript
36from lp.scripts.garbo import PopulateLatestPersonSourcePackageReleaseCache37from lp.scripts.garbo import PopulateLatestPersonSourcePackageReleaseCache
38from lp.services.config import config
37from lp.services.database.interfaces import IStore39from lp.services.database.interfaces import IStore
38from lp.services.database.sqlbase import (40from lp.services.database.sqlbase import (
39 flush_database_caches,41 flush_database_caches,
@@ -1296,3 +1298,20 @@ class TestCloseAccount(TestCaseWithFactory):
1296 else:1298 else:
1297 self.runScript(script)1299 self.runScript(script)
1298 self.assertRemoved(account_id, person_id)1300 self.assertRemoved(account_id, person_id)
1301
1302 def test_skips_merged_and_personnotification_references(self):
1303 from_person = self.factory.makePerson(
1304 account_status=AccountStatus.PLACEHOLDER
1305 )
1306 to_person = self.factory.makePerson()
1307
1308 # See TestMergePeople._do_merge()
1309 with dbuser(config.IPersonMergeJobSource.dbuser):
1310 merge_people(from_person, to_person, None)
1311
1312 account_id = to_person.account.id
1313 person_id = to_person.id
1314 script = self.makeScript([to_person.name])
1315 with dbuser("launchpad"):
1316 self.runScript(script)
1317 self.assertRemoved(account_id, person_id)

Subscribers

People subscribed via source and target branches

to status/vote changes: