59 lines
1.9 KiB
C#
59 lines
1.9 KiB
C#
using ClaudeDo.Ui.Services;
|
|
|
|
namespace ClaudeDo.Ui.Tests.Services;
|
|
|
|
public class InstallerLocatorTests : IDisposable
|
|
{
|
|
private readonly string _root;
|
|
|
|
public InstallerLocatorTests()
|
|
{
|
|
_root = Path.Combine(Path.GetTempPath(), "ClaudeDo.Ui.Tests-" + Guid.NewGuid().ToString("N"));
|
|
Directory.CreateDirectory(_root);
|
|
}
|
|
|
|
public void Dispose() { try { Directory.Delete(_root, true); } catch { } }
|
|
|
|
[Fact]
|
|
public void Find_WalkUpFromAppDir_ToInstallJsonSibling()
|
|
{
|
|
var installDir = Path.Combine(_root, "ClaudeDo");
|
|
var appDir = Path.Combine(installDir, "app");
|
|
var uninstallerDir = Path.Combine(installDir, "uninstaller");
|
|
Directory.CreateDirectory(appDir);
|
|
Directory.CreateDirectory(uninstallerDir);
|
|
|
|
File.WriteAllText(Path.Combine(installDir, "install.json"), "{}");
|
|
var installerPath = Path.Combine(uninstallerDir, "ClaudeDo.Installer.exe");
|
|
File.WriteAllText(installerPath, "x");
|
|
|
|
var locator = new InstallerLocator();
|
|
var found = locator.FindByWalkingUp(appDir);
|
|
|
|
Assert.Equal(installerPath, found);
|
|
}
|
|
|
|
[Fact]
|
|
public void Find_ReturnsNullWhenNoInstallJson()
|
|
{
|
|
var appDir = Path.Combine(_root, "somewhere", "app");
|
|
Directory.CreateDirectory(appDir);
|
|
|
|
var locator = new InstallerLocator();
|
|
Assert.Null(locator.FindByWalkingUp(appDir));
|
|
}
|
|
|
|
[Fact]
|
|
public void Find_ReturnsNullWhenInstallerMissingFromUninstallerDir()
|
|
{
|
|
var installDir = Path.Combine(_root, "ClaudeDo");
|
|
var appDir = Path.Combine(installDir, "app");
|
|
Directory.CreateDirectory(appDir);
|
|
Directory.CreateDirectory(Path.Combine(installDir, "uninstaller"));
|
|
File.WriteAllText(Path.Combine(installDir, "install.json"), "{}");
|
|
|
|
var locator = new InstallerLocator();
|
|
Assert.Null(locator.FindByWalkingUp(appDir));
|
|
}
|
|
}
|