up
Some checks failed
Docs CI / lint-and-preview (push) Has been cancelled
AOC Guard CI / aoc-guard (push) Has been cancelled
AOC Guard CI / aoc-verify (push) Has been cancelled
Concelier Attestation Tests / attestation-tests (push) Has been cancelled
Export Center CI / export-ci (push) Has been cancelled
Notify Smoke Test / Notify Unit Tests (push) Has been cancelled
Notify Smoke Test / Notifier Service Tests (push) Has been cancelled
Notify Smoke Test / Notification Smoke Test (push) Has been cancelled
Policy Lint & Smoke / policy-lint (push) Has been cancelled
Scanner Analyzers / Discover Analyzers (push) Has been cancelled
Scanner Analyzers / Build Analyzers (push) Has been cancelled
Scanner Analyzers / Test Language Analyzers (push) Has been cancelled
Scanner Analyzers / Validate Test Fixtures (push) Has been cancelled
Scanner Analyzers / Verify Deterministic Output (push) Has been cancelled
Signals CI & Image / signals-ci (push) Has been cancelled
Signals Reachability Scoring & Events / reachability-smoke (push) Has been cancelled
Signals Reachability Scoring & Events / sign-and-upload (push) Has been cancelled
Some checks failed
Docs CI / lint-and-preview (push) Has been cancelled
AOC Guard CI / aoc-guard (push) Has been cancelled
AOC Guard CI / aoc-verify (push) Has been cancelled
Concelier Attestation Tests / attestation-tests (push) Has been cancelled
Export Center CI / export-ci (push) Has been cancelled
Notify Smoke Test / Notify Unit Tests (push) Has been cancelled
Notify Smoke Test / Notifier Service Tests (push) Has been cancelled
Notify Smoke Test / Notification Smoke Test (push) Has been cancelled
Policy Lint & Smoke / policy-lint (push) Has been cancelled
Scanner Analyzers / Discover Analyzers (push) Has been cancelled
Scanner Analyzers / Build Analyzers (push) Has been cancelled
Scanner Analyzers / Test Language Analyzers (push) Has been cancelled
Scanner Analyzers / Validate Test Fixtures (push) Has been cancelled
Scanner Analyzers / Verify Deterministic Output (push) Has been cancelled
Signals CI & Image / signals-ci (push) Has been cancelled
Signals Reachability Scoring & Events / reachability-smoke (push) Has been cancelled
Signals Reachability Scoring & Events / sign-and-upload (push) Has been cancelled
This commit is contained in:
@@ -1,189 +1,189 @@
|
||||
using StellaOps.Concelier.Models;
|
||||
using Xunit;
|
||||
|
||||
namespace StellaOps.Concelier.Models.Tests;
|
||||
|
||||
public sealed class SemVerPrimitiveTests
|
||||
{
|
||||
[Theory]
|
||||
[InlineData("1.0.0", true, "2.0.0", false, null, false, null, null, SemVerPrimitiveStyles.Range)]
|
||||
[InlineData("1.0.0", true, null, false, null, false, null, null, SemVerPrimitiveStyles.GreaterThanOrEqual)]
|
||||
[InlineData("1.0.0", false, null, false, null, false, null, null, SemVerPrimitiveStyles.GreaterThan)]
|
||||
[InlineData(null, true, "2.0.0", false, null, false, null, null, SemVerPrimitiveStyles.LessThan)]
|
||||
[InlineData(null, true, "2.0.0", true, null, false, null, null, SemVerPrimitiveStyles.LessThanOrEqual)]
|
||||
[InlineData(null, true, null, false, "2.0.0", true, null, null, SemVerPrimitiveStyles.LessThanOrEqual)]
|
||||
[InlineData(null, true, null, false, "2.0.0", false, null, null, SemVerPrimitiveStyles.LessThan)]
|
||||
[InlineData(null, true, null, false, null, false, null, "1.5.0", SemVerPrimitiveStyles.Exact)]
|
||||
public void StyleReflectsSemantics(
|
||||
string? introduced,
|
||||
bool introducedInclusive,
|
||||
string? fixedVersion,
|
||||
bool fixedInclusive,
|
||||
string? lastAffected,
|
||||
bool lastAffectedInclusive,
|
||||
string? constraintExpression,
|
||||
string? exactValue,
|
||||
string expectedStyle)
|
||||
{
|
||||
var primitive = new SemVerPrimitive(
|
||||
introduced,
|
||||
introducedInclusive,
|
||||
fixedVersion,
|
||||
fixedInclusive,
|
||||
lastAffected,
|
||||
lastAffectedInclusive,
|
||||
constraintExpression,
|
||||
exactValue);
|
||||
|
||||
Assert.Equal(expectedStyle, primitive.Style);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EqualityIncludesExactValue()
|
||||
{
|
||||
var baseline = new SemVerPrimitive(
|
||||
Introduced: null,
|
||||
IntroducedInclusive: true,
|
||||
Fixed: null,
|
||||
FixedInclusive: false,
|
||||
LastAffected: null,
|
||||
LastAffectedInclusive: false,
|
||||
ConstraintExpression: null);
|
||||
|
||||
var variant = baseline with { ExactValue = "1.2.3" };
|
||||
|
||||
Assert.NotEqual(baseline, variant);
|
||||
Assert.Equal(SemVerPrimitiveStyles.Exact, variant.Style);
|
||||
Assert.Equal(SemVerPrimitiveStyles.Range, baseline.Style);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ToNormalizedVersionRule_MapsRangeBounds()
|
||||
{
|
||||
var primitive = new SemVerPrimitive(
|
||||
Introduced: "1.0.0",
|
||||
IntroducedInclusive: true,
|
||||
Fixed: "2.0.0",
|
||||
FixedInclusive: false,
|
||||
LastAffected: null,
|
||||
LastAffectedInclusive: false,
|
||||
ConstraintExpression: ">=1.0.0 <2.0.0");
|
||||
|
||||
var rule = primitive.ToNormalizedVersionRule();
|
||||
|
||||
Assert.NotNull(rule);
|
||||
Assert.Equal(NormalizedVersionSchemes.SemVer, rule!.Scheme);
|
||||
Assert.Equal(NormalizedVersionRuleTypes.Range, rule.Type);
|
||||
Assert.Equal("1.0.0", rule.Min);
|
||||
Assert.True(rule.MinInclusive);
|
||||
Assert.Equal("2.0.0", rule.Max);
|
||||
Assert.False(rule.MaxInclusive);
|
||||
Assert.Null(rule.Value);
|
||||
Assert.Equal(">=1.0.0 <2.0.0", rule.Notes);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ToNormalizedVersionRule_ExactUsesExactValue()
|
||||
{
|
||||
var primitive = new SemVerPrimitive(
|
||||
Introduced: null,
|
||||
IntroducedInclusive: true,
|
||||
Fixed: null,
|
||||
FixedInclusive: false,
|
||||
LastAffected: null,
|
||||
LastAffectedInclusive: false,
|
||||
ConstraintExpression: null,
|
||||
ExactValue: "3.1.4");
|
||||
|
||||
var rule = primitive.ToNormalizedVersionRule("from-ghsa");
|
||||
|
||||
Assert.NotNull(rule);
|
||||
Assert.Equal(NormalizedVersionSchemes.SemVer, rule!.Scheme);
|
||||
Assert.Equal(NormalizedVersionRuleTypes.Exact, rule.Type);
|
||||
Assert.Null(rule.Min);
|
||||
Assert.Null(rule.Max);
|
||||
Assert.Equal("3.1.4", rule.Value);
|
||||
Assert.Equal("from-ghsa", rule.Notes);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ToNormalizedVersionRule_GreaterThanMapsMinimum()
|
||||
{
|
||||
var primitive = new SemVerPrimitive(
|
||||
Introduced: "1.5.0",
|
||||
IntroducedInclusive: false,
|
||||
Fixed: null,
|
||||
FixedInclusive: false,
|
||||
LastAffected: null,
|
||||
LastAffectedInclusive: false,
|
||||
ConstraintExpression: null);
|
||||
|
||||
var rule = primitive.ToNormalizedVersionRule();
|
||||
|
||||
Assert.NotNull(rule);
|
||||
Assert.Equal(NormalizedVersionSchemes.SemVer, rule!.Scheme);
|
||||
Assert.Equal(NormalizedVersionRuleTypes.GreaterThan, rule.Type);
|
||||
Assert.Equal("1.5.0", rule.Min);
|
||||
Assert.False(rule.MinInclusive);
|
||||
Assert.Null(rule.Max);
|
||||
Assert.Null(rule.Value);
|
||||
Assert.Null(rule.Notes);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ToNormalizedVersionRule_UsesConstraintExpressionAsFallbackNotes()
|
||||
{
|
||||
var primitive = new SemVerPrimitive(
|
||||
Introduced: "1.4.0",
|
||||
IntroducedInclusive: false,
|
||||
Fixed: null,
|
||||
FixedInclusive: false,
|
||||
LastAffected: null,
|
||||
LastAffectedInclusive: false,
|
||||
ConstraintExpression: "> 1.4.0");
|
||||
|
||||
var rule = primitive.ToNormalizedVersionRule();
|
||||
|
||||
Assert.NotNull(rule);
|
||||
Assert.Equal("> 1.4.0", rule!.Notes);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ToNormalizedVersionRule_ExactCarriesConstraintExpressionWhenNotesMissing()
|
||||
{
|
||||
var primitive = new SemVerPrimitive(
|
||||
Introduced: null,
|
||||
IntroducedInclusive: true,
|
||||
Fixed: null,
|
||||
FixedInclusive: false,
|
||||
LastAffected: null,
|
||||
LastAffectedInclusive: false,
|
||||
ConstraintExpression: "= 3.2.1",
|
||||
ExactValue: "3.2.1");
|
||||
|
||||
var rule = primitive.ToNormalizedVersionRule();
|
||||
|
||||
Assert.NotNull(rule);
|
||||
Assert.Equal(NormalizedVersionRuleTypes.Exact, rule!.Type);
|
||||
Assert.Equal("3.2.1", rule.Value);
|
||||
Assert.Equal("= 3.2.1", rule.Notes);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ToNormalizedVersionRule_ExplicitNotesOverrideConstraintExpression()
|
||||
{
|
||||
var primitive = new SemVerPrimitive(
|
||||
Introduced: "1.0.0",
|
||||
IntroducedInclusive: true,
|
||||
Fixed: "1.1.0",
|
||||
FixedInclusive: false,
|
||||
LastAffected: null,
|
||||
LastAffectedInclusive: false,
|
||||
ConstraintExpression: ">=1.0.0 <1.1.0");
|
||||
|
||||
var rule = primitive.ToNormalizedVersionRule("ghsa:range");
|
||||
|
||||
Assert.NotNull(rule);
|
||||
Assert.Equal("ghsa:range", rule!.Notes);
|
||||
}
|
||||
}
|
||||
using StellaOps.Concelier.Models;
|
||||
using Xunit;
|
||||
|
||||
namespace StellaOps.Concelier.Models.Tests;
|
||||
|
||||
public sealed class SemVerPrimitiveTests
|
||||
{
|
||||
[Theory]
|
||||
[InlineData("1.0.0", true, "2.0.0", false, null, false, null, null, SemVerPrimitiveStyles.Range)]
|
||||
[InlineData("1.0.0", true, null, false, null, false, null, null, SemVerPrimitiveStyles.GreaterThanOrEqual)]
|
||||
[InlineData("1.0.0", false, null, false, null, false, null, null, SemVerPrimitiveStyles.GreaterThan)]
|
||||
[InlineData(null, true, "2.0.0", false, null, false, null, null, SemVerPrimitiveStyles.LessThan)]
|
||||
[InlineData(null, true, "2.0.0", true, null, false, null, null, SemVerPrimitiveStyles.LessThanOrEqual)]
|
||||
[InlineData(null, true, null, false, "2.0.0", true, null, null, SemVerPrimitiveStyles.LessThanOrEqual)]
|
||||
[InlineData(null, true, null, false, "2.0.0", false, null, null, SemVerPrimitiveStyles.LessThan)]
|
||||
[InlineData(null, true, null, false, null, false, null, "1.5.0", SemVerPrimitiveStyles.Exact)]
|
||||
public void StyleReflectsSemantics(
|
||||
string? introduced,
|
||||
bool introducedInclusive,
|
||||
string? fixedVersion,
|
||||
bool fixedInclusive,
|
||||
string? lastAffected,
|
||||
bool lastAffectedInclusive,
|
||||
string? constraintExpression,
|
||||
string? exactValue,
|
||||
string expectedStyle)
|
||||
{
|
||||
var primitive = new SemVerPrimitive(
|
||||
introduced,
|
||||
introducedInclusive,
|
||||
fixedVersion,
|
||||
fixedInclusive,
|
||||
lastAffected,
|
||||
lastAffectedInclusive,
|
||||
constraintExpression,
|
||||
exactValue);
|
||||
|
||||
Assert.Equal(expectedStyle, primitive.Style);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EqualityIncludesExactValue()
|
||||
{
|
||||
var baseline = new SemVerPrimitive(
|
||||
Introduced: null,
|
||||
IntroducedInclusive: true,
|
||||
Fixed: null,
|
||||
FixedInclusive: false,
|
||||
LastAffected: null,
|
||||
LastAffectedInclusive: false,
|
||||
ConstraintExpression: null);
|
||||
|
||||
var variant = baseline with { ExactValue = "1.2.3" };
|
||||
|
||||
Assert.NotEqual(baseline, variant);
|
||||
Assert.Equal(SemVerPrimitiveStyles.Exact, variant.Style);
|
||||
Assert.Equal(SemVerPrimitiveStyles.Range, baseline.Style);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ToNormalizedVersionRule_MapsRangeBounds()
|
||||
{
|
||||
var primitive = new SemVerPrimitive(
|
||||
Introduced: "1.0.0",
|
||||
IntroducedInclusive: true,
|
||||
Fixed: "2.0.0",
|
||||
FixedInclusive: false,
|
||||
LastAffected: null,
|
||||
LastAffectedInclusive: false,
|
||||
ConstraintExpression: ">=1.0.0 <2.0.0");
|
||||
|
||||
var rule = primitive.ToNormalizedVersionRule();
|
||||
|
||||
Assert.NotNull(rule);
|
||||
Assert.Equal(NormalizedVersionSchemes.SemVer, rule!.Scheme);
|
||||
Assert.Equal(NormalizedVersionRuleTypes.Range, rule.Type);
|
||||
Assert.Equal("1.0.0", rule.Min);
|
||||
Assert.True(rule.MinInclusive);
|
||||
Assert.Equal("2.0.0", rule.Max);
|
||||
Assert.False(rule.MaxInclusive);
|
||||
Assert.Null(rule.Value);
|
||||
Assert.Equal(">=1.0.0 <2.0.0", rule.Notes);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ToNormalizedVersionRule_ExactUsesExactValue()
|
||||
{
|
||||
var primitive = new SemVerPrimitive(
|
||||
Introduced: null,
|
||||
IntroducedInclusive: true,
|
||||
Fixed: null,
|
||||
FixedInclusive: false,
|
||||
LastAffected: null,
|
||||
LastAffectedInclusive: false,
|
||||
ConstraintExpression: null,
|
||||
ExactValue: "3.1.4");
|
||||
|
||||
var rule = primitive.ToNormalizedVersionRule("from-ghsa");
|
||||
|
||||
Assert.NotNull(rule);
|
||||
Assert.Equal(NormalizedVersionSchemes.SemVer, rule!.Scheme);
|
||||
Assert.Equal(NormalizedVersionRuleTypes.Exact, rule.Type);
|
||||
Assert.Null(rule.Min);
|
||||
Assert.Null(rule.Max);
|
||||
Assert.Equal("3.1.4", rule.Value);
|
||||
Assert.Equal("from-ghsa", rule.Notes);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ToNormalizedVersionRule_GreaterThanMapsMinimum()
|
||||
{
|
||||
var primitive = new SemVerPrimitive(
|
||||
Introduced: "1.5.0",
|
||||
IntroducedInclusive: false,
|
||||
Fixed: null,
|
||||
FixedInclusive: false,
|
||||
LastAffected: null,
|
||||
LastAffectedInclusive: false,
|
||||
ConstraintExpression: null);
|
||||
|
||||
var rule = primitive.ToNormalizedVersionRule();
|
||||
|
||||
Assert.NotNull(rule);
|
||||
Assert.Equal(NormalizedVersionSchemes.SemVer, rule!.Scheme);
|
||||
Assert.Equal(NormalizedVersionRuleTypes.GreaterThan, rule.Type);
|
||||
Assert.Equal("1.5.0", rule.Min);
|
||||
Assert.False(rule.MinInclusive);
|
||||
Assert.Null(rule.Max);
|
||||
Assert.Null(rule.Value);
|
||||
Assert.Null(rule.Notes);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ToNormalizedVersionRule_UsesConstraintExpressionAsFallbackNotes()
|
||||
{
|
||||
var primitive = new SemVerPrimitive(
|
||||
Introduced: "1.4.0",
|
||||
IntroducedInclusive: false,
|
||||
Fixed: null,
|
||||
FixedInclusive: false,
|
||||
LastAffected: null,
|
||||
LastAffectedInclusive: false,
|
||||
ConstraintExpression: "> 1.4.0");
|
||||
|
||||
var rule = primitive.ToNormalizedVersionRule();
|
||||
|
||||
Assert.NotNull(rule);
|
||||
Assert.Equal("> 1.4.0", rule!.Notes);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ToNormalizedVersionRule_ExactCarriesConstraintExpressionWhenNotesMissing()
|
||||
{
|
||||
var primitive = new SemVerPrimitive(
|
||||
Introduced: null,
|
||||
IntroducedInclusive: true,
|
||||
Fixed: null,
|
||||
FixedInclusive: false,
|
||||
LastAffected: null,
|
||||
LastAffectedInclusive: false,
|
||||
ConstraintExpression: "= 3.2.1",
|
||||
ExactValue: "3.2.1");
|
||||
|
||||
var rule = primitive.ToNormalizedVersionRule();
|
||||
|
||||
Assert.NotNull(rule);
|
||||
Assert.Equal(NormalizedVersionRuleTypes.Exact, rule!.Type);
|
||||
Assert.Equal("3.2.1", rule.Value);
|
||||
Assert.Equal("= 3.2.1", rule.Notes);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ToNormalizedVersionRule_ExplicitNotesOverrideConstraintExpression()
|
||||
{
|
||||
var primitive = new SemVerPrimitive(
|
||||
Introduced: "1.0.0",
|
||||
IntroducedInclusive: true,
|
||||
Fixed: "1.1.0",
|
||||
FixedInclusive: false,
|
||||
LastAffected: null,
|
||||
LastAffectedInclusive: false,
|
||||
ConstraintExpression: ">=1.0.0 <1.1.0");
|
||||
|
||||
var rule = primitive.ToNormalizedVersionRule("ghsa:range");
|
||||
|
||||
Assert.NotNull(rule);
|
||||
Assert.Equal("ghsa:range", rule!.Notes);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user