Add [SourceForgeOpenTickets] badge (#4112)

This commit is contained in:
James Cahill
2019-11-24 13:13:10 +00:00
committed by Pierre-Yves B
parent fb414b9adf
commit d42492f419
2 changed files with 93 additions and 0 deletions

View File

@@ -0,0 +1,66 @@
'use strict'
const Joi = require('@hapi/joi')
const { metric } = require('../text-formatters')
const { nonNegativeInteger } = require('../validators')
const { BaseJsonService } = require('..')
const schema = Joi.object({
count: nonNegativeInteger.required(),
}).required()
module.exports = class SourceforgeOpenTickets extends BaseJsonService {
static get category() {
return 'other'
}
static get route() {
return {
base: 'sourceforge/open-tickets',
pattern: ':project/:type(bugs|feature-requests)',
}
}
static get examples() {
return [
{
title: 'Sourceforge Open Tickets',
namedParams: {
type: 'bugs',
project: 'sevenzip',
},
staticPreview: this.render({ count: 1338 }),
},
]
}
static get defaultBadgeData() {
return {
label: 'open tickets',
color: 'blue',
}
}
static render({ count }) {
return {
message: metric(count),
}
}
async fetch({ type, project }) {
const url = `https://sourceforge.net/rest/p/${project}/${type}/search?limit=1&q=status%3Aopen`
return this._requestJson({
schema,
url,
errorMessages: {
404: 'project not found',
},
})
}
async handle({ type, project }) {
const { count } = await this.fetch({ type, project })
return this.constructor.render({ count })
}
}

View File

@@ -0,0 +1,27 @@
'use strict'
const { isMetric } = require('../test-validators')
const t = (module.exports = require('../tester').createServiceTester())
t.create('bugs')
.get('/sevenzip/bugs.json')
.expectBadge({
label: 'open tickets',
message: isMetric,
})
.timeout(10000)
t.create('feature requests')
.get('/sevenzip/feature-requests.json')
.expectBadge({
label: 'open tickets',
message: isMetric,
})
.timeout(10000)
t.create('invalid project')
.get('/invalid/bugs.json')
.expectBadge({
label: 'open tickets',
message: 'project not found',
})