From a5e30900482298cda9e6f3b3b921a1ddd6eb141c Mon Sep 17 00:00:00 2001 From: Chris Huber Date: Sun, 31 May 2026 20:23:47 -0400 Subject: [PATCH] fix: select issue read credentials --- inc/Abilities/GitHubAbilities.php | 4 ++-- tests/smoke-github-create-abilities.php | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/inc/Abilities/GitHubAbilities.php b/inc/Abilities/GitHubAbilities.php index 151e02e5..1371e7ff 100644 --- a/inc/Abilities/GitHubAbilities.php +++ b/inc/Abilities/GitHubAbilities.php @@ -1357,7 +1357,7 @@ public static function listIssues( array $input ): array|\WP_Error { return new \WP_Error('missing_repo', 'Repository is required (owner/repo format).', array( 'status' => 400 )); } - $pat = self::getPatForRepo($repo); + $pat = self::getPatForRepoCapability($repo, 'issues_read'); if ( empty($pat) ) { return self::patError(); } @@ -1406,7 +1406,7 @@ public static function getIssue( array $input ): array|\WP_Error { return new \WP_Error('missing_params', 'Repository (owner/repo) and issue_number are required.', array( 'status' => 400 )); } - $pat = self::getPatForRepo($repo); + $pat = self::getPatForRepoCapability($repo, 'issues_read'); if ( empty($pat) ) { return self::patError(); } diff --git a/tests/smoke-github-create-abilities.php b/tests/smoke-github-create-abilities.php index f363b331..670f0dbb 100644 --- a/tests/smoke-github-create-abilities.php +++ b/tests/smoke-github-create-abilities.php @@ -845,8 +845,10 @@ function wp_remote_retrieve_body( $response ): string ), ) ); + \DataMachineCode\Support\GitHubCredentialResolver::$selectors = array(); $result = GitHubAbilities::getIssue(array( 'repo' => 'owner/repo', 'issue_number' => 123 )); $issue = is_array($result) ? ( $result['issue'] ?? array() ) : array(); + $assert('getIssue selects issues_read credential by repo', array( 'repo' => 'owner/repo', 'capability' => 'issues_read' ) === ( \DataMachineCode\Support\GitHubCredentialResolver::$selectors[0] ?? null )); $assert('getIssue returns generated_at', is_array($result) && ! empty($result['generated_at'])); $assert('getIssue preserves comments count', 2 === ( $issue['comments'] ?? null ) && 2 === ( $issue['comment_count'] ?? null )); $assert('getIssue fetches latest issue comment page', is_string($GLOBALS['dmc_http_calls'][1]['url'] ?? null) && str_contains($GLOBALS['dmc_http_calls'][1]['url'], '/repos/owner/repo/issues/123/comments') && str_contains($GLOBALS['dmc_http_calls'][1]['url'], 'per_page=1') && str_contains($GLOBALS['dmc_http_calls'][1]['url'], 'page=2'));