From f1d30708ce9b3c7a89acf9165ff00bbbd5fdfb22 Mon Sep 17 00:00:00 2001
From: Xavier Jouslin de Noray <xavier.jouslindenoray@savoirfairelinux.com>
Date: Thu, 3 Aug 2023 10:01:16 -0400
Subject: [PATCH] Id: difference between id and name

Change-Id: Id499dd1bf51a1303d97028f89929cbbdc54424a2
---
 src/interfaces/plugins.ts               |  1 +
 src/services/plugins_manager.service.ts | 28 ++++++++++++++-----------
 tests/plugins.controller.test.ts        |  5 +++--
 tests/plugins.manager.test.ts           | 11 +++++++++-
 4 files changed, 30 insertions(+), 15 deletions(-)

diff --git a/src/interfaces/plugins.ts b/src/interfaces/plugins.ts
index eb5ab5f..5e67d47 100644
--- a/src/interfaces/plugins.ts
+++ b/src/interfaces/plugins.ts
@@ -16,6 +16,7 @@
  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA.
  */
 export interface Plugins {
+  id: string;
   name: string;
   version: string;
   description: string;
diff --git a/src/services/plugins_manager.service.ts b/src/services/plugins_manager.service.ts
index c896359..9128438 100644
--- a/src/services/plugins_manager.service.ts
+++ b/src/services/plugins_manager.service.ts
@@ -57,6 +57,7 @@ export class PluginsManager {
     return this.plugins
       .map((plugin: Plugins) => {
         return {
+          id: plugin.id,
           name: plugin.name,
           version: plugin.version,
           description: plugin.description,
@@ -66,11 +67,12 @@ export class PluginsManager {
           author: plugin.author,
         };
       })
-      .filter(plugin => this.isPluginAvailable(plugin.name, arch));
+      .filter(plugin => this.isPluginAvailable(plugin.id, arch));
   }
 
   async getPlugin(id: string): Promise<
     | {
+        id: string;
         name: string;
         version: string;
         description: string;
@@ -84,11 +86,12 @@ export class PluginsManager {
     if (this.plugins.length === 0) {
       await this.setPlugins();
     }
-    const plugin = this.plugins.find((plugin: Plugins) => plugin.name === id);
+    const plugin = this.plugins.find((plugin: Plugins) => plugin.id === id);
 
     return plugin === undefined
       ? undefined
       : {
+          id: plugin.id,
           name: plugin.name,
           version: plugin.version,
           description: plugin.description,
@@ -103,7 +106,7 @@ export class PluginsManager {
     if (this.plugins.length === 0) {
       await this.setPlugins();
     }
-    const plugin = this.plugins.find((plugin: Plugins) => plugin.name === id);
+    const plugin = this.plugins.find((plugin: Plugins) => plugin.id === id);
     if (
       plugin === undefined ||
       !this.isPluginAvailable(id, arch) ||
@@ -117,11 +120,11 @@ export class PluginsManager {
       '/../..' +
       process.env.DATA_DIRECTORY +
       '/' +
-      plugin.name +
+      id +
       '/' +
       arch +
       '/' +
-      plugin.name +
+      id +
       '.jpl'
     );
   }
@@ -141,6 +144,7 @@ export class PluginsManager {
         return;
       }
       return {
+        id: plugin.id,
         name: plugin.name,
         version: plugin.version,
         description: plugin.description,
@@ -159,13 +163,13 @@ export class PluginsManager {
 
   private isPluginAvailable(id: string, arch: string): boolean {
     const plugin = this.plugins.find((plugin: Plugins) => {
-      return plugin.name === id && plugin.arches.includes(arch);
+      return plugin.id === id && plugin.arches.includes(arch);
     });
     return plugin !== undefined;
   }
 
   removePlugin(id: string): void {
-    this.plugins = this.plugins.filter((plugin: Plugins) => plugin.name !== id);
+    this.plugins = this.plugins.filter((plugin: Plugins) => plugin.id !== id);
   }
 
   private async readManifest(path: string): Promise<{
@@ -180,7 +184,7 @@ export class PluginsManager {
       await this.fileManager.readArchive(path, 'manifest.json')
     );
     return {
-      id: manifest.name,
+      id: manifest.id === undefined ? manifest.name : manifest.id,
       name: manifest.name,
       version: manifest.version,
       description: manifest.description,
@@ -198,7 +202,7 @@ export class PluginsManager {
     }
     const plugin = this.plugins.find(
       (plugin: Plugins) =>
-        plugin.name === id &&
+        plugin.id === id &&
         plugin.arches.includes(arch as string) &&
         arch !== undefined
     );
@@ -216,11 +220,11 @@ export class PluginsManager {
         '/../..' +
         process.env.DATA_DIRECTORY +
         '/' +
-        id +
+        plugin.id +
         '/' +
         arch +
         '/' +
-        id +
+        plugin.id +
         '.jpl',
       'data/' + plugin.icon
     );
@@ -235,7 +239,7 @@ export class PluginsManager {
       const version = plugin.version;
       if (version !== undefined) {
         versions.push({
-          id: plugin.name,
+          id: plugin.id,
           version,
         });
       }
diff --git a/tests/plugins.controller.test.ts b/tests/plugins.controller.test.ts
index ac70f94..00a637b 100644
--- a/tests/plugins.controller.test.ts
+++ b/tests/plugins.controller.test.ts
@@ -47,6 +47,7 @@ describe('Routes', function () {
   it("should fetch all plugins", (done) => {
     const expectedPlugins = [
       {
+        id: 'test',
         name: 'test',
         version: '',
         description: '',
@@ -88,7 +89,7 @@ describe('Routes', function () {
   });
 
   it("should fetch plugin details", (done) => {
-    const expectedPlugin = { name: 'test', version: '', description: '', icon: '', background: '', author: '', timestamp: '' };
+    const expectedPlugin = { id: 'test', name: 'test', version: '', description: '', icon: '', author: '', timestamp: '', background: '' };
     pluginsManagerServiceStub.getPlugin.resolves(expectedPlugin);
 
     request(expressApp)
@@ -131,7 +132,7 @@ describe('Routes', function () {
 
   it("should download a plugin", (done) => {
     pluginsManagerServiceStub.getPluginPath.resolves('test');
-    const expectedPlugin = { name: 'test', version: '', description: '', icon: '', author: '', timestamp: '', background: '' };
+    const expectedPlugin = { id: 'test', name: 'test', version: '', description: '', icon: '', author: '', timestamp: '', background: ''  };
     pluginsManagerServiceStub.getPlugin.resolves(expectedPlugin);
 
     fs.writeFileSync('test', 'test');
diff --git a/tests/plugins.manager.test.ts b/tests/plugins.manager.test.ts
index 79a59ff..43a427a 100644
--- a/tests/plugins.manager.test.ts
+++ b/tests/plugins.manager.test.ts
@@ -42,6 +42,7 @@ describe('Plugins manager service tests', function () {
     it('should return a list of plugins', async () => {
         const fakePlugin = [
             {
+                id: 'test',
                 name: 'test',
                 version: '',
                 description: '',
@@ -54,6 +55,7 @@ describe('Plugins manager service tests', function () {
 
         const expectedPlugin = [
             {
+                id: 'test',
                 name: 'test',
                 version: '',
                 description: '',
@@ -72,6 +74,7 @@ describe('Plugins manager service tests', function () {
     it('should return a plugin', async () => {
         const plugin =
         {
+            id: 'test',
             name: 'test',
             version: '1.0.0',
             description: 'test',
@@ -86,7 +89,7 @@ describe('Plugins manager service tests', function () {
             arches: ["test"],
         }];
 
-        pluginsManagerService['plugins'] = expected;
+    pluginsManagerService['plugins'] = expected;
 
         const actual = await pluginsManagerService.getPlugin("test");
 
@@ -100,6 +103,7 @@ describe('Plugins manager service tests', function () {
 
     it('should return plugin path', async () => {
         const plugin = {
+            id: 'test',
             name: 'test',
             version: '1.0.0',
             description: 'test',
@@ -195,6 +199,7 @@ describe('Plugins manager service tests', function () {
 
     it('should return true if plugin is available', () => {
         const plugin = {
+            id: 'test',
             name: 'test',
             version: '1.0.0',
             description: 'test',
@@ -249,6 +254,7 @@ describe('Plugins manager service tests', function () {
     it('should return the icon content for a valid plugin', async () => {
 
         const plugin = {
+            id: 'test',
             name: 'test',
             version: '1.0.0',
             description: 'test',
@@ -285,6 +291,7 @@ describe('Plugins manager service tests', function () {
     it('should return an array of plugin versions', async () => {
         const plugins = [
             {
+                id: 'plugin1',
                 name: 'plugin1',
                 version: '1.0.0',
                 description: 'Plugin 1',
@@ -295,6 +302,7 @@ describe('Plugins manager service tests', function () {
                 author: 'author1',
             },
             {
+                id: 'plugin2',
                 name: 'plugin2',
                 version: '2.0.0',
                 description: 'Plugin 2',
@@ -305,6 +313,7 @@ describe('Plugins manager service tests', function () {
                 author: 'author2',
             },
             {
+                id: 'plugin3',
                 name: 'plugin3',
                 version: '3.0.0',
                 description: 'Plugin 3',
-- 
GitLab