diff --git a/src/ScadaLink.CentralUI/Components/Forms/OpcUaEndpointEditor.razor b/src/ScadaLink.CentralUI/Components/Forms/OpcUaEndpointEditor.razor index c2d2baa..e78e4fc 100644 --- a/src/ScadaLink.CentralUI/Components/Forms/OpcUaEndpointEditor.razor +++ b/src/ScadaLink.CentralUI/Components/Forms/OpcUaEndpointEditor.razor @@ -40,6 +40,61 @@ +
Authentication
+ @if (Config.UserIdentity is null) + { + + } + else + { +
+
+ + +
+ @if (Config.UserIdentity.TokenType == OpcUaUserTokenType.UsernamePassword) + { +
+ + + @RenderFieldError("UserIdentity.Username") +
+
+ + +
+ } + else if (Config.UserIdentity.TokenType == OpcUaUserTokenType.X509Certificate) + { +
+ + + @RenderFieldError("UserIdentity.CertificatePath") +
+
+ + +
+ } +
+ +
+
+ } +
Timing
@@ -96,6 +151,69 @@
+
Advanced subscription
+
+
+ + + @RenderFieldError("SubscriptionDisplayName") +
+
+ + +
+
+ + +
+
+
+ + +
+
+
+ +
Deadband filter
+ @if (Config.Deadband is null) + { + + } + else + { +
+
+ + +
+
+ + + @RenderFieldError("Deadband.Value") +
+
+ +
+
+ } +
Heartbeat
@if (Config.Heartbeat is null) { @@ -138,6 +256,12 @@ private void EnableHeartbeat() => Config.Heartbeat = new OpcUaHeartbeatConfig(); + private void EnableAuthentication() => + Config.UserIdentity = new OpcUaUserIdentityConfig(); + + private void EnableDeadband() => + Config.Deadband = new OpcUaDeadbandConfig(); + private RenderFragment? RenderFieldError(string field) { var match = Errors?.Errors.FirstOrDefault(e => diff --git a/tests/ScadaLink.CentralUI.Tests/Forms/OpcUaEndpointEditorTests.cs b/tests/ScadaLink.CentralUI.Tests/Forms/OpcUaEndpointEditorTests.cs index b8b5f53..5c43676 100644 --- a/tests/ScadaLink.CentralUI.Tests/Forms/OpcUaEndpointEditorTests.cs +++ b/tests/ScadaLink.CentralUI.Tests/Forms/OpcUaEndpointEditorTests.cs @@ -136,9 +136,10 @@ public class OpcUaEndpointEditorTests : BunitContext }; var cut = Render(p => p.Add(c => c.Config, config)); - Assert.Contains("Username", cut.Markup); - Assert.Contains("Password", cut.Markup); - Assert.DoesNotContain("Certificate path", cut.Markup); + // only renders for the UsernamePassword branch + Assert.Contains(">Username<", cut.Markup); + Assert.Contains(">Password<", cut.Markup); + Assert.DoesNotContain(">Certificate path<", cut.Markup); } [Fact] @@ -153,9 +154,9 @@ public class OpcUaEndpointEditorTests : BunitContext }; var cut = Render(p => p.Add(c => c.Config, config)); - Assert.Contains("Certificate path", cut.Markup); - Assert.Contains("Certificate password", cut.Markup); - Assert.DoesNotContain("Username", cut.Markup); + Assert.Contains(">Certificate path<", cut.Markup); + Assert.Contains(">Certificate password<", cut.Markup); + Assert.DoesNotContain(">Username<", cut.Markup); } [Fact] @@ -167,8 +168,8 @@ public class OpcUaEndpointEditorTests : BunitContext }; var cut = Render(p => p.Add(c => c.Config, config)); - Assert.DoesNotContain("Username", cut.Markup); - Assert.DoesNotContain("Certificate path", cut.Markup); + Assert.DoesNotContain(">Username<", cut.Markup); + Assert.DoesNotContain(">Certificate path<", cut.Markup); } [Fact]