@@ -479,6 +479,37 @@ public function testGetPullRequest(): void
479479 $ this ->vcsAdapter ->deleteRepository (self ::$ owner , $ repositoryName );
480480 }
481481
482+ public function testGetPullRequestFiles (): void
483+ {
484+ $ repositoryName = 'test-get-pull-request-files- ' . \uniqid ();
485+ $ this ->vcsAdapter ->createRepository (self ::$ owner , $ repositoryName , false );
486+
487+ $ this ->vcsAdapter ->createFile (self ::$ owner , $ repositoryName , 'README.md ' , '# Test ' );
488+ $ this ->vcsAdapter ->createBranch (self ::$ owner , $ repositoryName , 'feature-branch ' , 'main ' );
489+ $ this ->vcsAdapter ->createFile (self ::$ owner , $ repositoryName , 'feature.txt ' , 'feature content ' , 'Add feature ' , 'feature-branch ' );
490+
491+ $ pr = $ this ->vcsAdapter ->createPullRequest (
492+ self ::$ owner ,
493+ $ repositoryName ,
494+ 'Test PR Files ' ,
495+ 'feature-branch ' ,
496+ 'main '
497+ );
498+
499+ $ prNumber = $ pr ['number ' ] ?? 0 ;
500+ $ this ->assertGreaterThan (0 , $ prNumber );
501+
502+ $ result = $ this ->vcsAdapter ->getPullRequestFiles (self ::$ owner , $ repositoryName , $ prNumber );
503+
504+ $ this ->assertIsArray ($ result );
505+ $ this ->assertNotEmpty ($ result );
506+
507+ $ filenames = array_column ($ result , 'filename ' );
508+ $ this ->assertContains ('feature.txt ' , $ filenames );
509+
510+ $ this ->vcsAdapter ->deleteRepository (self ::$ owner , $ repositoryName );
511+ }
512+
482513 public function testGetPullRequestWithInvalidNumber (): void
483514 {
484515 $ repositoryName = 'test-get-pull-request-invalid- ' . \uniqid ();
@@ -891,114 +922,109 @@ public function testGetEventPush(): void
891922
892923 public function testGetEventPullRequest (): void
893924 {
925+ $ repositoryName = 'test-get-event-pull-request- ' . \uniqid ();
926+ $ this ->vcsAdapter ->createRepository (self ::$ owner , $ repositoryName , false );
927+
928+ $ this ->vcsAdapter ->createFile (self ::$ owner , $ repositoryName , 'README.md ' , '# Test ' );
929+ $ this ->vcsAdapter ->createBranch (self ::$ owner , $ repositoryName , 'feature-branch ' , 'main ' );
930+ $ this ->vcsAdapter ->createFile (self ::$ owner , $ repositoryName , 'feature.txt ' , 'feature content ' , 'Add feature ' , 'feature-branch ' );
931+
932+ $ pr = $ this ->vcsAdapter ->createPullRequest (self ::$ owner , $ repositoryName , 'Test PR ' , 'feature-branch ' , 'main ' );
933+ $ prNumber = $ pr ['number ' ] ?? 0 ;
934+ $ commitHash = $ pr ['head ' ]['sha ' ] ?? 'abc123 ' ;
935+
936+ $ fullName = self ::$ owner . '/ ' . $ repositoryName ;
937+ $ giteaUrl = System::getEnv ('TESTS_GITEA_URL ' , 'http://gitea:3000 ' ) ?? '' ;
938+
894939 $ payload = json_encode ([
895940 'action ' => 'opened ' ,
896- 'number ' => 42 ,
941+ 'number ' => $ prNumber ,
897942 'pull_request ' => [
898- 'id ' => 1 ,
899- 'number ' => 42 ,
900- 'state ' => 'open ' ,
901- 'title ' => 'Test PR ' ,
902943 'head ' => [
903944 'ref ' => 'feature-branch ' ,
904- 'sha ' => 'abc123 ' ,
905- 'repo ' => [
906- 'full_name ' => 'test-owner/test-repo ' ,
907- ],
908- 'user ' => [
909- 'login ' => 'pr-author ' ,
910- ],
945+ 'sha ' => $ commitHash ,
946+ 'repo ' => ['full_name ' => $ fullName ],
947+ 'user ' => ['login ' => self ::$ owner ],
911948 ],
912949 'base ' => [
913950 'ref ' => 'main ' ,
914- 'sha ' => 'def456 ' ,
915- 'user ' => [
916- 'login ' => 'base-owner ' ,
917- ],
918- ],
919- 'user ' => [
920- 'login ' => 'pr-author ' ,
921- 'avatar_url ' => 'http://gitea:3000/avatars/pr-author ' ,
951+ 'user ' => ['login ' => self ::$ owner ],
922952 ],
953+ 'user ' => ['login ' => self ::$ owner , 'avatar_url ' => "{$ giteaUrl }/avatars/ " . self ::$ owner ],
923954 ],
924955 'repository ' => [
925956 'id ' => 123 ,
926- 'name ' => 'test-repo ' ,
927- 'full_name ' => 'test-owner/test-repo ' ,
928- 'html_url ' => 'http://gitea:3000/test-owner/test-repo ' ,
929- 'owner ' => [
930- 'login ' => 'test-owner ' ,
931- ],
932- ],
933- 'sender ' => [
934- 'login ' => 'sender-user ' ,
935- 'html_url ' => 'http://gitea:3000/sender-user ' ,
957+ 'name ' => $ repositoryName ,
958+ 'full_name ' => $ fullName ,
959+ 'html_url ' => "{$ giteaUrl }/ " . self ::$ owner . "/ {$ repositoryName }" ,
960+ 'owner ' => ['login ' => self ::$ owner ],
936961 ],
962+ 'sender ' => ['html_url ' => "{$ giteaUrl }/ " . self ::$ owner ],
937963 ]);
938964
939- if ($ payload === false ) {
940- $ this ->fail ('Failed to encode JSON payload ' );
941- }
942-
943965 $ result = $ this ->vcsAdapter ->getEvent ('pull_request ' , $ payload );
944966
945967 $ this ->assertIsArray ($ result );
946- $ this ->assertArrayHasKey ('branch ' , $ result );
947- $ this ->assertArrayHasKey ('pullRequestNumber ' , $ result );
948- $ this ->assertArrayHasKey ('action ' , $ result );
949- $ this ->assertArrayHasKey ('commitHash ' , $ result );
950- $ this ->assertArrayHasKey ('external ' , $ result );
951-
952968 $ this ->assertSame ('feature-branch ' , $ result ['branch ' ]);
953- $ this ->assertSame (42 , $ result ['pullRequestNumber ' ]);
969+ $ this ->assertSame ($ prNumber , $ result ['pullRequestNumber ' ]);
954970 $ this ->assertSame ('opened ' , $ result ['action ' ]);
955- $ this ->assertSame ('abc123 ' , $ result ['commitHash ' ]);
956- $ this ->assertSame ('test-repo ' , $ result ['repositoryName ' ]);
957- $ this ->assertSame ('test-owner ' , $ result ['owner ' ]);
971+ $ this ->assertSame ($ repositoryName , $ result ['repositoryName ' ]);
972+ $ this ->assertSame (self ::$ owner , $ result ['owner ' ]);
958973 $ this ->assertFalse ($ result ['external ' ]);
974+ $ this ->assertCount (1 , $ result ['affectedFiles ' ]);
975+ $ this ->assertContains ('feature.txt ' , $ result ['affectedFiles ' ]);
976+
977+ $ this ->vcsAdapter ->deleteRepository (self ::$ owner , $ repositoryName );
959978 }
960979
961980 public function testGetEventPullRequestExternal (): void
962981 {
982+ $ repositoryName = 'test-get-event-pr-external- ' . \uniqid ();
983+ $ this ->vcsAdapter ->createRepository (self ::$ owner , $ repositoryName , false );
984+
985+ $ this ->vcsAdapter ->createFile (self ::$ owner , $ repositoryName , 'README.md ' , '# Test ' );
986+ $ this ->vcsAdapter ->createBranch (self ::$ owner , $ repositoryName , 'feature-branch ' , 'main ' );
987+ $ this ->vcsAdapter ->createFile (self ::$ owner , $ repositoryName , 'feature.txt ' , 'feature content ' , 'Add feature ' , 'feature-branch ' );
988+
989+ $ pr = $ this ->vcsAdapter ->createPullRequest (self ::$ owner , $ repositoryName , 'External PR ' , 'feature-branch ' , 'main ' );
990+ $ prNumber = $ pr ['number ' ] ?? 0 ;
991+ $ commitHash = $ pr ['head ' ]['sha ' ] ?? 'abc123 ' ;
992+
993+ $ giteaUrl = System::getEnv ('TESTS_GITEA_URL ' , 'http://gitea:3000 ' ) ?? '' ;
994+
963995 $ payload = json_encode ([
964996 'action ' => 'opened ' ,
965- 'number ' => 42 ,
997+ 'number ' => $ prNumber ,
966998 'pull_request ' => [
967999 'head ' => [
9681000 'ref ' => 'feature-branch ' ,
969- 'sha ' => 'abc123 ' ,
970- 'repo ' => [
971- 'full_name ' => 'external-user/forked-repo ' ,
972- ],
1001+ 'sha ' => $ commitHash ,
1002+ 'repo ' => ['full_name ' => 'external-user/ ' . $ repositoryName ],
1003+ 'user ' => ['login ' => 'external-user ' ],
9731004 ],
9741005 'base ' => [
9751006 'ref ' => 'main ' ,
1007+ 'user ' => ['login ' => self ::$ owner ],
9761008 ],
977- 'user ' => [
978- 'avatar_url ' => 'http://gitea:3000/avatars/external ' ,
979- ],
1009+ 'user ' => ['avatar_url ' => "{$ giteaUrl }/avatars/external-user " ],
9801010 ],
9811011 'repository ' => [
9821012 'id ' => 123 ,
983- 'name ' => 'test-repo ' ,
984- 'full_name ' => 'test-owner/test-repo ' ,
985- 'html_url ' => 'http://gitea:3000/test-owner/test-repo ' ,
986- 'owner ' => [
987- 'login ' => 'test-owner ' ,
988- ],
989- ],
990- 'sender ' => [
991- 'html_url ' => 'http://gitea:3000/external-user ' ,
1013+ 'name ' => $ repositoryName ,
1014+ 'full_name ' => self ::$ owner . '/ ' . $ repositoryName ,
1015+ 'html_url ' => "{$ giteaUrl }/ " . self ::$ owner . "/ {$ repositoryName }" ,
1016+ 'owner ' => ['login ' => self ::$ owner ],
9921017 ],
1018+ 'sender ' => ['html_url ' => "{$ giteaUrl }/external-user " ],
9931019 ]);
9941020
995- if ($ payload === false ) {
996- $ this ->fail ('Failed to encode JSON payload ' );
997- }
998-
9991021 $ result = $ this ->vcsAdapter ->getEvent ('pull_request ' , $ payload );
10001022
10011023 $ this ->assertTrue ($ result ['external ' ]);
1024+ $ this ->assertCount (1 , $ result ['affectedFiles ' ]);
1025+ $ this ->assertContains ('feature.txt ' , $ result ['affectedFiles ' ]);
1026+
1027+ $ this ->vcsAdapter ->deleteRepository (self ::$ owner , $ repositoryName );
10021028 }
10031029
10041030 public function testValidateWebhookEvent (): void
0 commit comments