diff --git a/resources/lib/UnitySQL.php b/resources/lib/UnitySQL.php index 904ea2fd..c5835827 100644 --- a/resources/lib/UnitySQL.php +++ b/resources/lib/UnitySQL.php @@ -283,6 +283,18 @@ public function accDeletionRequestExists($uid) return count($stmt->fetchAll()) > 0; } + public function deleteAccountDeletionRequest($uid) + { + if (!$this->accDeletionRequestExists($uid)) { + return; + } + $stmt = $this->conn->prepare( + "DELETE FROM " . self::TABLE_ACCOUNT_DELETION_REQUESTS . " WHERE uid=:uid" + ); + $stmt->bindParam(":uid", $uid); + $stmt->execute(); + } + public function getSiteVar($name) { $stmt = $this->conn->prepare( diff --git a/test/functional/AccountDeletionRequestTest.php b/test/functional/AccountDeletionRequestTest.php index 024bce80..9829a48b 100644 --- a/test/functional/AccountDeletionRequestTest.php +++ b/test/functional/AccountDeletionRequestTest.php @@ -37,16 +37,21 @@ public function testRequestAccountDeletionUserHasNoGroups() switchUser(...getUserHasNotRequestedAccountDeletionHasNoGroups()); $this->assertEmpty($USER->getGroups()); $this->assertNumberAccountDeletionRequests(0); - post( - __DIR__ . "/../../webroot/panel/account.php", - ["form_type" => "account_deletion_request"] - ); - $this->assertNumberAccountDeletionRequests(1); - post( - __DIR__ . "/../../webroot/panel/account.php", - ["form_type" => "account_deletion_request"] - ); - $this->assertNumberAccountDeletionRequests(1); + try { + post( + __DIR__ . "/../../webroot/panel/account.php", + ["form_type" => "account_deletion_request"] + ); + $this->assertNumberAccountDeletionRequests(1); + post( + __DIR__ . "/../../webroot/panel/account.php", + ["form_type" => "account_deletion_request"] + ); + $this->assertNumberAccountDeletionRequests(1); + } finally { + $SQL->deleteAccountDeletionRequest($USER->getUID()); + $this->assertNumberAccountDeletionRequests(0); + } } public function testRequestAccountDeletionUserHasGroup() @@ -56,10 +61,15 @@ public function testRequestAccountDeletionUserHasGroup() switchUser(...getUserHasNotRequestedAccountDeletionHasGroup()); $this->assertNotEmpty($USER->getGroups()); $this->assertNumberAccountDeletionRequests(0); - post( - __DIR__ . "/../../webroot/panel/account.php", - ["form_type" => "account_deletion_request"] - ); - $this->assertNumberAccountDeletionRequests(0); + try { + post( + __DIR__ . "/../../webroot/panel/account.php", + ["form_type" => "account_deletion_request"] + ); + $this->assertNumberAccountDeletionRequests(0); + } finally { + $SQL->deleteAccountDeletionRequest($USER->getUID()); + $this->assertNumberAccountDeletionRequests(0); + } } } diff --git a/test/functional/PiBecomeRequestTest.php b/test/functional/PiBecomeRequestTest.php index 45bdb205..e44fef72 100644 --- a/test/functional/PiBecomeRequestTest.php +++ b/test/functional/PiBecomeRequestTest.php @@ -37,15 +37,37 @@ public function testRequestBecomePi() switchUser(...getUserNotPiNotRequestedBecomePi()); $this->assertFalse($USER->isPI()); $this->assertNumberPiBecomeRequests(0); - post( - __DIR__ . "/../../webroot/panel/account.php", - ["form_type" => "pi_request"] - ); - $this->assertNumberPiBecomeRequests(1); - post( - __DIR__ . "/../../webroot/panel/account.php", - ["form_type" => "pi_request"] - ); - $this->assertNumberPiBecomeRequests(1); + try { + post( + __DIR__ . "/../../webroot/panel/account.php", + ["form_type" => "pi_request"] + ); + $this->assertNumberPiBecomeRequests(1); + post( + __DIR__ . "/../../webroot/panel/account.php", + ["form_type" => "pi_request"] + ); + $this->assertNumberPiBecomeRequests(1); + } finally { + $SQL->removeRequest($USER->getUID()); + } + } + + public function testRequestBecomePiUserRequestedAccountDeletion() + { + global $USER, $SQL; + switchUser(...getUserNotPiNotRequestedBecomePiRequestedAccountDeletion()); + $this->assertFalse($USER->isPI()); + $this->assertNumberPiBecomeRequests(0); + $this->assertTrue($SQL->accDeletionRequestExists($USER->getUID())); + try { + post( + __DIR__ . "/../../webroot/panel/account.php", + ["form_type" => "pi_request"] + ); + $this->assertNumberPiBecomeRequests(0); + } finally { + $SQL->removeRequest($USER->getUID()); + } } } diff --git a/test/phpunit-bootstrap.php b/test/phpunit-bootstrap.php index 04bf52d6..79a22f0c 100644 --- a/test/phpunit-bootstrap.php +++ b/test/phpunit-bootstrap.php @@ -99,3 +99,8 @@ function getUserNotPiNotRequestedBecomePi() { return ["user2@org1.test", "foo", "bar", "user2@org1.test"]; } + +function getUserNotPiNotRequestedBecomePiRequestedAccountDeletion() +{ + return ["user4@org1.test", "foo", "bar", "user4@org1.test"]; +} diff --git a/tools/docker-dev/sql/Dockerfile b/tools/docker-dev/sql/Dockerfile index 355fe1ae..706d2383 100644 --- a/tools/docker-dev/sql/Dockerfile +++ b/tools/docker-dev/sql/Dockerfile @@ -10,13 +10,15 @@ RUN apt-get update && apt-get install -y \ netcat-openbsd RUN sed -i '/bind-address/c\bind-address = 0.0.0.0' /etc/mysql/mariadb.conf.d/50-server.cnf COPY bootstrap.sql /tmp/bootstrap.sql +COPY bootstrap-users.sql /tmp/bootstrap-users.sql RUN service mariadb start; \ mariadb -e "CREATE DATABASE unity"; \ mariadb -e "CREATE USER 'unity'@'%' IDENTIFIED BY 'password'"; \ mariadb -e "GRANT ALL PRIVILEGES ON unity.* TO 'unity'@'%'"; \ mariadb -e "FLUSH PRIVILEGES"; \ - mariadb unity < /tmp/bootstrap.sql + mariadb unity < /tmp/bootstrap.sql; \ + mariadb unity < /tmp/bootstrap-users.sql RUN rm -rf /tmp/bootstrap.sql diff --git a/tools/docker-dev/sql/bootstrap-users.sql b/tools/docker-dev/sql/bootstrap-users.sql new file mode 100644 index 00000000..b56421f5 --- /dev/null +++ b/tools/docker-dev/sql/bootstrap-users.sql @@ -0,0 +1 @@ +INSERT INTO `account_deletion_requests` (`id`, `timestamp`, `uid`) VALUES (1, '1970-01-01 00:00:01', 'user4_org1_test');