You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
1.7 KiB
70 lines
1.7 KiB
using System.Text.Json; |
|
using AutoFixture.Xunit2; |
|
using Bit.Core.Utilities; |
|
using Xunit; |
|
|
|
namespace Bit.Core.Test.Tokens; |
|
|
|
public class ExpiringTokenTests |
|
{ |
|
[Theory, AutoData] |
|
public void ExpirationSerializesToEpochMilliseconds(DateTime expirationDate) |
|
{ |
|
var sut = new TestExpiringTokenable |
|
{ |
|
ExpirationDate = expirationDate |
|
}; |
|
|
|
var result = JsonSerializer.Serialize(sut); |
|
var expectedDate = CoreHelpers.ToEpocMilliseconds(expirationDate); |
|
|
|
Assert.Contains($"\"ExpirationDate\":{expectedDate}", result); |
|
} |
|
|
|
[Theory, AutoData] |
|
public void ExpirationSerializationRoundTrip(DateTime expirationDate) |
|
{ |
|
var sut = new TestExpiringTokenable |
|
{ |
|
ExpirationDate = expirationDate |
|
}; |
|
|
|
var intermediate = JsonSerializer.Serialize(sut); |
|
var result = JsonSerializer.Deserialize<TestExpiringTokenable>(intermediate); |
|
|
|
Assert.Equal(sut.ExpirationDate, result.ExpirationDate, TimeSpan.FromMilliseconds(100)); |
|
} |
|
|
|
[Fact] |
|
public void InvalidIfPastExpiryDate() |
|
{ |
|
var sut = new TestExpiringTokenable |
|
{ |
|
ExpirationDate = DateTime.UtcNow.AddHours(-1) |
|
}; |
|
|
|
Assert.False(sut.Valid); |
|
} |
|
|
|
[Fact] |
|
public void ValidIfWithinExpirationAndTokenReportsValid() |
|
{ |
|
var sut = new TestExpiringTokenable |
|
{ |
|
ExpirationDate = DateTime.UtcNow.AddHours(1) |
|
}; |
|
|
|
Assert.True(sut.Valid); |
|
} |
|
|
|
[Fact] |
|
public void HonorsTokenIsValidAbstractMember() |
|
{ |
|
var sut = new TestExpiringTokenable(forceInvalid: true) |
|
{ |
|
ExpirationDate = DateTime.UtcNow.AddHours(1) |
|
}; |
|
|
|
Assert.False(sut.Valid); |
|
} |
|
}
|
|
|