using System.Linq; using Xunit; using StellaOps.Scanner.Analyzers.Lang.Deno.Internal; using StellaOps.Scanner.Analyzers.Lang.Deno.Tests.TestFixtures; using StellaOps.Scanner.Analyzers.Lang.Deno.Tests.TestUtilities; namespace StellaOps.Scanner.Analyzers.Lang.Deno.Tests.Containers; public sealed class ContainerAdapterTests { [Fact] public async Task CollectInputsIncludesCacheVendorAndBundlesAsync() { var (root, envDir) = DenoWorkspaceTestFixture.Create(); try { Environment.SetEnvironmentVariable("DENO_DIR", envDir); var context = new LanguageAnalyzerContext(root, TimeProvider.System); var workspace = await DenoWorkspaceNormalizer.NormalizeAsync(context, TestContext.Current.CancellationToken); var bundleScan = DenoBundleScanner.Scan(root, TestContext.Current.CancellationToken); var observations = DenoBundleScanner.ToObservations(bundleScan); var inputs = DenoContainerAdapter.CollectInputs(workspace, observations); Assert.NotEmpty(inputs); var cacheInputs = inputs.Where(input => input.Kind == DenoContainerSourceKind.Cache).ToArray(); Assert.Equal(3, cacheInputs.Length); Assert.All(cacheInputs, cache => Assert.True(cache.Metadata.ContainsKey("path"))); var vendorInputs = inputs.Where(input => input.Kind == DenoContainerSourceKind.Vendor).ToArray(); Assert.Equal(2, vendorInputs.Length); Assert.Contains(vendorInputs, vendor => vendor.Metadata.TryGetValue("alias", out var alias) && alias?.Contains("vendor", StringComparison.OrdinalIgnoreCase) == true); var bundleInputs = inputs.Where(input => input.Kind == DenoContainerSourceKind.Bundle).ToArray(); Assert.Equal(2, bundleInputs.Length); Assert.Contains(bundleInputs, bundle => string.Equals(bundle.Bundle?.BundleType, "eszip", StringComparison.OrdinalIgnoreCase)); Assert.Contains(bundleInputs, bundle => string.Equals(bundle.Bundle?.BundleType, "deno-compile", StringComparison.OrdinalIgnoreCase)); Assert.All(bundleInputs, bundle => { Assert.True(bundle.Metadata.ContainsKey("entrypoint")); Assert.True(bundle.Metadata.ContainsKey("moduleCount")); }); } finally { Environment.SetEnvironmentVariable("DENO_DIR", null); TestPaths.SafeDelete(root); } } }