using System; using StellaOps.Concelier.Models; using Xunit; using StellaOps.TestKit; namespace StellaOps.Concelier.Models.Tests; public sealed class AffectedVersionRangeExtensionsTests { [Trait("Category", TestCategories.Unit)] [Fact] public void ToNormalizedVersionRule_UsesNevraPrimitivesWhenAvailable() { var range = new AffectedVersionRange( rangeKind: "nevra", introducedVersion: "raw-introduced", fixedVersion: "raw-fixed", lastAffectedVersion: null, rangeExpression: null, provenance: AdvisoryProvenance.Empty, primitives: new RangePrimitives( SemVer: null, Nevra: new NevraPrimitive( new NevraComponent("pkg", 0, "1.0.0", "1", "x86_64"), new NevraComponent("pkg", 0, "1.2.0", "2", "x86_64"), null), Evr: null, VendorExtensions: null)); var rule = range.ToNormalizedVersionRule(); Assert.NotNull(rule); Assert.Equal(NormalizedVersionSchemes.Nevra, rule!.Scheme); Assert.Equal("pkg-1.0.0-1.x86_64", rule.Min); Assert.Equal("pkg-1.2.0-2.x86_64", rule.Max); } [Trait("Category", TestCategories.Unit)] [Fact] public void ToNormalizedVersionRule_FallsBackForEvrWhenPrimitivesMissing() { var range = new AffectedVersionRange( rangeKind: "EVR", introducedVersion: "1:1.0.0-1", fixedVersion: "1:1.2.0-1ubuntu2", lastAffectedVersion: null, rangeExpression: null, provenance: new AdvisoryProvenance("debian", "range", "pkg", DateTimeOffset.UtcNow), primitives: null); var rule = range.ToNormalizedVersionRule("fallback"); Assert.NotNull(rule); Assert.Equal(NormalizedVersionSchemes.Evr, rule!.Scheme); Assert.Equal(NormalizedVersionRuleTypes.Range, rule.Type); Assert.Equal("1:1.0.0-1", rule.Min); Assert.Equal("1:1.2.0-1ubuntu2", rule.Max); Assert.Equal("fallback", rule.Notes); } [Trait("Category", TestCategories.Unit)] [Fact] public void ToNormalizedVersionRule_ReturnsNullForUnknownKind() { var range = new AffectedVersionRange( rangeKind: "vendor", introducedVersion: null, fixedVersion: null, lastAffectedVersion: null, rangeExpression: null, provenance: AdvisoryProvenance.Empty, primitives: null); var rule = range.ToNormalizedVersionRule(); Assert.Null(rule); } [Trait("Category", TestCategories.Unit)] [Fact] public void ToNormalizedVersionRule_FallsBackForApkRange() { var range = new AffectedVersionRange( rangeKind: "apk", introducedVersion: null, fixedVersion: "3.1.4-r0", lastAffectedVersion: null, rangeExpression: "fixed:3.1.4-r0", provenance: AdvisoryProvenance.Empty, primitives: null); var rule = range.ToNormalizedVersionRule("alpine:v3.20/main"); Assert.NotNull(rule); Assert.Equal(NormalizedVersionSchemes.Apk, rule!.Scheme); Assert.Equal(NormalizedVersionRuleTypes.LessThan, rule.Type); Assert.Equal("3.1.4-r0", rule.Max); Assert.False(rule.MaxInclusive); Assert.Equal("alpine:v3.20/main", rule.Notes); } }