From 0818d24282f3eb4043d7bee93ce630b5b00b4e49 Mon Sep 17 00:00:00 2001 From: James Chen-Smith Date: Wed, 4 Jan 2023 23:28:56 -0600 Subject: [PATCH] deprecate [apm] service --- services/apm/apm.service.js | 140 ++++++++---------------------------- services/apm/apm.tester.js | 46 ++---------- 2 files changed, 32 insertions(+), 154 deletions(-) diff --git a/services/apm/apm.service.js b/services/apm/apm.service.js index 7a7d2537e241e..17731be3d12b6 100644 --- a/services/apm/apm.service.js +++ b/services/apm/apm.service.js @@ -1,117 +1,33 @@ -import Joi from 'joi' -import { renderLicenseBadge } from '../licenses.js' -import { renderVersionBadge } from '../version.js' -import { renderDownloadsBadge } from '../downloads.js' -import { nonNegativeInteger } from '../validators.js' -import { BaseJsonService, InvalidResponse } from '../index.js' - -const keywords = ['atom'] - -const schema = Joi.object({ - downloads: nonNegativeInteger, - releases: Joi.object({ - latest: Joi.string().required(), - }), - metadata: Joi.object({ - license: Joi.string().required(), - }), +import { deprecatedService } from '../index.js' + +const APMDownloads = deprecatedService({ + category: 'downloads', + route: { + base: 'apm/dm', + pattern: ':various*', + }, + label: 'downloads', + dateAdded: new Date('2023-01-04'), }) -class BaseAPMService extends BaseJsonService { - static defaultBadgeData = { label: 'apm' } - - async fetch({ packageName }) { - return this._requestJson({ - schema, - url: `https://atom.io/api/packages/${packageName}`, - errorMessages: { 404: 'package not found' }, - }) - } -} - -class APMDownloads extends BaseAPMService { - static category = 'downloads' - static route = { base: 'apm/dm', pattern: ':packageName' } - - static examples = [ - { - title: 'APM', - namedParams: { packageName: 'vim-mode' }, - staticPreview: this.render({ downloads: '60043' }), - keywords, - }, - ] - - static defaultBadgeData = { label: 'downloads' } - - static render({ downloads }) { - return renderDownloadsBadge({ downloads, colorOverride: 'green' }) - } - - async handle({ packageName }) { - const json = await this.fetch({ packageName }) - return this.constructor.render({ downloads: json.downloads }) - } -} - -class APMVersion extends BaseAPMService { - static category = 'version' - static route = { base: 'apm/v', pattern: ':packageName' } - - static examples = [ - { - title: 'APM', - namedParams: { packageName: 'vim-mode' }, - staticPreview: this.render({ version: '0.6.0' }), - keywords, - }, - ] - - static render({ version }) { - return renderVersionBadge({ version }) - } - - async handle({ packageName }) { - const json = await this.fetch({ packageName }) - - const version = json.releases.latest - if (!version) - throw new InvalidResponse({ - underlyingError: new Error('version is invalid'), - }) - return this.constructor.render({ version }) - } -} - -class APMLicense extends BaseAPMService { - static category = 'license' - static route = { base: 'apm/l', pattern: ':packageName' } - - static examples = [ - { - title: 'APM', - namedParams: { packageName: 'vim-mode' }, - staticPreview: this.render({ license: 'MIT' }), - keywords, - }, - ] - - static defaultBadgeData = { label: 'license' } - - static render({ license }) { - return renderLicenseBadge({ license }) - } - - async handle({ packageName }) { - const json = await this.fetch({ packageName }) +const APMVersion = deprecatedService({ + category: 'version', + route: { + base: 'apm/v', + pattern: ':various*', + }, + label: 'apm', + dateAdded: new Date('2023-01-04'), +}) - const license = json.metadata.license - if (!license) - throw new InvalidResponse({ - underlyingError: new Error('licence is invalid'), - }) - return this.constructor.render({ license }) - } -} +const APMLicense = deprecatedService({ + category: 'license', + route: { + base: 'apm/l', + pattern: ':various*', + }, + label: 'license', + dateAdded: new Date('2023-01-04'), +}) export { APMDownloads, APMVersion, APMLicense } diff --git a/services/apm/apm.tester.js b/services/apm/apm.tester.js index ed6f7c861e54a..032b17c82b578 100644 --- a/services/apm/apm.tester.js +++ b/services/apm/apm.tester.js @@ -1,57 +1,19 @@ import { ServiceTester } from '../tester.js' -import { invalidJSON } from '../response-fixtures.js' -import { isMetric, isVPlusTripleDottedVersion } from '../test-validators.js' export const t = new ServiceTester({ id: 'apm', title: 'Atom Package Manager', + pathPrefix: '/apm', }) t.create('Downloads') .get('/dm/vim-mode.json') - .expectBadge({ label: 'downloads', message: isMetric }) + .expectBadge({ label: 'downloads', message: 'no longer available' }) t.create('Version') .get('/v/vim-mode.json') - .expectBadge({ label: 'apm', message: isVPlusTripleDottedVersion }) + .expectBadge({ label: 'apm', message: 'no longer available' }) t.create('License') .get('/l/vim-mode.json') - .expectBadge({ label: 'license', message: 'MIT' }) - -t.create('Downloads | Package not found') - .get('/dm/notapackage.json') - .expectBadge({ label: 'downloads', message: 'package not found' }) - -t.create('Version | Package not found') - .get('/v/notapackage.json') - .expectBadge({ label: 'apm', message: 'package not found' }) - -t.create('License | Package not found') - .get('/l/notapackage.json') - .expectBadge({ label: 'license', message: 'package not found' }) - -t.create('Invalid version') - .get('/dm/vim-mode.json') - .intercept(nock => - nock('https://atom.io') - .get('/api/packages/vim-mode') - .reply(200, '{"releases":{}}') - ) - .expectBadge({ label: 'downloads', message: 'invalid response data' }) - -t.create('Invalid License') - .get('/l/vim-mode.json') - .intercept(nock => - nock('https://atom.io') - .get('/api/packages/vim-mode') - .reply(200, '{"metadata":{}}') - ) - .expectBadge({ label: 'license', message: 'invalid response data' }) - -t.create('Unexpected response') - .get('/dm/vim-mode.json') - .intercept(nock => - nock('https://atom.io').get('/api/packages/vim-mode').reply(invalidJSON) - ) - .expectBadge({ label: 'downloads', message: 'unparseable json response' }) + .expectBadge({ label: 'license', message: 'no longer available' })