using ManagerService.Data; using ManagerService.Helpers; using Xunit; namespace ManagerService.Tests.Helpers { /// /// Le calculateur est appelé par la création, le backfill et MigrationController. /// Ces tests fixent la distinction qu'ils perdaient chacun de leur côté : un type /// URL n'a pas de blob, donc ni chemin de stockage ni poids au quota. /// public class ResourceStorageTests { [Theory] [InlineData(ResourceType.Image)] [InlineData(ResourceType.Video)] [InlineData(ResourceType.Audio)] [InlineData(ResourceType.PDF)] [InlineData(ResourceType.JSON)] [InlineData(ResourceType.Word)] [InlineData(ResourceType.PowerPoint)] [InlineData(ResourceType.Text)] public void Apply_BlobType_WritesPathAndSize(ResourceType type) { var resource = new Resource { Id = "res-1", InstanceId = "inst-1", Type = type }; ResourceStorage.Apply(resource, 4096); Assert.Equal("pictures/inst-1/res-1", resource.StoragePath); Assert.Equal(4096, resource.SizeBytes); } [Theory] [InlineData(ResourceType.ImageUrl)] [InlineData(ResourceType.VideoUrl)] [InlineData(ResourceType.JSONUrl)] public void Apply_UrlType_WritesNothing(ResourceType type) { var resource = new Resource { Id = "res-1", InstanceId = "inst-1", Type = type }; ResourceStorage.Apply(resource, 4096); Assert.Null(resource.StoragePath); // Reste à 0 : un média hébergé ailleurs ne doit pas peser sur le quota. Assert.Equal(0, resource.SizeBytes); } [Fact] public void PathFor_IsDeterministic_SoBackfillCanRebuildIt() { Assert.Equal( ResourceStorage.PathFor(ResourceType.Image, "inst-1", "res-1"), ResourceStorage.PathFor(ResourceType.Image, "inst-1", "res-1")); } [Fact] public void PathFor_UrlType_IsNull() { Assert.Null(ResourceStorage.PathFor(ResourceType.ImageUrl, "inst-1", "res-1")); } } }