using Shouldly; using Xunit; using ZB.MOM.WW.OtOpcUa.Client.CLI.Commands; using ZB.MOM.WW.OtOpcUa.Client.CLI.Tests.Fakes; using ZB.MOM.WW.OtOpcUa.Client.Shared.Models; namespace ZB.MOM.WW.OtOpcUa.Client.CLI.Tests; public class CommandBaseTests { [Fact] public async Task CommonOptions_MapToConnectionSettings_Correctly() { var fakeService = new FakeOpcUaClientService(); var factory = new FakeOpcUaClientServiceFactory(fakeService); var command = new ConnectCommand(factory) { Url = "opc.tcp://myserver:4840", Username = "admin", Password = "secret", Security = "sign", FailoverUrls = "opc.tcp://backup1:4840,opc.tcp://backup2:4840" }; using var console = TestConsoleHelper.CreateConsole(); await command.ExecuteAsync(console); var settings = fakeService.LastConnectionSettings; settings.ShouldNotBeNull(); settings.EndpointUrl.ShouldBe("opc.tcp://myserver:4840"); settings.Username.ShouldBe("admin"); settings.Password.ShouldBe("secret"); settings.SecurityMode.ShouldBe(SecurityMode.Sign); settings.FailoverUrls.ShouldNotBeNull(); settings.FailoverUrls!.Length.ShouldBe(3); // primary + 2 failover settings.FailoverUrls[0].ShouldBe("opc.tcp://myserver:4840"); settings.AutoAcceptCertificates.ShouldBeTrue(); } [Fact] public async Task SecurityOption_Encrypt_MapsToSignAndEncrypt() { var fakeService = new FakeOpcUaClientService(); var factory = new FakeOpcUaClientServiceFactory(fakeService); var command = new ConnectCommand(factory) { Url = "opc.tcp://localhost:4840", Security = "encrypt" }; using var console = TestConsoleHelper.CreateConsole(); await command.ExecuteAsync(console); fakeService.LastConnectionSettings!.SecurityMode.ShouldBe(SecurityMode.SignAndEncrypt); } [Fact] public async Task SecurityOption_None_MapsToNone() { var fakeService = new FakeOpcUaClientService(); var factory = new FakeOpcUaClientServiceFactory(fakeService); var command = new ConnectCommand(factory) { Url = "opc.tcp://localhost:4840", Security = "none" }; using var console = TestConsoleHelper.CreateConsole(); await command.ExecuteAsync(console); fakeService.LastConnectionSettings!.SecurityMode.ShouldBe(SecurityMode.None); } [Fact] public async Task NoFailoverUrls_FailoverUrlsIsNull() { var fakeService = new FakeOpcUaClientService(); var factory = new FakeOpcUaClientServiceFactory(fakeService); var command = new ConnectCommand(factory) { Url = "opc.tcp://localhost:4840" }; using var console = TestConsoleHelper.CreateConsole(); await command.ExecuteAsync(console); fakeService.LastConnectionSettings!.FailoverUrls.ShouldBeNull(); } }