namespace ClaudeDo.Releases.Tests; public class SelfUpdaterAssetMatchingTests { [Fact] public void FindInstallerAsset_PicksInstallerExeByPattern() { var assets = new[] { new ReleaseAsset("ClaudeDo-0.3.0-win-x64.zip", "https://x/app.zip", 10), new ReleaseAsset("ClaudeDo.Installer-0.3.0.exe", "https://x/inst.exe", 20), new ReleaseAsset("checksums.txt", "https://x/checks", 1), }; var result = SelfUpdater.FindInstallerAsset(assets); Assert.NotNull(result); Assert.Equal("ClaudeDo.Installer-0.3.0.exe", result!.Asset.Name); Assert.Equal("0.3.0", result.Version); } [Fact] public void FindInstallerAsset_ReturnsNullWhenAbsent() { var assets = new[] { new ReleaseAsset("ClaudeDo-0.3.0-win-x64.zip", "https://x/app.zip", 10), }; Assert.Null(SelfUpdater.FindInstallerAsset(assets)); } [Fact] public void FindInstallerAsset_IgnoresAppZipThatContainsInstaller() { var assets = new[] { new ReleaseAsset("ClaudeDo.Installer.Portable-0.3.0.zip", "https://x/1", 1), new ReleaseAsset("not-the-installer.exe", "https://x/2", 1), }; Assert.Null(SelfUpdater.FindInstallerAsset(assets)); } }