Add [SourceForgeOpenTickets] badge (#4112)
This commit is contained in:
committed by
Pierre-Yves B
parent
fb414b9adf
commit
d42492f419
66
services/sourceforge/sourceforge-open-tickets.service.js
Normal file
66
services/sourceforge/sourceforge-open-tickets.service.js
Normal 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 })
|
||||
}
|
||||
}
|
||||
27
services/sourceforge/sourceforge-open-tickets.tester.js
Normal file
27
services/sourceforge/sourceforge-open-tickets.tester.js
Normal 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',
|
||||
})
|
||||
Reference in New Issue
Block a user