using StellaOps.Findings.Ledger.Infrastructure.Exports; using Xunit; namespace StellaOps.Findings.Ledger.Tests.Exports; public class ExportPagingTests { [Fact] public void ComputeFiltersHash_IsDeterministic() { var left = new Dictionary { ["shape"] = "canonical", ["since_sequence"] = "10", ["until_sequence"] = "20" }; var right = new Dictionary { ["until_sequence"] = "20", ["shape"] = "canonical", ["since_sequence"] = "10" }; var leftHash = ExportPaging.ComputeFiltersHash(left); var rightHash = ExportPaging.ComputeFiltersHash(right); Assert.Equal(leftHash, rightHash); } [Fact] public void PageToken_RoundTrips() { var key = new ExportPaging.ExportPageKey(5, "v1", "abc123"); var filtersHash = ExportPaging.ComputeFiltersHash(new Dictionary { ["shape"] = "canonical" }); var token = ExportPaging.CreatePageToken(key, filtersHash); var parsed = ExportPaging.TryParsePageToken(token, filtersHash, out var recovered, out var error); Assert.True(parsed); Assert.Null(error); Assert.NotNull(recovered); Assert.Equal(key.SequenceNumber, recovered!.SequenceNumber); Assert.Equal(key.PolicyVersion, recovered.PolicyVersion); Assert.Equal(key.CycleHash, recovered.CycleHash); } }