From f99f63d438ab2b11d55a73bf4a2a1522491baca6 Mon Sep 17 00:00:00 2001 From: Simon Leary Date: Tue, 3 Jun 2025 21:58:32 -0400 Subject: [PATCH 1/9] box of shame --- test/phpunit-bootstrap.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/phpunit-bootstrap.php b/test/phpunit-bootstrap.php index 0e45f3e4..280ef77a 100644 --- a/test/phpunit-bootstrap.php +++ b/test/phpunit-bootstrap.php @@ -173,7 +173,10 @@ function getAdminUser() return ["user1@org1.test", "foo", "bar", "user1@org1.test"]; } +// box of shame +////////////////////////////////////////////////////////////////// function getExistingPI() { return "pi_user1005_org3_test"; } +////////////////////////////////////////////////////////////////// From ced438127f6ae2fd7a5efe85bad30f24f8f32491 Mon Sep 17 00:00:00 2001 From: Simon Leary Date: Tue, 3 Jun 2025 21:59:27 -0400 Subject: [PATCH 2/9] new tests --- test/functional/NewUserTest.php | 165 ++++++++++++++++++++++++++++++++ 1 file changed, 165 insertions(+) create mode 100644 test/functional/NewUserTest.php diff --git a/test/functional/NewUserTest.php b/test/functional/NewUserTest.php new file mode 100644 index 00000000..fcd34dbc --- /dev/null +++ b/test/functional/NewUserTest.php @@ -0,0 +1,165 @@ +assertEquals($x, count($SQL->getRequestsByUser($USER->getUID()))); + } + + private function requestGroupCreation() + { + $redirectedOrDied = false; + try { + http_post( + __DIR__ . "/../../webroot/panel/new_account.php", + ["new_user_sel" => "pi", "eula" => "agree", "confirm_pi" => "agree"] + ); + } catch (\UnityWebPortal\lib\exceptions\PhpUnitNoDieException) { + $redirectedOrDied = true; + } + $this->assertTrue($redirectedOrDied); + } + + private function requestGroupMembership(string $gid) + { + $redirectedOrDied = false; + try { + http_post( + __DIR__ . "/../../webroot/panel/new_account.php", + ["new_user_sel" => "not_pi", "eula" => "agree", "pi" => $gid] + ); + } catch (\UnityWebPortal\lib\exceptions\PhpUnitNoDieException) { + $redirectedOrDied = true; + } + $this->assertTrue($redirectedOrDied); + } + + private function cancelAllRequests() + { + $redirectedOrDied = false; + try { + http_post( + __DIR__ . "/../../webroot/panel/new_account.php", + ["cancel" => "true"] // value of cancel is arbitrary + ); + } catch (\UnityWebPortal\lib\exceptions\PhpUnitNoDieException) { + $redirectedOrDied = true; + } + $this->assertTrue($redirectedOrDied); + } + + public function testCreateUserByJoinGoup() + { + global $USER, $SQL; + switchUser(...getUserIsPIHasNoMembersNoMemberRequests()); + $pi_group = $USER->getPIGroup(); + switchUser(...getNonExistentUser()); + $this->assertTrue(!$USER->exists()); + $this->assertTrue($pi_group->exists()); + $this->assertTrue(!$pi_group->userExists($USER)); + $this->assertNumberGroupRequests(0); + try { + $this->requestGroupMembership($pi_group->getPIUID()); + $this->assertNumberGroupRequests(1); + + $second_request_failed = false; + try { + $this->requestGroupMembership($pi_group->getPIUID()); + } catch(Exception) { + $second_request_failed = true; + } + $this->assertTrue($second_request_failed); + $this->assertNumberGroupRequests(1); + + $this->cancelAllRequests(); + $this->assertNumberGroupRequests(0); + + $this->requestGroupMembership($pi_group->getPIUID()); + $this->assertTrue($pi_group->requestExists($USER)); + $this->assertNumberGroupRequests(1); + + $pi_group->approveUser($USER); + $this->assertTrue(!$pi_group->requestExists($USER)); + $this->assertNumberGroupRequests(0); + $this->assertTrue($pi_group->userExists($USER)); + $this->assertTrue($USER->exists()); + + $third_request_failed = false; + try { + $this->requestGroupMembership($pi_group->getPIUID()); + } catch(Exception) { + $third_request_failed = true; + } + $this->assertTrue($third_request_failed); + $this->assertNumberGroupRequests(0); + $this->assertTrue(!$pi_group->requestExists($USER)); + } finally { + $SQL->deleteRequestsByUser($USER->getUID()); + if ($pi_group->userExists($USER)) { + $pi_group->removeUser($USER); + } + if ($USER->exists()) { + $USER->getLDAPUser->delete(); + assert(!$USER->exists()); + } + } + } + + public function testCreateUserByCreateGroup() + { + global $USER, $SQL; + switchuser(...getNonExistentUser()); + $pi_group = $USER->getPIGroup(); + $this->assertTrue(!$USER->exists()); + $this->assertTrue(!$pi_group->exists()); + try { + $this->requestGroupCreation(); + $this->assertNumberGroupRequests(1); + $this->assertNumberGroupRequests(0); + + $second_request_failed = false; + try { + $this->requestGroupCreation(); + } catch(Exception) { + $second_request_failed = true; + } + $this->assertTrue($second_request_failed); + $this->assertNumberGroupRequests(1); + + $this->cancelAllRequests(); + $this->assertNumberGroupRequests(0); + + $this->requestGroupCreation(); + $this->assertNumberGroupRequests(1); + + $pi_group->approveGroup(); + $this->assertNumberGroupRequests(0); + $this->assertTrue($pi_group->exists()); + $this->assertTrue($USER->exists()); + + $third_request_failed = false; + try { + $this->requestGroupCreation(); + } catch(Exception) { + $third_request_failed = true; + } + $this->assertTrue($third_request_failed); + $this->assertNumberGroupRequests(0); + } finally { + $SQL->deleteRequestsByUser($USER->getUID()); + if ($pi_group->exists()) { + $pi_group->getLDAPPIGroup()->delete(); + assert(!$pi_group->exists()); + } + if ($USER->exists()) { + $USER->getLDAPUser->delete(); + assert(!$USER->exists()); + } + } + } +} From 112fedb87ceb6a4c2f00e4445b44d7b3d2c549e4 Mon Sep 17 00:00:00 2001 From: Simon Leary Date: Fri, 28 Mar 2025 03:26:50 -0400 Subject: [PATCH 3/9] define site vars --- tools/docker-dev/sql/bootstrap.sql | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tools/docker-dev/sql/bootstrap.sql b/tools/docker-dev/sql/bootstrap.sql index 0cf708aa..ab0aab8b 100644 --- a/tools/docker-dev/sql/bootstrap.sql +++ b/tools/docker-dev/sql/bootstrap.sql @@ -188,6 +188,11 @@ CREATE TABLE `sitevars` ( `value` varchar(768) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; +INSERT INTO `sitevars` (`id`, `name`, `value`) VALUES +(0, 'MAX_UID', '0'), +(1, 'MAX_GID', '0'), +(2, 'MAX_PIGID', '0'); + -- -- Indexes for dumped tables -- From 9ade97725d0f879690f60b894e5ac7f8f998ed51 Mon Sep 17 00:00:00 2001 From: Simon Leary Date: Tue, 3 Jun 2025 22:22:19 -0400 Subject: [PATCH 4/9] progress --- test/functional/NewUserTest.php | 118 ++++++++++++++++++++------------ 1 file changed, 75 insertions(+), 43 deletions(-) diff --git a/test/functional/NewUserTest.php b/test/functional/NewUserTest.php index fcd34dbc..f8a8c3fe 100644 --- a/test/functional/NewUserTest.php +++ b/test/functional/NewUserTest.php @@ -53,9 +53,54 @@ private function cancelAllRequests() $this->assertTrue($redirectedOrDied); } + // delete requests made by that user + // delete user entry + // remove user from org group + // remove user from "all users" group + // does not remove user from PI groups + private function ensureUserDoesNotExist() + { + $SQL->deleteRequestsByUser($USER->getUID()); + if ($USER->exists()) { + $USER->getLDAPUser()->delete(); + assert(!$USER->exists()); + } + $org = $USER->getOrgGroup(); + if ($org->inOrg($USER)) { + $org->removeUser($USER); + assert(!$org->inOrg($USER)); + } + $all_users_group = $LDAP->getUserGroup(); + $all_member_uids = $all_users_group->getAttribute("memberUid"); + if (in_array($USER->getUID(), $all_member_uids)) { + $all_users_group->setAttribute( + "memberUid", + array_diff($all_member_uids, [$USER->getUID()]) + ); + $all_users_group->write(); + assert(!in_array($USER->getUID(), $all_users_group->getAttribute("memberUid"))); + } + } + + private function ensureUserNotInPIGroup($gid) + { + if ($pi_group->userExists($USER)) { + $pi_group->removeUser($USER); + assert(!$pi_group->userExists($USER)); + } + } + + private function ensurePIGroupDoesNotExist() + { + if ($USER->getPIGroup()->exists()) { + $USER->getPIGroup()->getLDAPPIGroup()->delete(); + assert(!$USER->getPIGroup()->exists()); + } + } + public function testCreateUserByJoinGoup() { - global $USER, $SQL; + global $USER, $SQL, $LDAP; switchUser(...getUserIsPIHasNoMembersNoMemberRequests()); $pi_group = $USER->getPIGroup(); switchUser(...getNonExistentUser()); @@ -67,13 +112,13 @@ public function testCreateUserByJoinGoup() $this->requestGroupMembership($pi_group->getPIUID()); $this->assertNumberGroupRequests(1); - $second_request_failed = false; - try { + // $second_request_failed = false; + // try { $this->requestGroupMembership($pi_group->getPIUID()); - } catch(Exception) { - $second_request_failed = true; - } - $this->assertTrue($second_request_failed); + // } catch(Exception) { + // $second_request_failed = true; + // } + // $this->assertTrue($second_request_failed); $this->assertNumberGroupRequests(1); $this->cancelAllRequests(); @@ -89,30 +134,24 @@ public function testCreateUserByJoinGoup() $this->assertTrue($pi_group->userExists($USER)); $this->assertTrue($USER->exists()); - $third_request_failed = false; - try { + // $third_request_failed = false; + // try { $this->requestGroupMembership($pi_group->getPIUID()); - } catch(Exception) { - $third_request_failed = true; - } - $this->assertTrue($third_request_failed); + // } catch(Exception) { + // $third_request_failed = true; + // } + // $this->assertTrue($third_request_failed); $this->assertNumberGroupRequests(0); $this->assertTrue(!$pi_group->requestExists($USER)); } finally { - $SQL->deleteRequestsByUser($USER->getUID()); - if ($pi_group->userExists($USER)) { - $pi_group->removeUser($USER); - } - if ($USER->exists()) { - $USER->getLDAPUser->delete(); - assert(!$USER->exists()); - } + $this->ensureUserNotInPIGroup($pi_group->getPIUID()); + $this->ensureUserDoesNotExist(); } } public function testCreateUserByCreateGroup() { - global $USER, $SQL; + global $USER, $SQL, $LDAP; switchuser(...getNonExistentUser()); $pi_group = $USER->getPIGroup(); $this->assertTrue(!$USER->exists()); @@ -122,13 +161,13 @@ public function testCreateUserByCreateGroup() $this->assertNumberGroupRequests(1); $this->assertNumberGroupRequests(0); - $second_request_failed = false; - try { - $this->requestGroupCreation(); - } catch(Exception) { + // $second_request_failed = false; + // try { + // $this->requestGroupCreation(); + // } catch(Exception) { $second_request_failed = true; - } - $this->assertTrue($second_request_failed); + // } + // $this->assertTrue($second_request_failed); $this->assertNumberGroupRequests(1); $this->cancelAllRequests(); @@ -142,24 +181,17 @@ public function testCreateUserByCreateGroup() $this->assertTrue($pi_group->exists()); $this->assertTrue($USER->exists()); - $third_request_failed = false; - try { + // $third_request_failed = false; + // try { $this->requestGroupCreation(); - } catch(Exception) { - $third_request_failed = true; - } - $this->assertTrue($third_request_failed); + // } catch(Exception) { + // $third_request_failed = true; + // } + // $this->assertTrue($third_request_failed); $this->assertNumberGroupRequests(0); } finally { - $SQL->deleteRequestsByUser($USER->getUID()); - if ($pi_group->exists()) { - $pi_group->getLDAPPIGroup()->delete(); - assert(!$pi_group->exists()); - } - if ($USER->exists()) { - $USER->getLDAPUser->delete(); - assert(!$USER->exists()); - } + $this->ensurePIGroupDoesNotExist(); + $this->ensureUserDoesNotExist(); } } } From 5eb700ba01d65d55efc28bb061b98c51162c788e Mon Sep 17 00:00:00 2001 From: Simon Leary Date: Tue, 3 Jun 2025 22:37:25 -0400 Subject: [PATCH 5/9] fix tests --- test/functional/NewUserTest.php | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/test/functional/NewUserTest.php b/test/functional/NewUserTest.php index f8a8c3fe..74b576ae 100644 --- a/test/functional/NewUserTest.php +++ b/test/functional/NewUserTest.php @@ -2,6 +2,7 @@ use PHPUnit\Framework\TestCase; use UnityWebPortal\lib\exceptions\PhpUnitNoDieException; +use UnityWebPortal\lib\UnityGroup; class NewUserTest extends TestCase { @@ -60,6 +61,7 @@ private function cancelAllRequests() // does not remove user from PI groups private function ensureUserDoesNotExist() { + global $USER, $SQL, $LDAP; $SQL->deleteRequestsByUser($USER->getUID()); if ($USER->exists()) { $USER->getLDAPUser()->delete(); @@ -71,19 +73,21 @@ private function ensureUserDoesNotExist() assert(!$org->inOrg($USER)); } $all_users_group = $LDAP->getUserGroup(); - $all_member_uids = $all_users_group->getAttribute("memberUid"); + $all_member_uids = $all_users_group->getAttribute("memberuid"); + $new_uids = array_diff($all_member_uids, [$USER->getUID()]); if (in_array($USER->getUID(), $all_member_uids)) { $all_users_group->setAttribute( - "memberUid", + "memberuid", array_diff($all_member_uids, [$USER->getUID()]) ); $all_users_group->write(); - assert(!in_array($USER->getUID(), $all_users_group->getAttribute("memberUid"))); + assert(!in_array($USER->getUID(), $all_users_group->getAttribute("memberuid"))); } } - private function ensureUserNotInPIGroup($gid) + private function ensureUserNotInPIGroup(UnityGroup $pi_group) { + global $USER; if ($pi_group->userExists($USER)) { $pi_group->removeUser($USER); assert(!$pi_group->userExists($USER)); @@ -92,6 +96,7 @@ private function ensureUserNotInPIGroup($gid) private function ensurePIGroupDoesNotExist() { + global $USER; if ($USER->getPIGroup()->exists()) { $USER->getPIGroup()->getLDAPPIGroup()->delete(); assert(!$USER->getPIGroup()->exists()); @@ -144,7 +149,7 @@ public function testCreateUserByJoinGoup() $this->assertNumberGroupRequests(0); $this->assertTrue(!$pi_group->requestExists($USER)); } finally { - $this->ensureUserNotInPIGroup($pi_group->getPIUID()); + $this->ensureUserNotInPIGroup($pi_group); $this->ensureUserDoesNotExist(); } } @@ -159,13 +164,12 @@ public function testCreateUserByCreateGroup() try { $this->requestGroupCreation(); $this->assertNumberGroupRequests(1); - $this->assertNumberGroupRequests(0); // $second_request_failed = false; // try { - // $this->requestGroupCreation(); + $this->requestGroupCreation(); // } catch(Exception) { - $second_request_failed = true; + // $second_request_failed = true; // } // $this->assertTrue($second_request_failed); $this->assertNumberGroupRequests(1); From 1ae4cb4663073552740189e67053a86cc78a1614 Mon Sep 17 00:00:00 2001 From: Simon Leary Date: Tue, 3 Jun 2025 22:43:23 -0400 Subject: [PATCH 6/9] test new org group creation --- test/functional/NewUserTest.php | 1 + test/phpunit-bootstrap.php | 2 +- tools/docker-dev/web/htpasswd | 4 ++-- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/test/functional/NewUserTest.php b/test/functional/NewUserTest.php index 74b576ae..cfaf4673 100644 --- a/test/functional/NewUserTest.php +++ b/test/functional/NewUserTest.php @@ -110,6 +110,7 @@ public function testCreateUserByJoinGoup() $pi_group = $USER->getPIGroup(); switchUser(...getNonExistentUser()); $this->assertTrue(!$USER->exists()); + $this->assertTrue(!$USER->getOrgGroup()->exists()); $this->assertTrue($pi_group->exists()); $this->assertTrue(!$pi_group->userExists($USER)); $this->assertNumberGroupRequests(0); diff --git a/test/phpunit-bootstrap.php b/test/phpunit-bootstrap.php index 280ef77a..b5257995 100644 --- a/test/phpunit-bootstrap.php +++ b/test/phpunit-bootstrap.php @@ -165,7 +165,7 @@ function getUserIsPIHasAtLeastOneMember() function getNonExistentUser() { - return ["user2000@org2.test", "foo", "bar", "user2000@org2.test"]; + return ["user2001@org998.test", "foo", "bar", "user2001@org998.test"]; } function getAdminUser() diff --git a/tools/docker-dev/web/htpasswd b/tools/docker-dev/web/htpasswd index 1e49d1a3..dae0ece8 100644 --- a/tools/docker-dev/web/htpasswd +++ b/tools/docker-dev/web/htpasswd @@ -1303,5 +1303,5 @@ user1313@org1.test:$apr1$Rgrex74Z$rgJx6sCnGQN9UVMmhVG2R1 user1322@org14.test:$apr1$Rgrex74Z$rgJx6sCnGQN9UVMmhVG2R1 user1326@org14.test:$apr1$Rgrex74Z$rgJx6sCnGQN9UVMmhVG2R1 user2000@org2.test:$apr1$Rgrex74Z$rgJx6sCnGQN9UVMmhVG2R1 -user2001@org1.test:$apr1$Rgrex74Z$rgJx6sCnGQN9UVMmhVG2R1 -user2002@org5.test:$apr1$Rgrex74Z$rgJx6sCnGQN9UVMmhVG2R1 +user2001@org998.test:$apr1$Rgrex74Z$rgJx6sCnGQN9UVMmhVG2R1 +user2002@org999.test:$apr1$Rgrex74Z$rgJx6sCnGQN9UVMmhVG2R1 From e00ddf8514e37ba4813c366911c5645b6af01dea Mon Sep 17 00:00:00 2001 From: Simon Leary Date: Tue, 3 Jun 2025 22:43:50 -0400 Subject: [PATCH 7/9] remove old tests --- test/functional/CancelRequestTest.php | 71 --------------------------- 1 file changed, 71 deletions(-) delete mode 100644 test/functional/CancelRequestTest.php diff --git a/test/functional/CancelRequestTest.php b/test/functional/CancelRequestTest.php deleted file mode 100644 index 36028d6e..00000000 --- a/test/functional/CancelRequestTest.php +++ /dev/null @@ -1,71 +0,0 @@ -assertEquals($x, count($SQL->getRequestsByUser($USER->getUID()))); - } - - public function testCancelPIRequest() - { - global $USER, $SQL; - switchUser(...getNonExistentUser()); - // First create a request - try { - http_post( - __DIR__ . "/../../webroot/panel/new_account.php", - ["new_user_sel" => "pi", "eula" => "agree", "confirm_pi" => "agree"] - ); - } catch (PhpUnitNoDieException $e) { - // Ignore the exception from http_post - } - - $this->assertNumberGroupRequests(1); - - // Now try to cancel it - try { - http_post( - __DIR__ . "/../../webroot/panel/new_account.php", - ["cancel" => "true"] # value of cancel is arbitrary - ); - } catch (PhpUnitNoDieException $e) { - // Ignore the exception from http_post - } - - $this->assertNumberGroupRequests(0); - } - - public function testCancelGroupJoinRequest() - { - global $USER, $SQL; - switchUser(...getNonExistentUser()); - - try { - http_post( - __DIR__ . "/../../webroot/panel/new_account.php", - ["new_user_sel" => "not_pi", "eula" => "agree", "pi" => getExistingPI()] - ); - } catch (PhpUnitNoDieException $e) { - // Ignore the exception from http_post - } - - $this->assertNumberGroupRequests(1); - - // Now try to cancel it - try { - http_post( - __DIR__ . "/../../webroot/panel/new_account.php", - ["cancel" => "true"] # value of cancel is arbitrary - ); - } catch (PhpUnitNoDieException $e) { - // Ignore the exception from http_post - } - - $this->assertNumberGroupRequests(0); - } -} From 61fee21c3fa25a9152fb151a61826559722e2d73 Mon Sep 17 00:00:00 2001 From: Simon Leary Date: Tue, 3 Jun 2025 22:55:51 -0400 Subject: [PATCH 8/9] delete org group --- test/functional/NewUserTest.php | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/test/functional/NewUserTest.php b/test/functional/NewUserTest.php index cfaf4673..84e40f41 100644 --- a/test/functional/NewUserTest.php +++ b/test/functional/NewUserTest.php @@ -85,6 +85,16 @@ private function ensureUserDoesNotExist() } } + private function ensureOrgGroupDoesNotExist() + { + global $USER; + $org_group = $USER->getOrgGroup(); + if ($org_group->exists()) { + $org_group->getLDAPOrgGroup()->delete(); + assert(!$org_group->exists()); + } + } + private function ensureUserNotInPIGroup(UnityGroup $pi_group) { global $USER; @@ -139,6 +149,7 @@ public function testCreateUserByJoinGoup() $this->assertNumberGroupRequests(0); $this->assertTrue($pi_group->userExists($USER)); $this->assertTrue($USER->exists()); + $this->assertTrue($USER->getOrgGroup()->exists()); // $third_request_failed = false; // try { @@ -152,6 +163,7 @@ public function testCreateUserByJoinGoup() } finally { $this->ensureUserNotInPIGroup($pi_group); $this->ensureUserDoesNotExist(); + $this->ensureOrgGroupDoesNotExist(); } } @@ -162,6 +174,7 @@ public function testCreateUserByCreateGroup() $pi_group = $USER->getPIGroup(); $this->assertTrue(!$USER->exists()); $this->assertTrue(!$pi_group->exists()); + $this->assertTrue(!$USER->getOrgGroup()->exists()); try { $this->requestGroupCreation(); $this->assertNumberGroupRequests(1); @@ -185,6 +198,7 @@ public function testCreateUserByCreateGroup() $this->assertNumberGroupRequests(0); $this->assertTrue($pi_group->exists()); $this->assertTrue($USER->exists()); + $this->assertTrue($USER->getOrgGroup()->exists()); // $third_request_failed = false; // try { @@ -197,6 +211,7 @@ public function testCreateUserByCreateGroup() } finally { $this->ensurePIGroupDoesNotExist(); $this->ensureUserDoesNotExist(); + $this->ensureOrgGroupDoesNotExist(); } } } From e9aed797959496cad4298af3ab3a63f0506aff64 Mon Sep 17 00:00:00 2001 From: Simon Leary Date: Tue, 3 Jun 2025 22:59:54 -0400 Subject: [PATCH 9/9] remove old func --- test/phpunit-bootstrap.php | 8 -------- 1 file changed, 8 deletions(-) diff --git a/test/phpunit-bootstrap.php b/test/phpunit-bootstrap.php index b5257995..01ccc731 100644 --- a/test/phpunit-bootstrap.php +++ b/test/phpunit-bootstrap.php @@ -172,11 +172,3 @@ function getAdminUser() { return ["user1@org1.test", "foo", "bar", "user1@org1.test"]; } - -// box of shame -////////////////////////////////////////////////////////////////// -function getExistingPI() -{ - return "pi_user1005_org3_test"; -} -//////////////////////////////////////////////////////////////////