using System; using System.CommandLine; using System.IO; using System.Threading; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; using StellaOps.Cli.Configuration; using StellaOps.Cli.Plugins; using Xunit; namespace StellaOps.Cli.Tests.Plugins; public sealed class CliCommandModuleLoaderTests { [Fact] public void RegisterModules_LoadsNonCoreCommandsFromPlugin() { var options = new StellaOpsCliOptions(); var repoRoot = Path.GetFullPath( Path.Combine(AppContext.BaseDirectory, "..", "..", "..", "..", "..")); options.Plugins.BaseDirectory = repoRoot; options.Plugins.Directory = "plugins/cli"; options.Plugins.ManifestSearchPattern = "manifest.json"; var services = new ServiceCollection() .AddSingleton(options) .BuildServiceProvider(); var logger = NullLoggerFactory.Instance.CreateLogger(); var loader = new CliCommandModuleLoader(services, options, logger); var root = new RootCommand(); var verbose = new Option("--verbose"); loader.RegisterModules(root, verbose, CancellationToken.None); Assert.Contains(root.Children, command => string.Equals(command.Name, "excititor", StringComparison.Ordinal)); Assert.Contains(root.Children, command => string.Equals(command.Name, "runtime", StringComparison.Ordinal)); Assert.Contains(root.Children, command => string.Equals(command.Name, "offline", StringComparison.Ordinal)); } }