From efd707eb65ed74b3e376e0178bd43270dccb7432 Mon Sep 17 00:00:00 2001
From: Pierce Thompson <52843537+Insprill@users.noreply.github.com>
Date: Sat, 31 Dec 2022 07:24:31 -0800
Subject: [PATCH] Add [modrinth] game versions (#8673)

* Add a Modrinth game versions badge

* Require at least one game version

* Code style

Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
---
 services/modrinth/modrinth-base.js            |  1 +
 .../modrinth-game-versions.service.js         | 34 +++++++++++++++++++
 .../modrinth/modrinth-game-versions.tester.js | 15 ++++++++
 3 files changed, 50 insertions(+)
 create mode 100644 services/modrinth/modrinth-game-versions.service.js
 create mode 100644 services/modrinth/modrinth-game-versions.tester.js

diff --git a/services/modrinth/modrinth-base.js b/services/modrinth/modrinth-base.js
index 0501e9067a..a26a95ce4b 100644
--- a/services/modrinth/modrinth-base.js
+++ b/services/modrinth/modrinth-base.js
@@ -11,6 +11,7 @@ const versionSchema = Joi.array()
   .items(
     Joi.object({
       version_number: Joi.string().required(),
+      game_versions: Joi.array().items(Joi.string()).min(1).required(),
     }).required()
   )
   .required()
diff --git a/services/modrinth/modrinth-game-versions.service.js b/services/modrinth/modrinth-game-versions.service.js
new file mode 100644
index 0000000000..88939d9371
--- /dev/null
+++ b/services/modrinth/modrinth-game-versions.service.js
@@ -0,0 +1,34 @@
+import { BaseModrinthService, documentation } from './modrinth-base.js'
+
+export default class ModrinthGameVersions extends BaseModrinthService {
+  static category = 'platform-support'
+
+  static route = {
+    base: 'modrinth/game-versions',
+    pattern: ':projectId',
+  }
+
+  static examples = [
+    {
+      title: 'Modrinth Game Versions',
+      namedParams: { projectId: 'AANobbMI' },
+      staticPreview: this.render({ versions: ['1.19.2', '1.19.1', '1.19'] }),
+      documentation,
+    },
+  ]
+
+  static defaultBadgeData = { label: 'game versions' }
+
+  static render({ versions }) {
+    return {
+      message: versions.join(' | '),
+      color: 'blue',
+    }
+  }
+
+  async handle({ projectId }) {
+    const { 0: latest } = await this.fetchVersions({ projectId })
+    const versions = latest.game_versions
+    return this.constructor.render({ versions })
+  }
+}
diff --git a/services/modrinth/modrinth-game-versions.tester.js b/services/modrinth/modrinth-game-versions.tester.js
new file mode 100644
index 0000000000..0a52d5cb82
--- /dev/null
+++ b/services/modrinth/modrinth-game-versions.tester.js
@@ -0,0 +1,15 @@
+import { createServiceTester } from '../tester.js'
+import { withRegex } from '../test-validators.js'
+
+export const t = await createServiceTester()
+
+t.create('Game Versions')
+  .get('/AANobbMI.json')
+  .expectBadge({
+    label: 'game versions',
+    message: withRegex(/\d+\.\d+(\.\d+)?( \| )?/),
+  })
+
+t.create('Game Versions (not found)')
+  .get('/not-existing.json')
+  .expectBadge({ label: 'game versions', message: 'not found', color: 'red' })
-- 
GitLab