diff --git a/resources/lib/UnityUser.php b/resources/lib/UnityUser.php index 1024c264..606a1aa8 100644 --- a/resources/lib/UnityUser.php +++ b/resources/lib/UnityUser.php @@ -372,6 +372,7 @@ public function getPIGroupGIDs(): array */ public function requestAccountDeletion(): void { + $this->SQL->deleteRequestsByUser($this->uid); $this->SQL->addAccountDeletionRequest($this->uid); $this->MAILER->sendMail("admin", "account_deletion_request_admin", [ "user" => $this->uid, diff --git a/test/functional/AccountDeletionRequestTest.php b/test/functional/AccountDeletionRequestTest.php index 1c7c33b9..8a590e3a 100644 --- a/test/functional/AccountDeletionRequestTest.php +++ b/test/functional/AccountDeletionRequestTest.php @@ -40,4 +40,33 @@ public function testRequestAccountDeletionUserHasGroup() $this->assertNumberAccountDeletionRequests(0); } } + + /* when you request account deletion, any other requests should be deleted */ + public function testRequestAccountDeletionUserHasRequest() + { + global $USER, $SQL; + $pi_args = getUserIsPIHasNoMembersNoMemberRequests(); + switchUser(...$pi_args); + $pi = $USER; + $pi_group = $USER->getPIGroup(); + $this->assertEqualsCanonicalizing([$pi->uid], $pi_group->getGroupMemberUIDs()); + $user_args = getBlankUser(); + switchUser(...$user_args); + $this->assertEmpty($USER->getPIGroupGIDs()); + $this->assertNumberAccountDeletionRequests(0); + $this->assertNumberRequests(0); + try { + $pi_group->newUserRequest($USER); + $this->assertNumberRequests(1); + http_post(__DIR__ . "/../../webroot/panel/account.php", [ + "form_type" => "account_deletion_request", + ]); + $this->assertNumberAccountDeletionRequests(1); + $this->assertNumberRequests(0); + } finally { + $SQL->deleteAccountDeletionRequest($USER->uid); + $this->assertNumberAccountDeletionRequests(0); + ensureUserNotInPIGroup($pi_group); + } + } } diff --git a/test/phpunit-bootstrap.php b/test/phpunit-bootstrap.php index 3061f59f..b7833676 100644 --- a/test/phpunit-bootstrap.php +++ b/test/phpunit-bootstrap.php @@ -425,4 +425,15 @@ public function assertNumberPiBecomeRequests(int $x) } $this->assertEquals($x, $this->getNumberPiBecomeRequests()); } + + public function getNumberRequests() + { + global $USER, $SQL; + return count($SQL->getRequestsByUser($USER->uid)); + } + + public function assertNumberRequests(int $x) + { + $this->assertEquals($x, $this->getNumberRequests()); + } }