From 036c0eb166debaefaa314eadcff3603298a799ad Mon Sep 17 00:00:00 2001
From: Lukas Planz <sytm@gmx.de>
Date: Sun, 29 Mar 2020 16:48:24 +0200
Subject: [PATCH] fix: [Spiget] invalid response for external downloads #4840
 (#4841)

* fix: spiget invalid response for external downloads #4840

* Changed the background color if resource is external and use proper Spiget API for the test

* Fix invalid mocked response for spiget service tests

Co-authored-by: Pierre-Yves B <PyvesDev@gmail.com>
---
 services/spiget/spiget-base.js                   |  5 ++++-
 services/spiget/spiget-download-size.service.js  | 14 ++++++++++++--
 services/spiget/spiget-download-size.tester.js   |  7 +++++++
 services/spiget/spiget-tested-versions.tester.js |  2 ++
 4 files changed, 25 insertions(+), 3 deletions(-)

diff --git a/services/spiget/spiget-base.js b/services/spiget/spiget-base.js
index f8d6ed137a..078f633666 100644
--- a/services/spiget/spiget-base.js
+++ b/services/spiget/spiget-base.js
@@ -6,8 +6,11 @@ const { BaseJsonService } = require('..')
 const resourceSchema = Joi.object({
   downloads: Joi.number().required(),
   file: Joi.object({
+    type: Joi.string().required(),
     size: Joi.number().required(),
-    sizeUnit: Joi.string().required(),
+    sizeUnit: Joi.string()
+      .allow('')
+      .required(),
   }).required(),
   testedVersions: Joi.array(),
   rating: Joi.object({
diff --git a/services/spiget/spiget-download-size.service.js b/services/spiget/spiget-download-size.service.js
index 410e5fd5dd..3d74cf2825 100644
--- a/services/spiget/spiget-download-size.service.js
+++ b/services/spiget/spiget-download-size.service.js
@@ -35,7 +35,13 @@ module.exports = class SpigetDownloadSize extends BaseSpigetService {
     }
   }
 
-  static render({ size, unit }) {
+  static render({ size, unit, type }) {
+    if (type === 'external') {
+      return {
+        message: `resource hosted externally`,
+        color: 'lightgrey',
+      }
+    }
     return {
       message: `${size} ${unit}`,
     }
@@ -43,6 +49,10 @@ module.exports = class SpigetDownloadSize extends BaseSpigetService {
 
   async handle({ resourceId }) {
     const { file } = await this.fetch({ resourceId })
-    return this.constructor.render({ size: file.size, unit: file.sizeUnit })
+    return this.constructor.render({
+      size: file.size,
+      unit: file.sizeUnit,
+      type: file.type,
+    })
   }
 }
diff --git a/services/spiget/spiget-download-size.tester.js b/services/spiget/spiget-download-size.tester.js
index bdcdd3bdec..a5c943d642 100644
--- a/services/spiget/spiget-download-size.tester.js
+++ b/services/spiget/spiget-download-size.tester.js
@@ -7,6 +7,13 @@ t.create('EssentialsX (id 9089)')
   .get('/9089.json')
   .expectBadge({ label: 'size', message: isFileSize })
 
+t.create('Advanced Achievements (id 6239)')
+  .get('/6239.json')
+  .expectBadge({
+    lavel: 'size',
+    message: 'resource hosted externally',
+  })
+
 t.create('Invalid Resource (id 1)')
   .get('/1.json')
   .expectBadge({
diff --git a/services/spiget/spiget-tested-versions.tester.js b/services/spiget/spiget-tested-versions.tester.js
index cf942beabe..7389e9283c 100644
--- a/services/spiget/spiget-tested-versions.tester.js
+++ b/services/spiget/spiget-tested-versions.tester.js
@@ -27,6 +27,7 @@ t.create('Nock - single version supported')
       .reply(200, {
         downloads: 1,
         file: {
+          type: '.jar',
           size: 1,
           sizeUnit: '1',
         },
@@ -50,6 +51,7 @@ t.create('Nock - multiple versions supported')
       .reply(200, {
         downloads: 1,
         file: {
+          type: '.jar',
           size: 1,
           sizeUnit: '1',
         },
-- 
GitLab