56 lines
1.9 KiB
C#
56 lines
1.9 KiB
C#
using StellaOps.Scheduler.Models;
|
|
|
|
namespace StellaOps.Scheduler.Models.Tests;
|
|
|
|
public sealed class ImpactSetTests
|
|
{
|
|
[Fact]
|
|
public void ImpactSetSortsImagesByDigest()
|
|
{
|
|
var selector = new Selector(SelectorScope.AllImages, tenantId: "tenant-alpha");
|
|
var images = new[]
|
|
{
|
|
new ImpactImage(
|
|
imageDigest: "sha256:bbbb",
|
|
registry: "registry.internal",
|
|
repository: "app/api",
|
|
namespaces: new[] { "team-a" },
|
|
tags: new[] { "prod", "latest" },
|
|
usedByEntrypoint: true,
|
|
labels: new Dictionary<string, string>
|
|
{
|
|
["env"] = "prod",
|
|
}),
|
|
new ImpactImage(
|
|
imageDigest: "sha256:aaaa",
|
|
registry: "registry.internal",
|
|
repository: "app/api",
|
|
namespaces: new[] { "team-a" },
|
|
tags: new[] { "prod" },
|
|
usedByEntrypoint: false),
|
|
};
|
|
|
|
var impactSet = new ImpactSet(
|
|
selector,
|
|
images,
|
|
usageOnly: true,
|
|
generatedAt: DateTimeOffset.Parse("2025-10-18T05:04:03Z"),
|
|
total: 2,
|
|
snapshotId: "snap-001");
|
|
|
|
Assert.Equal(SchedulerSchemaVersions.ImpactSet, impactSet.SchemaVersion);
|
|
Assert.Equal(new[] { "sha256:aaaa", "sha256:bbbb" }, impactSet.Images.Select(i => i.ImageDigest));
|
|
Assert.True(impactSet.UsageOnly);
|
|
Assert.Equal(2, impactSet.Total);
|
|
|
|
var json = CanonicalJsonSerializer.Serialize(impactSet);
|
|
Assert.Contains("\"snapshotId\":\"snap-001\"", json, StringComparison.Ordinal);
|
|
}
|
|
|
|
[Fact]
|
|
public void ImpactImageRejectsInvalidDigest()
|
|
{
|
|
Assert.Throws<ArgumentException>(() => new ImpactImage("sha1:not-supported", "registry", "repo"));
|
|
}
|
|
}
|