From d1df97cfcc943e13a4ab2ee50e3eb9a3c42762e0 Mon Sep 17 00:00:00 2001 From: Seth Falco Date: Tue, 6 Jul 2021 16:24:18 +0200 Subject: [PATCH] fix: use nouns for weblate badge routes --- ...service.js => weblate-entities.service.js} | 6 ++-- ...t.tester.js => weblate-entities.tester.js} | 0 ...e.js => weblate-user-statistic.service.js} | 36 +++++++++++++++---- ...er.js => weblate-user-statistic.tester.js} | 6 ++-- 4 files changed, 35 insertions(+), 13 deletions(-) rename services/weblate/{weblate-entity-count.service.js => weblate-entities.service.js} (90%) rename services/weblate/{weblate-entity-count.tester.js => weblate-entities.tester.js} (100%) rename services/weblate/{weblate-user-statistics.service.js => weblate-user-statistic.service.js} (59%) rename services/weblate/{weblate-user-statistics.tester.js => weblate-user-statistic.tester.js} (68%) diff --git a/services/weblate/weblate-entity-count.service.js b/services/weblate/weblate-entities.service.js similarity index 90% rename from services/weblate/weblate-entity-count.service.js rename to services/weblate/weblate-entities.service.js index a30050891b800..a0013502ac93b 100644 --- a/services/weblate/weblate-entity-count.service.js +++ b/services/weblate/weblate-entities.service.js @@ -11,17 +11,17 @@ const queryParamSchema = Joi.object({ server: optionalUrl, }).required() -module.exports = class WeblateEntityCount extends BaseJsonService { +export default class WeblateEntities extends BaseJsonService { static category = 'other' static route = { - base: 'weblate/count', + base: 'weblate', pattern: ':type(components|projects|users|languages)', queryParamSchema, } static examples = [ { - title: `Weblate entity count`, + title: `Weblate entities`, namedParams: { type: 'projects' }, queryParams: { server: 'https://hosted.weblate.org' }, staticPreview: this.render({ type: 'projects', count: 533 }), diff --git a/services/weblate/weblate-entity-count.tester.js b/services/weblate/weblate-entities.tester.js similarity index 100% rename from services/weblate/weblate-entity-count.tester.js rename to services/weblate/weblate-entities.tester.js diff --git a/services/weblate/weblate-user-statistics.service.js b/services/weblate/weblate-user-statistic.service.js similarity index 59% rename from services/weblate/weblate-user-statistics.service.js rename to services/weblate/weblate-user-statistic.service.js index 61ee8c8f16570..f834cb3b0ae43 100644 --- a/services/weblate/weblate-user-statistics.service.js +++ b/services/weblate/weblate-user-statistic.service.js @@ -18,26 +18,26 @@ const queryParamSchema = Joi.object({ export default class WeblateUserStatistic extends BaseJsonService { static category = 'other' static route = { - base: 'weblate/user', + base: 'weblate', pattern: - ':user/:statistic(translated|suggested|languages|uploaded|commented)', + ':statistic(translations|suggestions|languages|uploads|comments)/:user', queryParamSchema, } static examples = [ { title: `Weblate user statistic`, - namedParams: { user: 'nijel', statistic: 'translated' }, + namedParams: { statistic: 'translations', user: 'nijel' }, queryParams: { server: 'https://hosted.weblate.org' }, - staticPreview: this.render({ type: 'translated', count: 30585 }), + staticPreview: this.render({ statistic: 'translations', count: 30585 }), keywords: ['i18n', 'internationalization'], }, ] static defaultBadgeData = { color: 'informational' } - static render({ type, count }) { - return { label: type, message: metric(count) } + static render({ statistic, count }) { + return { label: statistic, message: metric(count) } } async fetch({ user, server = 'https://hosted.weblate.org' }) { @@ -53,7 +53,29 @@ export default class WeblateUserStatistic extends BaseJsonService { } async handle({ user, statistic }, { server }) { + let upstreamStatisticName + + switch (statistic) { + case 'translations': + upstreamStatisticName = 'translated' + break + case 'suggestions': + upstreamStatisticName = 'suggested' + break + case 'uploads': + upstreamStatisticName = 'uploaded' + break + case 'comments': + upstreamStatisticName = 'commented' + break + default: + upstreamStatisticName = statistic + } + const data = await this.fetch({ user, server }) - return this.constructor.render({ type: statistic, count: data[statistic] }) + return this.constructor.render({ + statistic, + count: data[upstreamStatisticName], + }) } } diff --git a/services/weblate/weblate-user-statistics.tester.js b/services/weblate/weblate-user-statistic.tester.js similarity index 68% rename from services/weblate/weblate-user-statistics.tester.js rename to services/weblate/weblate-user-statistic.tester.js index 3b3df8b9ee7f4..4b52a568d713c 100644 --- a/services/weblate/weblate-user-statistics.tester.js +++ b/services/weblate/weblate-user-statistic.tester.js @@ -3,13 +3,13 @@ import { isMetric } from '../test-validators.js' export const t = await createServiceTester() t.create('Translations') - .get('/nijel/translations.json?server=https://hosted.weblate.org') + .get('/translations/nijel.json?server=https://hosted.weblate.org') .expectBadge({ label: 'translations', message: isMetric }) t.create('Suggestions') - .get('/nijel/suggestions.json?server=https://hosted.weblate.org') + .get('/suggestions/nijel.json?server=https://hosted.weblate.org') .expectBadge({ label: 'suggestions', message: isMetric }) t.create('Languages') - .get('/nijel/languages.json?server=https://hosted.weblate.org') + .get('/languages/nijel.json?server=https://hosted.weblate.org') .expectBadge({ label: 'languages', message: isMetric })