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); + } + +}
