This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch CAMEL-23615-plugin-list-command
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 185b3be2a79cc89d2b342c210b03ae41aaeeab00
Author: Claus Ibsen <[email protected]>
AuthorDate: Wed May 27 08:28:28 2026 +0200

    CAMEL-23615: Add camel plugin list command
    
    Add new `camel plugin list` command that shows all available plugins
    (installed, bundled, and known 3rd party). The `camel plugin get`
    command now only shows installed plugins. The old `--all` flag on
    `camel plugin get` is deprecated and delegates to `camel plugin list`.
    
    Co-Authored-By: Claude Opus 4.6 <[email protected]>
---
 .../ROOT/pages/camel-4x-upgrade-guide-4_21.adoc    |  6 ++
 .../jbang-commands/camel-jbang-plugin-get.adoc     |  3 +-
 ...lugin-get.adoc => camel-jbang-plugin-list.adoc} |  7 +-
 .../pages/jbang-commands/camel-jbang-plugin.adoc   |  3 +-
 .../META-INF/camel-jbang-commands-metadata.json    |  2 +-
 .../dsl/jbang/core/commands/CamelJBangMain.java    |  4 +-
 .../dsl/jbang/core/commands/plugin/PluginGet.java  | 65 ++++------------
 .../dsl/jbang/core/commands/plugin/PluginList.java | 83 ++++++++++++++++++++
 .../jbang/core/commands/plugin/PluginGetTest.java  | 90 ++--------------------
 .../jbang/core/commands/plugin/PluginListTest.java | 65 ++++++++++++++++
 10 files changed, 188 insertions(+), 140 deletions(-)

diff --git 
a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_21.adoc 
b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_21.adoc
index d5902c60d10d..64141bb260fe 100644
--- a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_21.adoc
+++ b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_21.adoc
@@ -157,6 +157,12 @@ the matching `*_doc` tool. The default `limit` for 
`camel_catalog_components` an
 `camel_catalog_dataformats` is also lowered from 50 to 20; pass an explicit 
`limit` to restore the
 previous behaviour.
 
+==== camel-jbang plugin commands
+
+The `camel plugin get --all` option is deprecated. Use the new `camel plugin 
list` command instead,
+which lists all available plugins (installed, bundled, and known 3rd party).
+The `camel plugin get` command now only shows installed plugins.
+
 ==== camel-jbang plugins
 
 Plugins are now loaded lazily. Built-in commands that do not consume plugins
diff --git 
a/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-plugin-get.adoc
 
b/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-plugin-get.adoc
index be343bbd3f71..a664283a3f47 100644
--- 
a/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-plugin-get.adoc
+++ 
b/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-plugin-get.adoc
@@ -2,7 +2,7 @@
 // AUTO-GENERATED by camel-package-maven-plugin - DO NOT EDIT THIS FILE
 = camel plugin get
 
-Display available plugins
+Get installed plugins
 
 
 == Usage
@@ -19,7 +19,6 @@ camel plugin get [options]
 [cols="2,5,1,2",options="header"]
 |===
 | Option | Description | Default | Type
-| `--all` | Display all available plugins | false | boolean
 | `--repos` | Display maven repository column | false | boolean
 | `-h,--help` | Display the help and sub-commands |  | boolean
 |===
diff --git 
a/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-plugin-get.adoc
 
b/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-plugin-list.adoc
similarity index 71%
copy from 
docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-plugin-get.adoc
copy to 
docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-plugin-list.adoc
index be343bbd3f71..a98fbb6a8423 100644
--- 
a/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-plugin-get.adoc
+++ 
b/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-plugin-list.adoc
@@ -1,15 +1,15 @@
 
 // AUTO-GENERATED by camel-package-maven-plugin - DO NOT EDIT THIS FILE
-= camel plugin get
+= camel plugin list
 
-Display available plugins
+List all available plugins
 
 
 == Usage
 
 [source,bash]
 ----
-camel plugin get [options]
+camel plugin list [options]
 ----
 
 
@@ -19,7 +19,6 @@ camel plugin get [options]
 [cols="2,5,1,2",options="header"]
 |===
 | Option | Description | Default | Type
-| `--all` | Display all available plugins | false | boolean
 | `--repos` | Display maven repository column | false | boolean
 | `-h,--help` | Display the help and sub-commands |  | boolean
 |===
diff --git 
a/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-plugin.adoc 
b/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-plugin.adoc
index d345109609ad..1397ec4d03a6 100644
--- a/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-plugin.adoc
+++ b/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-plugin.adoc
@@ -20,7 +20,8 @@ camel plugin [options]
 | Subcommand | Description
 | xref:jbang-commands/camel-jbang-plugin-add.adoc[add] | Add new plugin
 | xref:jbang-commands/camel-jbang-plugin-delete.adoc[delete] | Removes a plugin
-| xref:jbang-commands/camel-jbang-plugin-get.adoc[get] | Display available 
plugins
+| xref:jbang-commands/camel-jbang-plugin-get.adoc[get] | Get installed plugins
+| xref:jbang-commands/camel-jbang-plugin-list.adoc[list] | List all available 
plugins
 |===
 
 
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/generated/resources/META-INF/camel-jbang-commands-metadata.json
 
b/dsl/camel-jbang/camel-jbang-core/src/generated/resources/META-INF/camel-jbang-commands-metadata.json
index 194ec512ccdc..f668e15d7669 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/generated/resources/META-INF/camel-jbang-commands-metadata.json
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/generated/resources/META-INF/camel-jbang-commands-metadata.json
@@ -22,7 +22,7 @@
     { "name": "jolokia", "fullName": "jolokia", "description": "Attach Jolokia 
JVM Agent to a running Camel integration", "sourceClass": 
"org.apache.camel.dsl.jbang.core.commands.process.Jolokia", "options": [ { 
"names": "--port", "description": "To use a specific port number when attaching 
Jolokia JVM Agent (default a free port is found in range 8778-9999)", 
"javaType": "int", "type": "integer" }, { "names": "--stop", "description": 
"Stops the Jolokia JVM Agent in the running Camel inte [...]
     { "name": "log", "fullName": "log", "description": "Tail logs from running 
Camel integrations", "sourceClass": 
"org.apache.camel.dsl.jbang.core.commands.action.CamelLogAction", "options": [ 
{ "names": "--find", "description": "Find and highlight matching text (ignore 
case).", "javaType": "java.lang.String", "type": "string" }, { "names": 
"--follow", "description": "Keep following and outputting new log lines (press 
enter to exit).", "defaultValue": "true", "javaType": "boolean", "typ [...]
     { "name": "nano", "fullName": "nano", "description": "Nano editor to edit 
file", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.Nano", 
"options": [ { "names": "-h,--help", "description": "Display the help and 
sub-commands", "javaType": "boolean", "type": "boolean" } ] },
-    { "name": "plugin", "fullName": "plugin", "description": "Manage plugins 
that add sub-commands to this CLI", "sourceClass": 
"org.apache.camel.dsl.jbang.core.commands.plugin.PluginCommand", "options": [ { 
"names": "-h,--help", "description": "Display the help and sub-commands", 
"javaType": "boolean", "type": "boolean" } ], "subcommands": [ { "name": "add", 
"fullName": "plugin add", "description": "Add new plugin", "sourceClass": 
"org.apache.camel.dsl.jbang.core.commands.plugin.PluginA [...]
+    { "name": "plugin", "fullName": "plugin", "description": "Manage plugins 
that add sub-commands to this CLI", "sourceClass": 
"org.apache.camel.dsl.jbang.core.commands.plugin.PluginCommand", "options": [ { 
"names": "-h,--help", "description": "Display the help and sub-commands", 
"javaType": "boolean", "type": "boolean" } ], "subcommands": [ { "name": "add", 
"fullName": "plugin add", "description": "Add new plugin", "sourceClass": 
"org.apache.camel.dsl.jbang.core.commands.plugin.PluginA [...]
     { "name": "ps", "fullName": "ps", "description": "List running Camel 
integrations", "sourceClass": 
"org.apache.camel.dsl.jbang.core.commands.process.ListProcess", "options": [ { 
"names": "--json", "description": "Output in JSON Format", "javaType": 
"boolean", "type": "boolean" }, { "names": "--pid", "description": "List only 
pid in the output", "javaType": "boolean", "type": "boolean" }, { "names": 
"--remote", "description": "Break down counters into remote\/total pairs", 
"javaType": [...]
     { "name": "run", "fullName": "run", "description": "Run as local Camel 
integration", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.Run", 
"options": [ { "names": "--background", "description": "Run in the background", 
"defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": 
"--background-wait", "description": "To wait for run in background to startup 
successfully, before returning", "defaultValue": "true", "javaType": "boolean", 
"type": "boolean" }, { [...]
     { "name": "sbom", "fullName": "sbom", "description": "Generate a CycloneDX 
or SPDX SBOM for a specific project", "sourceClass": 
"org.apache.camel.dsl.jbang.core.commands.SBOMGenerator", "options": [ { 
"names": "--build-property", "description": "Maven build properties, ex. 
--build-property=prop1=foo", "javaType": "java.util.List", "type": "array" }, { 
"names": "--camel-spring-boot-version", "description": "Camel version to use 
with Spring Boot", "javaType": "java.lang.String", "type" [...]
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/CamelJBangMain.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/CamelJBangMain.java
index 5d9035bcb121..52366e048c5d 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/CamelJBangMain.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/CamelJBangMain.java
@@ -48,6 +48,7 @@ import 
org.apache.camel.dsl.jbang.core.commands.plugin.PluginAdd;
 import org.apache.camel.dsl.jbang.core.commands.plugin.PluginCommand;
 import org.apache.camel.dsl.jbang.core.commands.plugin.PluginDelete;
 import org.apache.camel.dsl.jbang.core.commands.plugin.PluginGet;
+import org.apache.camel.dsl.jbang.core.commands.plugin.PluginList;
 import org.apache.camel.dsl.jbang.core.commands.process.*;
 import org.apache.camel.dsl.jbang.core.commands.update.UpdateCommand;
 import org.apache.camel.dsl.jbang.core.commands.update.UpdateList;
@@ -185,7 +186,8 @@ public class CamelJBangMain implements Callable<Integer> {
                 .addSubcommand("plugin", new CommandLine(new 
PluginCommand(this))
                         .addSubcommand("add", new CommandLine(new 
PluginAdd(this)))
                         .addSubcommand("delete", new CommandLine(new 
PluginDelete(this)))
-                        .addSubcommand("get", new CommandLine(new 
PluginGet(this))))
+                        .addSubcommand("get", new CommandLine(new 
PluginGet(this)))
+                        .addSubcommand("list", new CommandLine(new 
PluginList(this))))
                 .addSubcommand("ps", new CommandLine(new ListProcess(this)))
                 .addSubcommand("run", new CommandLine(new Run(this)))
                 .addSubcommand("sbom", new CommandLine(new 
SBOMGenerator(this)))
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/plugin/PluginGet.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/plugin/PluginGet.java
index 0395a5f5f720..0b6913f48f2f 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/plugin/PluginGet.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/plugin/PluginGet.java
@@ -31,10 +31,12 @@ import org.apache.camel.util.json.JsonObject;
 import picocli.CommandLine;
 
 @CommandLine.Command(name = "get",
-                     description = "Display available plugins", sortOptions = 
false, showDefaultValues = true)
+                     description = "Get installed plugins", sortOptions = 
false, showDefaultValues = true)
 public class PluginGet extends PluginBaseCommand {
 
-    @CommandLine.Option(names = { "--all" }, defaultValue = "false", 
description = "Display all available plugins")
+    @Deprecated
+    @CommandLine.Option(names = { "--all" }, hidden = true, defaultValue = 
"false",
+                        description = "DEPRECATED: use 'camel plugin list' 
instead")
     public boolean all;
 
     @CommandLine.Option(names = { "--repos" }, defaultValue = "false", 
description = "Display maven repository column")
@@ -46,6 +48,12 @@ public class PluginGet extends PluginBaseCommand {
 
     @Override
     public Integer doCall() throws Exception {
+        if (all) {
+            PluginList delegate = new PluginList(getMain());
+            delegate.repos = this.repos;
+            return delegate.doCall();
+        }
+
         List<Row> rows = new ArrayList<>();
 
         JsonObject plugins = loadConfig().getMap("plugins");
@@ -64,50 +72,11 @@ public class PluginGet extends PluginBaseCommand {
             rows.add(new Row(name, command, dependency, description, repos, 
vendor));
         });
 
-        printRows(rows);
-
-        if (all) {
-            rows.clear();
-            for (PluginType camelPlugin : PluginType.values()) {
-                if (plugins.get(camelPlugin.getName()) == null) {
-                    String dependency = 
"org.apache.camel:camel-jbang-plugin-%s".formatted(camelPlugin.getCommand());
-                    rows.add(new Row(
-                            camelPlugin.getName(), camelPlugin.getCommand(), 
dependency,
-                            camelPlugin.getDescription(), 
camelPlugin.getRepos(), camelPlugin.getVendor()));
-                }
-            }
-
-            if (!rows.isEmpty()) {
-                printer().println();
-                printer().println("Supported plugins:");
-                printer().println();
-
-                printRows(rows);
-            }
-
-            rows.clear();
-            List<JsonObject> knownPlugins = PluginHelper.loadKnownPlugins();
-            for (JsonObject kp : knownPlugins) {
-                String kpName = kp.getString("name");
-                if (plugins.get(kpName) == null && 
PluginType.findByName(kpName).isEmpty()) {
-                    String dep = kp.getString("groupId") != null && 
kp.getString("artifactId") != null
-                            ? "%s:%s".formatted(kp.getString("groupId"), 
kp.getString("artifactId"))
-                            : kp.getStringOrDefault("dependency", "");
-                    rows.add(new Row(
-                            kpName, kp.getString("command"), dep,
-                            kp.getString("description"), kp.getString("repos"),
-                            kp.getStringOrDefault("vendor", "Community")));
-                }
-            }
-
-            if (!rows.isEmpty()) {
-                printer().println();
-                printer().println("Known 3rd party plugins:");
-                printer().println();
-
-                printRows(rows);
-            }
+        if (!rows.isEmpty()) {
+            printer().println("Installed plugins:");
+            printer().println();
         }
+        printRows(rows);
 
         return 0;
     }
@@ -119,7 +88,7 @@ public class PluginGet extends PluginBaseCommand {
                 .orElse("");
     }
 
-    private void printRows(List<Row> rows) {
+    protected void printRows(List<Row> rows) {
         if (!rows.isEmpty()) {
             printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, 
Arrays.asList(
                     new 
Column().header("NAME").headerAlign(HorizontalAlign.LEFT).dataAlign(HorizontalAlign.LEFT)
@@ -134,11 +103,11 @@ public class PluginGet extends PluginBaseCommand {
                             .dataAlign(HorizontalAlign.LEFT)
                             .with(r -> r.repos),
                     new 
Column().header("DESCRIPTION").headerAlign(HorizontalAlign.LEFT).dataAlign(HorizontalAlign.LEFT)
-                            .maxWidth(50, OverflowBehaviour.ELLIPSIS_RIGHT)
+                            .maxWidth(80, OverflowBehaviour.ELLIPSIS_RIGHT)
                             .with(r -> r.description))));
         }
     }
 
-    private record Row(String name, String command, String dependency, String 
description, String repos, String vendor) {
+    record Row(String name, String command, String dependency, String 
description, String repos, String vendor) {
     }
 }
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/plugin/PluginList.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/plugin/PluginList.java
new file mode 100644
index 000000000000..bae4fe094f42
--- /dev/null
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/plugin/PluginList.java
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.dsl.jbang.core.commands.plugin;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain;
+import org.apache.camel.dsl.jbang.core.common.PluginHelper;
+import org.apache.camel.dsl.jbang.core.common.PluginType;
+import org.apache.camel.util.json.JsonObject;
+import picocli.CommandLine;
+
[email protected](name = "list",
+                     description = "List all available plugins", sortOptions = 
false, showDefaultValues = true)
+public class PluginList extends PluginGet {
+
+    public PluginList(CamelJBangMain main) {
+        super(main);
+    }
+
+    @Override
+    public Integer doCall() throws Exception {
+        super.doCall();
+
+        JsonObject plugins = loadConfig().getMap("plugins");
+
+        List<Row> rows = new ArrayList<>();
+        for (PluginType camelPlugin : PluginType.values()) {
+            if (plugins.get(camelPlugin.getName()) == null) {
+                String dependency = 
"org.apache.camel:camel-jbang-plugin-%s".formatted(camelPlugin.getCommand());
+                rows.add(new Row(
+                        camelPlugin.getName(), camelPlugin.getCommand(), 
dependency,
+                        camelPlugin.getDescription(), camelPlugin.getRepos(), 
camelPlugin.getVendor()));
+            }
+        }
+
+        if (!rows.isEmpty()) {
+            printer().println();
+            printer().println("Bundled plugins:");
+            printer().println();
+            printRows(rows);
+        }
+
+        rows.clear();
+        List<JsonObject> knownPlugins = PluginHelper.loadKnownPlugins();
+        for (JsonObject kp : knownPlugins) {
+            String kpName = kp.getString("name");
+            if (plugins.get(kpName) == null && 
PluginType.findByName(kpName).isEmpty()) {
+                String dep = kp.getString("groupId") != null && 
kp.getString("artifactId") != null
+                        ? "%s:%s".formatted(kp.getString("groupId"), 
kp.getString("artifactId"))
+                        : kp.getStringOrDefault("dependency", "");
+                rows.add(new Row(
+                        kpName, kp.getString("command"), dep,
+                        kp.getString("description"), kp.getString("repos"),
+                        kp.getStringOrDefault("vendor", "Community")));
+            }
+        }
+
+        if (!rows.isEmpty()) {
+            printer().println();
+            printer().println("Known 3rd party plugins:");
+            printer().println();
+            printRows(rows);
+        }
+
+        return 0;
+    }
+}
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/plugin/PluginGetTest.java
 
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/plugin/PluginGetTest.java
index ba950afb31bb..d3e6f3a3de4d 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/plugin/PluginGetTest.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/plugin/PluginGetTest.java
@@ -54,29 +54,12 @@ class PluginGetTest extends CamelCommandBaseTestSupport {
         command.doCall();
 
         List<String> output = printer.getLines();
-        Assertions.assertEquals(2, output.size());
+        Assertions.assertEquals(4, output.size());
+        Assertions.assertEquals("Installed plugins:", output.get(0));
         Assertions.assertEquals("NAME        COMMAND     VENDOR  DEPENDENCY    
                                  DESCRIPTION",
-                output.get(0));
-        Assertions.assertEquals(
-                "kubernetes  kubernetes  ASF     
org.apache.camel:camel-jbang-plugin-kubernetes  %s"
-                        .formatted(PluginType.KUBERNETES.getDescription()),
-                output.get(1));
-    }
-
-    @Test
-    public void shouldGetDefaultPlugins() throws Exception {
-        PluginGet command = new PluginGet(new 
CamelJBangMain().withPrinter(printer));
-        command.all = true;
-        command.doCall();
-
-        List<String> output = printer.getLines();
-        Assertions.assertTrue(output.size() >= 10);
-        Assertions.assertEquals("Supported plugins:", output.get(0));
-        Assertions.assertEquals(
-                "NAME          COMMAND       VENDOR  DEPENDENCY                
                        DESCRIPTION",
                 output.get(2));
         Assertions.assertEquals(
-                "kubernetes    kubernetes    ASF     
org.apache.camel:camel-jbang-plugin-kubernetes    %s"
+                "kubernetes  kubernetes  ASF     
org.apache.camel:camel-jbang-plugin-kubernetes  %s"
                         .formatted(PluginType.KUBERNETES.getDescription()),
                 output.get(3));
     }
@@ -97,71 +80,12 @@ class PluginGetTest extends CamelCommandBaseTestSupport {
         command.doCall();
 
         List<String> output = printer.getLines();
-        Assertions.assertEquals(2, output.size());
-        Assertions.assertEquals("NAME  COMMAND  VENDOR  DEPENDENCY             
                  DESCRIPTION", output.get(0));
+        Assertions.assertEquals(4, output.size());
+        Assertions.assertEquals("Installed plugins:", output.get(0));
+        Assertions.assertEquals("NAME  COMMAND  VENDOR  DEPENDENCY             
                  DESCRIPTION", output.get(2));
         Assertions.assertEquals(
                 "foo   foo              
org.apache.camel:camel-jbang-plugin-foo  Plugin foo called with command foo",
-                output.get(1));
-    }
-
-    @Test
-    public void shouldGetAllPlugins() throws Exception {
-        JsonObject pluginConfig = PluginHelper.getOrCreatePluginConfig();
-        JsonObject plugins = pluginConfig.getMap("plugins");
-
-        JsonObject fooPlugin = new JsonObject();
-        fooPlugin.put("name", "foo-plugin");
-        fooPlugin.put("command", "foo");
-        fooPlugin.put("dependency", "org.apache.camel:foo-plugin:1.0.0");
-        plugins.put("foo-plugin", fooPlugin);
-
-        PluginHelper.savePluginConfig(pluginConfig);
-
-        PluginGet command = new PluginGet(new 
CamelJBangMain().withPrinter(printer));
-        command.all = true;
-        command.doCall();
-
-        List<String> output = printer.getLines();
-        Assertions.assertTrue(output.size() >= 13);
-        Assertions.assertEquals("NAME        COMMAND  VENDOR  DEPENDENCY       
                  DESCRIPTION", output.get(0));
-        Assertions.assertEquals(
-                "foo-plugin  foo              
org.apache.camel:foo-plugin:1.0.0  Plugin foo-plugin called with command foo",
-                output.get(1));
-
-        Assertions.assertEquals("Supported plugins:", output.get(3));
-        Assertions.assertEquals(
-                "NAME          COMMAND       VENDOR  DEPENDENCY                
                        DESCRIPTION",
-                output.get(5));
-        Assertions.assertEquals(
-                "kubernetes    kubernetes    ASF     
org.apache.camel:camel-jbang-plugin-kubernetes    %s"
-                        .formatted(PluginType.KUBERNETES.getDescription()),
-                output.get(6));
-        Assertions.assertEquals(
-                "generate      generate      ASF     
org.apache.camel:camel-jbang-plugin-generate      %s"
-                        .formatted(PluginType.GENERATE.getDescription()),
-                output.get(7));
-        Assertions.assertEquals(
-                "edit          edit          ASF     
org.apache.camel:camel-jbang-plugin-edit          %s"
-                        .formatted(PluginType.EDIT.getDescription()),
-                output.get(8));
-        Assertions.assertEquals(
-                "test          test          ASF     
org.apache.camel:camel-jbang-plugin-test          %s"
-                        .formatted(PluginType.TEST.getDescription()),
-                output.get(9));
-        Assertions.assertEquals(
-                "route-parser  route-parser  ASF     
org.apache.camel:camel-jbang-plugin-route-parser  %s"
-                        .formatted(PluginType.ROUTE_PARSER.getDescription()),
-                output.get(10));
-        Assertions.assertEquals(
-                "validate      validate      ASF     
org.apache.camel:camel-jbang-plugin-validate      %s"
-                        .formatted(PluginType.VALIDATE.getDescription()),
-                output.get(11));
-        Assertions.assertEquals(
-                "tui           tui           ASF     
org.apache.camel:camel-jbang-plugin-tui           %s"
-                        .formatted(PluginType.TUI.getDescription()),
-                output.get(12));
-
-        Assertions.assertEquals("Known 3rd party plugins:", output.get(14));
+                output.get(3));
     }
 
 }
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/plugin/PluginListTest.java
 
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/plugin/PluginListTest.java
new file mode 100644
index 000000000000..88c5d342a0cf
--- /dev/null
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/plugin/PluginListTest.java
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.dsl.jbang.core.commands.plugin;
+
+import java.util.List;
+
+import org.apache.camel.dsl.jbang.core.commands.CamelCommandBaseTestSupport;
+import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain;
+import org.apache.camel.dsl.jbang.core.common.CommandLineHelper;
+import org.apache.camel.dsl.jbang.core.common.PluginHelper;
+import org.apache.camel.dsl.jbang.core.common.PluginType;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+class PluginListTest extends CamelCommandBaseTestSupport {
+
+    @BeforeEach
+    public void setup() throws Exception {
+        super.setup();
+
+        CommandLineHelper.useHomeDir("target");
+        PluginHelper.createPluginConfig();
+    }
+
+    @Test
+    public void shouldListDefaultPlugins() throws Exception {
+        PluginList command = new PluginList(new 
CamelJBangMain().withPrinter(printer));
+        command.doCall();
+
+        List<String> output = printer.getLines();
+        Assertions.assertTrue(output.size() > 2);
+        Assertions.assertEquals("Bundled plugins:", output.get(0));
+    }
+
+    @Test
+    public void shouldListAllPlugins() throws Exception {
+        PluginHelper.enable(PluginType.KUBERNETES);
+
+        PluginList command = new PluginList(new 
CamelJBangMain().withPrinter(printer));
+        command.doCall();
+
+        List<String> output = printer.getLines();
+        Assertions.assertTrue(output.size() > 2);
+        Assertions.assertEquals("Installed plugins:", output.get(0));
+
+        boolean hasBundled = output.stream().anyMatch(l -> l.equals("Bundled 
plugins:"));
+        Assertions.assertTrue(hasBundled);
+    }
+
+}

Reply via email to