using System.Reflection; namespace ScadaLink.Host.Tests; /// /// WP-17: Tests for Windows Service support. /// Verifies UseWindowsService() is called in Program.cs. /// public class WindowsServiceTests { [Fact] public void ProgramCs_CallsUseWindowsService() { var hostProjectDir = FindHostProjectDirectory(); Assert.NotNull(hostProjectDir); var programFile = Path.Combine(hostProjectDir, "Program.cs"); Assert.True(File.Exists(programFile), "Program.cs not found"); var content = File.ReadAllText(programFile); // Verify UseWindowsService() is called for both Central and Site paths var occurrences = content.Split("UseWindowsService()").Length - 1; Assert.True(occurrences >= 2, $"Expected UseWindowsService() to be called at least twice (Central and Site paths), found {occurrences} occurrence(s)"); } [Fact] public void HostProject_ReferencesWindowsServicesPackage() { var hostProjectDir = FindHostProjectDirectory(); Assert.NotNull(hostProjectDir); var csprojFile = Path.Combine(hostProjectDir, "ScadaLink.Host.csproj"); Assert.True(File.Exists(csprojFile), "ScadaLink.Host.csproj not found"); var content = File.ReadAllText(csprojFile); Assert.Contains("Microsoft.Extensions.Hosting.WindowsServices", content); } private static string? FindHostProjectDirectory() { var assemblyDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)!; var dir = new DirectoryInfo(assemblyDir); while (dir != null) { var hostPath = Path.Combine(dir.FullName, "src", "ScadaLink.Host"); if (Directory.Exists(hostPath)) return hostPath; dir = dir.Parent; } return null; } }