MaBibli 1.0.0
Gestion de bibliothèque personnelle auto-hébergée : catalogue, prêts, scan de code-barres, consultation hors-ligne. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,95 @@
|
||||
using System.Reflection;
|
||||
using MaBibli.Api.Endpoints;
|
||||
using MaBibli.Shared.Dtos;
|
||||
|
||||
namespace MaBibli.Tests;
|
||||
|
||||
/// <summary>
|
||||
/// La version affichée par « À propos » est ce qu'on demandera à quelqu'un dont l'application se
|
||||
/// comporte mal : elle doit être exacte ou absente, jamais approximative.
|
||||
/// </summary>
|
||||
public class VersionApplicationTests
|
||||
{
|
||||
[Fact]
|
||||
public void Version_et_horodatage_injectes_donnent_une_version_publiee()
|
||||
{
|
||||
var version = VersionApplication.Depuis("0.4.0", "2026-08-21T10:30:00Z");
|
||||
|
||||
Assert.True(version.Publiee);
|
||||
Assert.Equal("0.4.0", version.Numero);
|
||||
Assert.Equal(
|
||||
new DateTimeOffset(2026, 8, 21, 10, 30, 0, TimeSpan.Zero),
|
||||
version.DateBuild!.Value.ToUniversalTime());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// ⚠️ Le cas qui justifie tout le mécanisme : sans injection, le SDK .NET pose « 1.0.0 »
|
||||
/// dans l'assembly. Ce numéro se lirait comme une vraie version alors qu'il ne désigne rien.
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public void Sans_horodatage_le_numero_du_SDK_nest_PAS_annonce()
|
||||
{
|
||||
var version = VersionApplication.Depuis("1.0.0", null);
|
||||
|
||||
Assert.False(version.Publiee);
|
||||
Assert.Null(version.Numero);
|
||||
Assert.Null(version.DateBuild);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData("")]
|
||||
[InlineData(" ")]
|
||||
[InlineData("pas une date")]
|
||||
public void Un_horodatage_illisible_vaut_absence(string horodatage) =>
|
||||
Assert.False(VersionApplication.Depuis("0.4.0", horodatage).Publiee);
|
||||
|
||||
/// <summary>Un horodatage sans version n'est pas une version : on n'invente pas le numéro.</summary>
|
||||
[Theory]
|
||||
[InlineData(null)]
|
||||
[InlineData("")]
|
||||
[InlineData(" ")]
|
||||
public void Sans_numero_rien_nest_annonce(string? numero) =>
|
||||
Assert.False(VersionApplication.Depuis(numero, "2026-08-21T10:30:00Z").Publiee);
|
||||
|
||||
/// <summary>
|
||||
/// Le SDK ajoute parfois « +empreinte » à l'InformationalVersion (SourceRevisionId) : seule
|
||||
/// la partie qui précède le « + » est un numéro de version lisible par un humain.
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public void L_empreinte_de_commit_est_retiree() =>
|
||||
Assert.Equal(
|
||||
"0.4.0",
|
||||
VersionApplication.Depuis("0.4.0+9a3f21c", "2026-08-21T10:30:00Z").Numero);
|
||||
|
||||
/// <summary>Une date locale injectée est ramenée en UTC, comme toutes les dates du projet.</summary>
|
||||
[Fact]
|
||||
public void L_horodatage_est_ramene_en_UTC() =>
|
||||
Assert.Equal(
|
||||
new DateTimeOffset(2026, 8, 21, 8, 30, 0, TimeSpan.Zero),
|
||||
VersionApplication.Depuis("0.4.0", "2026-08-21T10:30:00+02:00")!.DateBuild!.Value.ToUniversalTime());
|
||||
|
||||
/// <summary>
|
||||
/// La lecture des attributs est branchée sur le bon assembly. Les tests ne sont pas compilés
|
||||
/// par la chaîne de publication : elle doit donc rendre « version de développement », ce qui
|
||||
/// est exactement le comportement attendu d'un binaire compilé à la main.
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public void La_lecture_de_lassembly_ne_leve_rien_et_ne_publie_rien()
|
||||
{
|
||||
var version = VersionEndpoints.Lire(typeof(VersionEndpoints).Assembly);
|
||||
|
||||
Assert.False(version.Publiee);
|
||||
}
|
||||
|
||||
/// <summary>Une métadonnée bien nommée est bien lue, quel que soit l'assembly qui la porte.</summary>
|
||||
[Fact]
|
||||
public void La_metadonnee_MaBibliDateBuild_est_celle_qui_est_lue()
|
||||
{
|
||||
var assembly = typeof(VersionApplicationTests).Assembly;
|
||||
|
||||
// Aucun assembly de test ne la porte : la lecture doit rendre null, pas la première
|
||||
// métadonnée venue (elles sont nombreuses, posées par le SDK).
|
||||
Assert.Null(assembly.GetCustomAttributes<AssemblyMetadataAttribute>()
|
||||
.FirstOrDefault(a => a.Key == "MaBibliDateBuild"));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user