From a0149a8f8f9f2be4f8286a6e267e12aab9d1e8ab Mon Sep 17 00:00:00 2001
From: James Chen-Smith <15643597+jameschensmith@users.noreply.github.com>
Date: Sat, 7 Jan 2023 12:43:10 -0600
Subject: [PATCH] deprecate [apm] service (#8773)

Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
---
 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 7a7d2537e2..17731be3d1 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 ed6f7c861e..032b17c82b 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' })
-- 
GitLab