Premiere commit - Omika

This commit is contained in:
2026-10-23 18:46:50 +02:00
commit 8ea76c1b24
2155 changed files with 984301 additions and 0 deletions
@@ -0,0 +1,71 @@
using System.Text;
using System.Text.Json;
using Omika.Core.Services.Mobile;
namespace Omika.Tests.Mobile;
/// <summary>
/// Tests du TokenExpirationReader : lecture NON autoritative de l'expiration
/// depuis le payload, sans vérification de signature.
/// </summary>
public class TokenExpirationReaderTests
{
private static readonly DateTimeOffset Now = new(2026, 9, 29, 12, 0, 0, TimeSpan.Zero);
private static string Token(long expiresAtUtc)
=> Base64Url(JsonSerializer.SerializeToUtf8Bytes(new { ExpiresAtUtc = expiresAtUtc })) + ".signature-ignored";
private static string Base64Url(byte[] data)
=> Convert.ToBase64String(data).TrimEnd('=').Replace('+', '-').Replace('/', '_');
[Fact]
public void ExpirationFuture_NestPasExpire()
{
string token = Token(Now.AddMinutes(5).ToUnixTimeSeconds());
Assert.False(TokenExpirationReader.IsExpired(token, Now));
}
[Fact]
public void ExpirationPassee_EstExpire()
{
string token = Token(Now.AddSeconds(-1).ToUnixTimeSeconds());
Assert.True(TokenExpirationReader.IsExpired(token, Now));
}
[Fact]
public void BoundaryExactNow_NestPasExpire_StrictementInferieur()
{
// Le serveur utilise ExpiresAtUtc < now (strict). À l'instant exact,
// le token n'est PAS encore expiré.
string token = Token(Now.ToUnixTimeSeconds());
Assert.False(TokenExpirationReader.IsExpired(token, Now));
}
[Theory]
[InlineData(null)]
[InlineData("")]
[InlineData(" ")]
[InlineData("pas-de-point")]
[InlineData("a.b.c")]
[InlineData("!base64-invalide!.sig")]
[InlineData("eyJmb28iOiJiYXIifQ==.sig")] // payload sans ExpiresAtUtc
public void FormatInvalide_RetourneNullEtNonExpire(string? token)
{
Assert.Null(TokenExpirationReader.TryReadExpiresAtUtc(token));
Assert.False(TokenExpirationReader.IsExpired(token, Now));
}
[Fact]
public void LitExpirationSansVerifierSignature()
{
string token = Token(Now.AddHours(2).ToUnixTimeSeconds());
DateTimeOffset? expires = TokenExpirationReader.TryReadExpiresAtUtc(token);
Assert.NotNull(expires);
Assert.Equal(Now.AddHours(2).ToUnixTimeSeconds(), expires!.Value.ToUnixTimeSeconds());
}
}