proposal-system/api/tests/ProposalSystem.Tests/Common/RowVersionCodecTests.cs

38 lines
1.1 KiB
C#
Raw Normal View History

using FluentAssertions;
using ProposalSystem.Application.Common;
using Xunit;
namespace ProposalSystem.Tests.Common;
public class RowVersionCodecTests
{
[Theory(DisplayName = "Encode/TryDecode round-trips")]
[InlineData(1L)]
[InlineData(2L)]
[InlineData(long.MaxValue)]
public void RoundTrips(long version)
{
var token = RowVersionCodec.Encode(version);
RowVersionCodec.TryDecode(token, out var decoded).Should().BeTrue();
decoded.Should().Be(version);
}
[Fact(DisplayName = "Version 1 encodes to the SHOC-style opaque token")]
public void EncodesOpaqueBase64()
{
RowVersionCodec.Encode(1).Should().Be("AAAAAAAAAAE=");
}
[Theory(DisplayName = "TryDecode rejects missing/malformed/wrong-length tokens")]
[InlineData(null)]
[InlineData("")]
[InlineData("not base64!!")]
[InlineData("AAA=")] // valid base64 but not 8 bytes
[InlineData("AAAAAAAAAAAAAAAAAAAAAA==")] // 16 bytes
public void RejectsInvalid(string? token)
{
RowVersionCodec.TryDecode(token, out _).Should().BeFalse();
}
}