30 lines
982 B
C#
30 lines
982 B
C#
using TermRemoteCtl.Agent.Security;
|
|
|
|
namespace TermRemoteCtl.Agent.Tests.Security;
|
|
|
|
public class PairingServiceTests
|
|
{
|
|
[Fact]
|
|
public void Redeem_Returns_Expired_And_Clears_Current_Code_When_Code_Has_Expired()
|
|
{
|
|
var clock = new FakeClock(new DateTimeOffset(2026, 03, 27, 02, 00, 00, TimeSpan.Zero));
|
|
var service = new PairingService(clock);
|
|
|
|
var code = service.CreateCode(TimeSpan.FromMinutes(5));
|
|
clock.UtcNow = code.ExpiresAtUtc.AddSeconds(1);
|
|
|
|
var expiredResult = service.Redeem(code.Value, "Pixel 9");
|
|
var missingResult = service.Redeem(code.Value, "Pixel 9");
|
|
|
|
Assert.False(expiredResult.Success);
|
|
Assert.Equal("expired", expiredResult.ErrorCode);
|
|
Assert.False(missingResult.Success);
|
|
Assert.Equal("not_found", missingResult.ErrorCode);
|
|
}
|
|
|
|
private sealed class FakeClock(DateTimeOffset utcNow) : IClock
|
|
{
|
|
public DateTimeOffset UtcNow { get; set; } = utcNow;
|
|
}
|
|
}
|