Skip to content

Commit

Permalink
migrate some services from examples to openApi part 45; affects [gith…
Browse files Browse the repository at this point in the history
…ub coveralls visualstudiomarketplace] (#9930)

* migrate some services from examples to openApi

* update e2e test to use simpler example
  • Loading branch information
chris48s authored Feb 11, 2024
1 parent 79bd5f3 commit 095e4f8
Show file tree
Hide file tree
Showing 8 changed files with 187 additions and 375 deletions.
2 changes: 1 addition & 1 deletion core/base-service/openapi.js
Original file line number Diff line number Diff line change
Expand Up @@ -212,7 +212,7 @@ function services2openapi(services, sort) {
for (const [key, value] of Object.entries(
addGlobalProperties(service.openApi),
)) {
if (key in paths) {
if (key in paths && key !== '/github/{variant}/{user}/{repo}') {
throw new Error(`Conflicting route: ${key}`)
}
paths[key] = value
Expand Down
6 changes: 3 additions & 3 deletions cypress/e2e/main-page.cy.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,14 +40,14 @@ describe('Frontend', function () {
})

it('Build a badge', function () {
visitAndWait('/badges/git-hub-issues')
visitAndWait('/badges/git-hub-license')

cy.contains('/github/issues/:user/:repo')
cy.contains('/github/license/:user/:repo')

cy.get('input[placeholder="user"]').type('badges')
cy.get('input[placeholder="repo"]').type('shields')

cy.intercept('GET', `${backendUrl}/github/issues/badges/shields`).as('get')
cy.intercept('GET', `${backendUrl}/github/license/badges/shields`).as('get')
cy.contains('Execute').click()
cy.wait('@get').its('response.statusCode').should('eq', 200)
cy.get('img[id="badge-preview"]')
Expand Down
32 changes: 16 additions & 16 deletions services/coveralls/coveralls.service.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import Joi from 'joi'
import { coveragePercentage } from '../color-formatters.js'
import { BaseJsonService } from '../index.js'
import { BaseJsonService, pathParam, queryParam } from '../index.js'

const schema = Joi.object({
covered_percent: Joi.number().min(0).max(100).required(),
Expand All @@ -18,23 +18,23 @@ export default class Coveralls extends BaseJsonService {
queryParamSchema,
}

static examples = [
{
title: 'Coveralls',
namedParams: { vcsType: 'github', user: 'jekyll', repo: 'jekyll' },
staticPreview: this.render({ coverage: 86 }),
},
{
title: 'Coveralls branch',
namedParams: {
vcsType: 'bitbucket',
user: 'pyKLIP',
repo: 'pyklip',
static openApi = {
'/coverallsCoverage/{vcsType}/{user}/{repo}': {
get: {
summary: 'Coveralls',
parameters: [
pathParam({
name: 'vcsType',
example: 'github',
schema: { type: 'string', enum: this.getEnum('vcsType') },
}),
pathParam({ name: 'user', example: 'jekyll' }),
pathParam({ name: 'repo', example: 'jekyll' }),
queryParam({ name: 'branch', example: 'master' }),
],
},
queryParams: { branch: 'master' },
staticPreview: this.render({ coverage: 96 }),
},
]
}

static defaultBadgeData = { label: 'coverage' }

Expand Down
281 changes: 39 additions & 242 deletions services/github/github-issues.service.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import gql from 'graphql-tag'
import Joi from 'joi'
import { pathParams } from '../index.js'
import { metric } from '../text-formatters.js'
import { nonNegativeInteger } from '../validators.js'
import { GithubAuthV4Service } from './github-auth-service.js'
Expand Down Expand Up @@ -27,264 +28,59 @@ const pullRequestCountSchema = Joi.object({

const isPRVariant = {
'issues-pr': true,
'issues-pr-raw': true,
'issues-pr-closed': true,
'issues-pr-closed-raw': true,
}

const isClosedVariant = {
'issues-closed': true,
'issues-closed-raw': true,
'issues-pr-closed': true,
'issues-pr-closed-raw': true,
}

export default class GithubIssues extends GithubAuthV4Service {
static category = 'issue-tracking'
static route = {
base: 'github',
pattern:
':variant(issues|issues-closed|issues-pr|issues-pr-closed):raw(-raw)?/:user/:repo/:label*',
':variant(issues|issues-raw|issues-closed|issues-closed-raw|issues-pr|issues-pr-raw|issues-pr-closed|issues-pr-closed-raw)/:user/:repo/:label*',
}

static examples = [
{
title: 'GitHub issues',
pattern: 'issues/:user/:repo',
namedParams: {
user: 'badges',
repo: 'shields',
},
staticPreview: {
label: 'issues',
message: '167 open',
color: 'yellow',
},
documentation,
},
{
title: 'GitHub issues',
pattern: 'issues-raw/:user/:repo',
namedParams: {
user: 'badges',
repo: 'shields',
},
staticPreview: {
label: 'open issues',
message: '167',
color: 'yellow',
},
documentation,
},
{
title: 'GitHub issues by-label',
pattern: 'issues/:user/:repo/:label',
namedParams: {
user: 'badges',
repo: 'shields',
label: 'service-badge',
},
staticPreview: {
label: 'service-badge issues',
message: '110 open',
color: 'yellow',
},
documentation,
},
{
title: 'GitHub issues by-label',
pattern: 'issues-raw/:user/:repo/:label',
namedParams: {
user: 'badges',
repo: 'shields',
label: 'service-badge',
},
staticPreview: {
label: 'open service-badge issues',
message: '110',
color: 'yellow',
},
documentation,
},
{
title: 'GitHub closed issues',
pattern: 'issues-closed/:user/:repo',
namedParams: {
user: 'badges',
repo: 'shields',
},
staticPreview: {
label: 'issues',
message: '899 closed',
color: 'yellow',
},
documentation,
},
{
title: 'GitHub closed issues',
pattern: 'issues-closed-raw/:user/:repo',
namedParams: {
user: 'badges',
repo: 'shields',
},
staticPreview: {
label: 'closed issues',
message: '899',
color: 'yellow',
},
documentation,
},
{
title: 'GitHub closed issues by-label',
pattern: 'issues-closed/:user/:repo/:label',
namedParams: {
user: 'badges',
repo: 'shields',
label: 'service-badge',
},
staticPreview: {
label: 'service-badge issues',
message: '452 closed',
color: 'yellow',
},
documentation,
},
{
title: 'GitHub closed issues by-label',
pattern: 'issues-closed-raw/:user/:repo/:label',
namedParams: {
user: 'badges',
repo: 'shields',
label: 'service-badge',
},
staticPreview: {
label: 'closed service-badge issues',
message: '452',
color: 'yellow',
},
documentation,
},
{
title: 'GitHub pull requests',
pattern: 'issues-pr/:user/:repo',
namedParams: {
user: 'cdnjs',
repo: 'cdnjs',
},
staticPreview: {
label: 'pull requests',
message: '136 open',
color: 'yellow',
},
keywords: ['pullrequest', 'pr'],
documentation,
},
{
title: 'GitHub pull requests',
pattern: 'issues-pr-raw/:user/:repo',
namedParams: {
user: 'cdnjs',
repo: 'cdnjs',
},
staticPreview: {
label: 'open pull requests',
message: '136',
color: 'yellow',
},
keywords: ['pullrequest', 'pr'],
documentation,
},
{
title: 'GitHub closed pull requests',
pattern: 'issues-pr-closed/:user/:repo',
namedParams: {
user: 'cdnjs',
repo: 'cdnjs',
},
staticPreview: {
label: 'pull requests',
message: '7k closed',
color: 'yellow',
},
keywords: ['pullrequest', 'pr'],
documentation,
},
{
title: 'GitHub closed pull requests',
pattern: 'issues-pr-closed-raw/:user/:repo',
namedParams: {
user: 'cdnjs',
repo: 'cdnjs',
},
staticPreview: {
label: 'closed pull requests',
message: '7k',
color: 'yellow',
},
keywords: ['pullrequest', 'pr'],
documentation,
},
{
title: 'GitHub pull requests by-label',
pattern: 'issues-pr/:user/:repo/:label',
namedParams: {
user: 'badges',
repo: 'shields',
label: 'service-badge',
},
staticPreview: {
label: 'service-badge pull requests',
message: '8 open',
color: 'yellow',
},
keywords: ['pullrequest', 'pr'],
documentation,
},
{
title: 'GitHub pull requests by-label',
pattern: 'issues-pr-raw/:user/:repo/:label',
namedParams: {
user: 'badges',
repo: 'shields',
label: 'service-badge',
},
staticPreview: {
label: 'open service-badge pull requests',
message: '8',
color: 'yellow',
},
keywords: ['pullrequest', 'pr'],
documentation,
},
{
title: 'GitHub closed pull requests by-label',
pattern: 'issues-pr-closed/:user/:repo/:label',
namedParams: {
user: 'badges',
repo: 'shields',
label: 'service-badge',
},
staticPreview: {
label: 'service-badge pull requests',
message: '835 closed',
color: 'yellow',
},
keywords: ['pullrequest', 'pr'],
documentation,
},
{
title: 'GitHub closed pull requests by-label',
pattern: 'issues-pr-closed-raw/:user/:repo/:label',
namedParams: {
user: 'badges',
repo: 'shields',
label: 'service-badge',
},
staticPreview: {
label: 'closed service-badge pull requests',
message: '835',
color: 'yellow',
static openApi = {
'/github/{variant}/{user}/{repo}': {
get: {
summary: 'GitHub Issues or Pull Requests',
description: documentation,
parameters: pathParams(
{
name: 'variant',
example: 'issues',
schema: { type: 'string', enum: this.getEnum('variant') },
},
{ name: 'user', example: 'badges' },
{ name: 'repo', example: 'shields' },
),
},
},
'/github/{variant}/{user}/{repo}/{label}': {
get: {
summary: 'GitHub Issues or Pull Requests by label',
description: documentation,
parameters: pathParams(
{
name: 'variant',
example: 'issues',
schema: { type: 'string', enum: this.getEnum('variant') },
},
{ name: 'user', example: 'badges' },
{ name: 'repo', example: 'shields' },
{ name: 'label', example: 'service-badge' },
),
},
keywords: ['pullrequest', 'pr'],
documentation,
},
]
}

static defaultBadgeData = { label: 'issues', color: 'informational' }

Expand Down Expand Up @@ -383,7 +179,8 @@ export default class GithubIssues extends GithubAuthV4Service {
}
}

async handle({ variant, raw, user, repo, label }) {
async handle({ variant, user, repo, label }) {
const raw = variant.endsWith('-raw')
const isPR = isPRVariant[variant]
const isClosed = isClosedVariant[variant]
const { issueCount } = await this.fetch({
Expand Down
Loading

0 comments on commit 095e4f8

Please sign in to comment.