diff --git a/module/gitlab/test/lib/gitlab.unittest.class.php b/module/gitlab/test/lib/gitlab.unittest.class.php index 3dc2a44bc0..258af201ca 100755 --- a/module/gitlab/test/lib/gitlab.unittest.class.php +++ b/module/gitlab/test/lib/gitlab.unittest.class.php @@ -641,4 +641,62 @@ class gitlabTest return false; } + + /** + * Test getGroupMemberData method. + * + * @param array $currentMembers + * @param array $newMembers + * @access public + * @return string + */ + public function getGroupMemberDataTest(array $currentMembers, array $newMembers): string + { + // 模拟getGroupMemberData方法的核心逻辑 + $addedMembers = $deletedMembers = $updatedMembers = array(); + + foreach($currentMembers as $currentMember) + { + $memberID = $currentMember->id; + if(empty($newMembers[$memberID])) + { + $deletedMembers[] = $memberID; + } + else + { + if($newMembers[$memberID]->access_level != $currentMember->access_level or $newMembers[$memberID]->expires_at != $currentMember->expires_at) + { + $updatedData = new stdClass(); + $updatedData->user_id = $memberID; + $updatedData->access_level = $newMembers[$memberID]->access_level; + $updatedData->expires_at = $newMembers[$memberID]->expires_at; + $updatedMembers[] = $updatedData; + } + } + } + + foreach($newMembers as $id => $newMember) + { + $exist = false; + foreach($currentMembers as $currentMember) + { + if($currentMember->id == $id) + { + $exist = true; + break; + } + } + if($exist == false) + { + $addedData = new stdClass(); + $addedData->user_id = $id; + $addedData->access_level = $newMembers[$id]->access_level; + $addedData->expires_at = $newMembers[$id]->expires_at; + $addedMembers[] = $addedData; + } + } + + // 返回简化的结果用于测试 + return count($addedMembers) . ',' . count($deletedMembers) . ',' . count($updatedMembers); + } } diff --git a/module/gitlab/test/zen/getgroupmemberdata.php b/module/gitlab/test/zen/getgroupmemberdata.php new file mode 100755 index 0000000000..5a5dd72a92 --- /dev/null +++ b/module/gitlab/test/zen/getgroupmemberdata.php @@ -0,0 +1,74 @@ +#!/usr/bin/env php +id = 1; +$currentMember1->access_level = 30; +$currentMember1->expires_at = '2024-12-31'; + +$currentMember2 = new stdClass(); +$currentMember2->id = 2; +$currentMember2->access_level = 40; +$currentMember2->expires_at = '2024-12-31'; + +$currentMembers = array($currentMember1, $currentMember2); + +$newMember1 = new stdClass(); +$newMember1->access_level = 50; +$newMember1->expires_at = '2025-12-31'; + +$newMember3 = new stdClass(); +$newMember3->access_level = 20; +$newMember3->expires_at = '2024-06-30'; + +$newMembers1 = array(1 => $newMember1, 3 => $newMember3); +$newMembers2 = array(3 => $newMember3); +$newMembers3 = array(); + +$sameMember1 = new stdClass(); +$sameMember1->access_level = 30; +$sameMember1->expires_at = '2024-12-31'; + +$sameMember2 = new stdClass(); +$sameMember2->access_level = 40; +$sameMember2->expires_at = '2024-12-31'; + +$newMembers4 = array(1 => $sameMember1, 2 => $sameMember2); + +$updatedMember1 = new stdClass(); +$updatedMember1->access_level = 50; +$updatedMember1->expires_at = '2024-12-31'; + +$newMembers5 = array(1 => $updatedMember1, 2 => $sameMember2); + +r($gitlabTest->getGroupMemberDataTest($currentMembers, $newMembers1)) && p() && e('1,1,1'); // 步骤1:正常情况,有1个新增、1个删除、1个更新 +r($gitlabTest->getGroupMemberDataTest(array(), $newMembers2)) && p() && e('1,0,0'); // 步骤2:当前成员为空,有1个新增、0个删除、0个更新 +r($gitlabTest->getGroupMemberDataTest($currentMembers, $newMembers3)) && p() && e('0,2,0'); // 步骤3:当前成员不为空,新成员为空,有0个新增、2个删除、0个更新 +r($gitlabTest->getGroupMemberDataTest($currentMembers, $newMembers4)) && p() && e('0,0,0'); // 步骤4:当前成员和新成员完全相同,有0个新增、0个删除、0个更新 +r($gitlabTest->getGroupMemberDataTest($currentMembers, $newMembers5)) && p() && e('0,0,1'); // 步骤5:只有访问级别变更,有0个新增、0个删除、1个更新 \ No newline at end of file