From 51b8738ed8a0e0ac4304188712949756dce04d63 Mon Sep 17 00:00:00 2001
From: Aline Gondim Santos <aline.gondimsantos@savoirfairelinux.com>
Date: Tue, 5 Sep 2023 08:32:32 -0300
Subject: [PATCH] ut_plugins: fix reparsing manifest

Change-Id: Id199f9210d0b05981fa9345b4ae689a3fd155041
---
 src/plugin/jamipluginmanager.cpp  |  6 ++++--
 src/plugin/jamipluginmanager.h    |  5 ++++-
 test/unitTest/plugins/plugins.cpp | 12 +++++++-----
 3 files changed, 15 insertions(+), 8 deletions(-)

diff --git a/src/plugin/jamipluginmanager.cpp b/src/plugin/jamipluginmanager.cpp
index fdba70d874..72ddf46f6a 100644
--- a/src/plugin/jamipluginmanager.cpp
+++ b/src/plugin/jamipluginmanager.cpp
@@ -67,11 +67,13 @@ JamiPluginManager::getPluginAuthor(const std::string& rootPath, const std::strin
 }
 
 std::map<std::string, std::string>
-JamiPluginManager::getPluginDetails(const std::string& rootPath)
+JamiPluginManager::getPluginDetails(const std::string& rootPath, bool reset)
 {
     auto detailsIt = pluginDetailsMap_.find(rootPath);
     if (detailsIt != pluginDetailsMap_.end()) {
-        return detailsIt->second;
+        if (!reset)
+            return detailsIt->second;
+        pluginDetailsMap_.erase(detailsIt);
     }
 
     std::map<std::string, std::string> details = PluginUtils::parseManifestFile(
diff --git a/src/plugin/jamipluginmanager.h b/src/plugin/jamipluginmanager.h
index a1c8001e98..aac8054b1b 100644
--- a/src/plugin/jamipluginmanager.h
+++ b/src/plugin/jamipluginmanager.h
@@ -67,9 +67,12 @@ public:
      * @brief Parses a manifest file and return its content
      * along with other internally added values.
      * @param rootPath installation path
+     * @param reset If true, overrides previous details values
+     *              Reset is only used in the UT for now, but it can be useful
+     *              if we want to reset plugins language without restarting the application
      * @return Map where the keyset is {"id", "name", "description", "version", "iconPath", "imagePath","soPath"}
      */
-    std::map<std::string, std::string> getPluginDetails(const std::string& rootPath);
+    std::map<std::string, std::string> getPluginDetails(const std::string& rootPath, bool reset = false);
 
     /**
      * @brief Returns a vector with installed plugins
diff --git a/test/unitTest/plugins/plugins.cpp b/test/unitTest/plugins/plugins.cpp
index 25ab6d9941..6dc24e2c34 100644
--- a/test/unitTest/plugins/plugins.cpp
+++ b/test/unitTest/plugins/plugins.cpp
@@ -507,20 +507,22 @@ PluginsTest::testTranslations()
     Manager::instance().pluginPreferences.setPluginsEnabled(true);
     setenv("JAMI_LANG", "en", true);
     Manager::instance().getJamiPluginManager().installPlugin(jplPath_, true);
-    auto preferences = Manager::instance().getJamiPluginManager().getPluginPreferences(installationPath_, "");
-    CPPUNIT_ASSERT(!preferences.empty());
+
     auto preferencesValuesEN = Manager::instance().getJamiPluginManager().getPluginPreferencesValuesMap(installationPath_, "");
-    auto detailsValuesEN = Manager::instance().getJamiPluginManager().getPluginDetails(installationPath_);
+    auto detailsValuesEN = Manager::instance().getJamiPluginManager().getPluginDetails(installationPath_, true);
+
+    CPPUNIT_ASSERT(!preferencesValuesEN.empty());
+    CPPUNIT_ASSERT(!detailsValuesEN.empty());
 
     setenv("JAMI_LANG", "fr", true);
 
     CPPUNIT_ASSERT(Manager::instance().getJamiPluginManager().getPluginPreferencesValuesMap(installationPath_, "") != preferencesValuesEN);
-    CPPUNIT_ASSERT(Manager::instance().getJamiPluginManager().getPluginDetails(installationPath_) != detailsValuesEN);
+    CPPUNIT_ASSERT(Manager::instance().getJamiPluginManager().getPluginDetails(installationPath_, true) != detailsValuesEN);
 
     setenv("JAMI_LANG", "en", true);
 
     CPPUNIT_ASSERT(Manager::instance().getJamiPluginManager().getPluginPreferencesValuesMap(installationPath_, "") == preferencesValuesEN);
-    CPPUNIT_ASSERT(Manager::instance().getJamiPluginManager().getPluginDetails(installationPath_) == detailsValuesEN);
+    CPPUNIT_ASSERT(Manager::instance().getJamiPluginManager().getPluginDetails(installationPath_, true) == detailsValuesEN);
 
     CPPUNIT_ASSERT(!Manager::instance().getJamiPluginManager().uninstallPlugin(installationPath_));
 }
-- 
GitLab