diff --git a/services/github/github-code-search.tester.js b/services/github/github-code-search.tester.js deleted file mode 100644 index f6a51ea3e452fa..00000000000000 --- a/services/github/github-code-search.tester.js +++ /dev/null @@ -1,7 +0,0 @@ -import { isMetric } from '../test-validators.js' -import { createServiceTester } from '../tester.js' -export const t = await createServiceTester() - -t.create('hit counter') - .get('/search/code.json?query=async%20handle') - .expectBadge({ label: 'async handle counter', message: isMetric }) diff --git a/services/github/github-search-redirect.service.js b/services/github/github-search-redirect.service.js deleted file mode 100644 index 5b55f9245a2502..00000000000000 --- a/services/github/github-search-redirect.service.js +++ /dev/null @@ -1,14 +0,0 @@ -import { redirector } from '../index.js' - -export default redirector({ - category: 'analysis', - route: { - base: 'github/search', - pattern: ':user/:repo/:query+', - }, - transformPath: () => '/github/code-search', - transformQueryParams: ({ query, user, repo }) => ({ - query: `${query} repo:${user}/${repo}`, - }), - dateAdded: new Date('2024-11-29'), -}) diff --git a/services/github/github-search-redirect.tester.js b/services/github/github-search-redirect.tester.js deleted file mode 100644 index 85c8986dfa4ebc..00000000000000 --- a/services/github/github-search-redirect.tester.js +++ /dev/null @@ -1,8 +0,0 @@ -import { createServiceTester } from '../tester.js' -export const t = await createServiceTester() - -t.create('hit counter on repo') - .get('/badges/shields/async%20handle.json') - .expectRedirect( - '/github/search-code?query=async%20handle+repo%3Abadges%2Fshields', - ) diff --git a/services/github/github-code-search.service.js b/services/github/github-search.service.js similarity index 64% rename from services/github/github-code-search.service.js rename to services/github/github-search.service.js index e4307e36c99d70..8d89cada76fd98 100644 --- a/services/github/github-code-search.service.js +++ b/services/github/github-search.service.js @@ -1,5 +1,5 @@ import Joi from 'joi' -import { queryParams } from '../index.js' +import { queryParams, redirector } from '../index.js' import { metric } from '../text-formatters.js' import { nonNegativeInteger } from '../validators.js' import { GithubAuthV3Service } from './github-auth-service.js' @@ -14,26 +14,25 @@ const queryParamSchema = Joi.object({ const codeSearchDocs = ` For a full list of available filters and allowed values, see GitHub's documentation on -[Searching code](https://docs.github.com/en/search-github/github-code-search/understanding-github-code-search-syntax) +[Searching code](https://docs.github.com/en/search-github/github-code-search/understanding-github-code-search-syntax)` -${documentation}` - -export class GitHubCodeSearch extends GithubAuthV3Service { +class GitHubCodeSearch extends GithubAuthV3Service { static category = 'analysis' static route = { base: 'github', - pattern: 'code-search', + pattern: 'search', queryParamSchema, } static openApi = { - '/github/code-search': { + '/github/search': { get: { summary: 'GitHub code search count', - description: codeSearchDocs, + description: documentation, parameters: queryParams({ name: 'query', + description: codeSearchDocs, example: 'goto language:javascript NOT is:fork NOT is:archived', required: true, }), @@ -45,6 +44,14 @@ export class GitHubCodeSearch extends GithubAuthV3Service { label: 'counter', } + static render({ query, totalCount }) { + return { + label: `${query} counter`, + message: metric(totalCount), + color: 'blue', + } + } + async handle(_routeParams, { query }) { const { total_count: totalCount } = await this._requestJson({ url: '/search/code', @@ -59,10 +66,21 @@ export class GitHubCodeSearch extends GithubAuthV3Service { }, }) - return { - label: `${query} counter`, - message: metric(totalCount), - color: 'blue', - } + return this.constructor.render({ query, totalCount }) } } + +const GitHubCodeSearchRedirect = redirector({ + category: 'analysis', + route: { + base: 'github/search', + pattern: ':user/:repo/:query+', + }, + transformPath: () => '/github/search', + transformQueryParams: ({ query, user, repo }) => ({ + query: `${query} repo:${user}/${repo}`, + }), + dateAdded: new Date('2024-11-29'), +}) + +export { GitHubCodeSearch, GitHubCodeSearchRedirect } diff --git a/services/github/github-search.tester.js b/services/github/github-search.tester.js new file mode 100644 index 00000000000000..060eb4766ea39e --- /dev/null +++ b/services/github/github-search.tester.js @@ -0,0 +1,20 @@ +import { isMetric } from '../test-validators.js' +import { createServiceTester } from '../tester.js' +export const t = await createServiceTester() + +t.create('hit counter') + .get('/search.json?query=async%20handle') + .expectBadge({ label: 'async handle counter', message: isMetric }) + +t.create('hit counter, zero results') + .get('/search.json?query=async%20handle%20repo%3Abadges%2Fpuppets') + .expectBadge({ + label: 'async handle repo:badges/puppets counter', + message: '0', + }) + +t.create('legacy redirect') + .get('/search/badges/shields/async%20handle.svg') + .expectRedirect( + '/github/search.svg?query=async%20handle%20repo%3Abadges%2Fshields', + )