58 lines
1.8 KiB
C#
58 lines
1.8 KiB
C#
using FluentAssertions;
|
|
using MongoDB.Bson.Serialization;
|
|
using StellaOps.Replay.Core;
|
|
using Xunit;
|
|
|
|
namespace StellaOps.Replay.Core.Tests;
|
|
|
|
public sealed class ReplayMongoModelsTests
|
|
{
|
|
[Fact]
|
|
public void ReplayRunRecord_SerializesWithExpectedFields()
|
|
{
|
|
var record = new ReplayRunRecord
|
|
{
|
|
Id = "scan-1",
|
|
ManifestHash = "sha256:abc",
|
|
Status = "verified",
|
|
Outputs = new ReplayRunOutputs { Sbom = "sha256:sbom", Findings = "sha256:findings", Vex = "sha256:vex" },
|
|
Signatures = new() { new ReplaySignatureRecord { Profile = "FIPS", Verified = true } }
|
|
};
|
|
|
|
var bson = record.ToBsonDocument();
|
|
|
|
bson.Should().ContainKey("_id");
|
|
bson["manifestHash"].AsString.Should().Be("sha256:abc");
|
|
bson["status"].AsString.Should().Be("verified");
|
|
bson["outputs"].AsBsonDocument["sbom"].AsString.Should().Be("sha256:sbom");
|
|
bson["signatures"].AsBsonArray.Should().HaveCount(1);
|
|
}
|
|
|
|
[Fact]
|
|
public void ReplayBundleRecord_UsesIdAsDigest()
|
|
{
|
|
var record = new ReplayBundleRecord { Id = "abc", Type = "input", Size = 10, Location = "cas://replay/ab/abc.tar.zst" };
|
|
|
|
var bson = record.ToBsonDocument();
|
|
bson["_id"].AsString.Should().Be("abc");
|
|
bson["type"].AsString.Should().Be("input");
|
|
}
|
|
|
|
[Fact]
|
|
public void ReplaySubjectRecord_StoresLayers()
|
|
{
|
|
var record = new ReplaySubjectRecord
|
|
{
|
|
OciDigest = "sha256:img",
|
|
Layers = new()
|
|
{
|
|
new ReplayLayerRecord { LayerDigest = "l1", MerkleRoot = "m1", LeafCount = 2 },
|
|
new ReplayLayerRecord { LayerDigest = "l2", MerkleRoot = "m2", LeafCount = 3 }
|
|
}
|
|
};
|
|
|
|
var doc = record.ToBsonDocument();
|
|
doc["layers"].AsBsonArray.Should().HaveCount(2);
|
|
}
|
|
}
|