From 9083a7a84db1cc02d03faaf703c4b195b9dc970a Mon Sep 17 00:00:00 2001
From: Xavier Jouslin de Noray <xavier.jouslindenoray@savoirfairelinux.com>
Date: Tue, 2 Jan 2024 15:22:29 -0500
Subject: [PATCH] Version Request Broken: give the version for one plugin

Gitlab: #13
Change-Id: I32fcf48eada33c3049d79cb50abca20bd0c6e97f
---
 src/controllers/plugins.controller.ts   | 17 ++++++++++-----
 src/services/plugins.manager.service.ts | 29 +++++++++++++++----------
 tests/plugins.manager.test.ts           |  2 +-
 3 files changed, 31 insertions(+), 17 deletions(-)

diff --git a/src/controllers/plugins.controller.ts b/src/controllers/plugins.controller.ts
index 0368283..4edda25 100644
--- a/src/controllers/plugins.controller.ts
+++ b/src/controllers/plugins.controller.ts
@@ -303,8 +303,12 @@ export class PluginsController {
               .status(isUploadable ? StatusCodes.OK : StatusCodes.FORBIDDEN)
               .send()
           )
-          .catch(() => res.status(StatusCodes.INTERNAL_SERVER_ERROR).send());
+          .catch(e => {
+            console.log(e);
+            res.status(StatusCodes.INTERNAL_SERVER_ERROR).send();
+          });
       } catch (e) {
+        console.log(e);
         res.status(StatusCodes.INTERNAL_SERVER_ERROR).send();
       }
     });
@@ -407,16 +411,19 @@ export class PluginsController {
     // eslint-disable-next-line @typescript-eslint/no-misused-promises
     this.router.get('/versions/:id', async (req: Request, res: Response) => {
       try {
-        if (req.query.arch === undefined) {
+        if (req.query.arch === undefined || req.params.id === undefined) {
           res.status(StatusCodes.BAD_REQUEST).send();
           return;
         }
-        const versions = await this.pluginsManager.getVersions();
+        const version = await this.pluginsManager.getVersion(
+          req.params.id,
+          req.query.arch as string
+        );
         res
           .status(
-            versions.length === 0 ? StatusCodes.NOT_FOUND : StatusCodes.OK
+            version === undefined ? StatusCodes.NOT_FOUND : StatusCodes.OK
           )
-          .send(versions === undefined ? undefined : versions);
+          .send(version === undefined ? undefined : [{version}]);
         return;
       } catch (e) {
         res.status(StatusCodes.INTERNAL_SERVER_ERROR).send();
diff --git a/src/services/plugins.manager.service.ts b/src/services/plugins.manager.service.ts
index bf96f84..00b5cd2 100644
--- a/src/services/plugins.manager.service.ts
+++ b/src/services/plugins.manager.service.ts
@@ -275,21 +275,28 @@ export class PluginsManager {
     );
   }
 
-  async getVersions(): Promise<Array<{id: string; version: string}>> {
+  async getVersion(id: string, arch: string): Promise<string | undefined> {
+    const plugin = await this.findPlugin(id, arch);
+    return plugin === undefined ? undefined : plugin.version;
+  }
+
+  async getVersions(
+    arch: string
+  ): Promise<Array<{id: string; version: string}>> {
     if (this.plugins.length === 0) {
       await this.setPlugins();
     }
-    const versions: Array<{id: string; version: string}> = [];
-    for (const plugin of this.plugins) {
-      const version = plugin.version;
-      if (version !== undefined) {
-        versions.push({
+    return this.plugins
+      .filter(
+        (plugins: Plugins) =>
+          plugins.arches.includes(arch) && plugins.version !== undefined
+      )
+      .map((plugin: Plugins) => {
+        return {
           id: plugin.id,
-          version,
-        });
-      }
-    }
-    return versions;
+          version: plugin.version,
+        };
+      });
   }
 
   private async setPlugins(): Promise<void> {
diff --git a/tests/plugins.manager.test.ts b/tests/plugins.manager.test.ts
index 4f46547..d334168 100644
--- a/tests/plugins.manager.test.ts
+++ b/tests/plugins.manager.test.ts
@@ -318,7 +318,7 @@ describe('Plugins manager service tests', function () {
             { id: 'plugin3', version: '3.0.0' },
         ];
 
-        const actualVersions = await pluginsManagerService.getVersions();
+        const actualVersions = await pluginsManagerService.getVersions('x64');
 
         expect(actualVersions).toEqual(expectedVersions);
     });
-- 
GitLab