Fix plugin names having hyphens

Any maven based plugin builds that had hyphens in the
names where being truncated to the first hyphen.

e.g. ai-code-review, was "ai" leading to incorrect names
and duplicated entries upon installation.

Replacing indexOf with lastIndexOf, to take everything up
to the version number.
N.B.Version numbers cannot contain suffix information like
-SNAPSHOT, or -rc0 for maven builds.

Bug: Issue 417683832
Change-Id: I1a206635499a2977dcc49503bd300b96fda6bffa
diff --git a/src/main/java/com/googlesource/gerrit/plugins/manager/repository/JenkinsCiPluginsRepository.java b/src/main/java/com/googlesource/gerrit/plugins/manager/repository/JenkinsCiPluginsRepository.java
index 192bbe5..d84eda5 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/manager/repository/JenkinsCiPluginsRepository.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/manager/repository/JenkinsCiPluginsRepository.java
@@ -16,6 +16,7 @@
 
 import static java.nio.charset.StandardCharsets.UTF_8;
 
+import com.google.common.annotations.VisibleForTesting;
 import com.google.common.flogger.FluentLogger;
 import com.google.gson.JsonArray;
 import com.google.gson.JsonElement;
@@ -261,10 +262,11 @@
     }
   }
 
-  private String fixPluginNameForMavenBuilds(String[] pluginPathParts) {
+  @VisibleForTesting
+  static String fixPluginNameForMavenBuilds(String[] pluginPathParts) {
     String mavenPluginFilename =
         StringUtils.substringBeforeLast(pluginPathParts[pluginPathParts.length - 1], ".");
-    int versionDelim = mavenPluginFilename.indexOf('-');
+    int versionDelim = mavenPluginFilename.lastIndexOf('-');
     return versionDelim > 0 ? mavenPluginFilename.substring(0, versionDelim) : mavenPluginFilename;
   }
 
@@ -292,7 +294,8 @@
     return pluginJsParts[filePos].substring(0, jsExtPos);
   }
 
-  private boolean isMavenBuild(String[] pluginPathParts) {
+  @VisibleForTesting
+  static boolean isMavenBuild(String[] pluginPathParts) {
     return pluginPathParts[pluginPathParts.length - 2].equals("target");
   }
 
diff --git a/src/test/java/com/googlesource/gerrit/plugins/manager/repository/PluginsCheckMavenNamingTest.java b/src/test/java/com/googlesource/gerrit/plugins/manager/repository/PluginsCheckMavenNamingTest.java
new file mode 100644
index 0000000..5d52844
--- /dev/null
+++ b/src/test/java/com/googlesource/gerrit/plugins/manager/repository/PluginsCheckMavenNamingTest.java
@@ -0,0 +1,43 @@
+package com.googlesource.gerrit.plugins.manager.repository;
+
+import java.util.Arrays;
+import org.junit.Test;
+import static com.google.common.truth.Truth.assertThat;
+import static com.googlesource.gerrit.plugins.manager.repository.JenkinsCiPluginsRepository.fixPluginNameForMavenBuilds;
+import static com.googlesource.gerrit.plugins.manager.repository.JenkinsCiPluginsRepository.isMavenBuild;
+
+
+// Class, to assist is checking the maven plugin naming functions.
+//
+// - fixPluginNameForMavenBuilds
+// - isMavenBuild.
+//
+public class PluginsCheckMavenNamingTest {
+
+	@Test
+	public void checkIsMavenBuildDetectionTrue(){
+		String [] pluginPathParts = {"target", "ai-code-review-3.1.0.jar"};
+		assertThat(isMavenBuild(pluginPathParts)).isTrue();
+	}
+	@Test
+	public void checkIsMavenBuildDetectionFalse(){
+		String [] pluginPathParts = {"bazel-bin", "plugins", "git-refs-filter.jar"};
+		assertThat(isMavenBuild(pluginPathParts)).isFalse();
+	}
+
+	@Test
+	public void checkMavenBuildNameCorrectionWorks_SimpleName(){
+		String [] pluginPathParts = {"target", "maintainer-3.10.0.jar"};
+		assertThat(isMavenBuild(pluginPathParts)).isTrue();
+		assertThat(fixPluginNameForMavenBuilds(pluginPathParts)).isEqualTo("maintainer");
+	}
+
+	@Test
+	public void checkMavenBuildNameCorrectionWorks_NameWithHyphens(){
+		// This test ensures that we dont get the incorrect name being returned as "ai".
+		String [] pluginPathParts = {"target", "ai-code-review-1.0.0.jar"};
+		assertThat(isMavenBuild(pluginPathParts)).isTrue();
+		assertThat(fixPluginNameForMavenBuilds(pluginPathParts)).isEqualTo("ai-code-review");
+	}
+
+}