using Ludarium.Application; using Ludarium.Domain; namespace Ludarium.UnitTests; public sealed class FirmwarePolicyTests { [Fact] public void PersonalFirmwareSlotsAreExplicitAndRuntimeClaimsStayHonest() { var requirements = FirmwarePolicy.Describe(); Assert.Contains(requirements, item => item.Platform == "psx" && item.Slot == "bios" && item.BrowserDelivery); Assert.Contains(requirements, item => item.Platform == "ps2" && item.Kind == FirmwareAssetKind.Bios && !item.BrowserDelivery); Assert.Equal(2, requirements.Count(item => item.Platform == "switch" && item.Kind == FirmwareAssetKind.KeySet && !item.BrowserDelivery)); Assert.All(requirements, item => Assert.Contains("runtime", item.RuntimeState, StringComparison.OrdinalIgnoreCase)); } [Theory] [InlineData("psx", "bios", "scph.bin")] [InlineData("ps2", "bios", "personal.rom")] [InlineData("switch", "prod-keys", "prod.keys")] public void AllowlistedNamesAreAccepted(string platform, string slot, string fileName) => Assert.Equal(fileName, FirmwarePolicy.ValidateFileName(FirmwarePolicy.Get(platform, slot), fileName)); [Theory] [InlineData("psx", "bios", "setup.exe")] [InlineData("switch", "prod-keys", "keys.zip")] [InlineData("switch", "firmware", "firmware.bin")] public void UnknownSlotsAndUnsafeExtensionsFailClosed(string platform, string slot, string fileName) => Assert.Throws(() => FirmwarePolicy.ValidateFileName(FirmwarePolicy.Get(platform, slot), fileName)); }