using System.Security.Claims; using Bunit; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Components.Authorization; using Microsoft.Extensions.DependencyInjection; using ZB.MOM.WW.ScadaBridge.CentralUI.Components.Pages; namespace ZB.MOM.WW.ScadaBridge.CentralUI.Tests; /// /// bUnit rendering tests for CentralUI Blazor components. /// Verifies that pages render their expected markup structure. /// public class ComponentRenderingTests : BunitContext { /// Verifies that the login page renders a form with username and password fields. [Fact] public void LoginPage_RendersForm_WithUsernameAndPasswordFields() { var cut = Render(); // Verify the form action var form = cut.Find("form"); Assert.Equal("/auth/login", form.GetAttribute("action")); // Verify username field var usernameInput = cut.Find("input#username"); Assert.Equal("text", usernameInput.GetAttribute("type")); Assert.Equal("username", usernameInput.GetAttribute("name")); // Verify password field var passwordInput = cut.Find("input#password"); Assert.Equal("password", passwordInput.GetAttribute("type")); Assert.Equal("password", passwordInput.GetAttribute("name")); // Verify submit button var submitButton = cut.Find("button[type='submit']"); Assert.Contains("Sign in", submitButton.TextContent); } /// Verifies that the login page does not render an alert when there is no error. [Fact] public void LoginPage_WithoutError_DoesNotRenderAlert() { var cut = Render(); Assert.Throws(() => cut.Find("div.panel.notice.login-error")); } /// Verifies that the dashboard page requires an authorize attribute. [Fact] public void Dashboard_RequiresAuthorizeAttribute() { var authorizeAttrs = typeof(Dashboard) .GetCustomAttributes(typeof(AuthorizeAttribute), true); Assert.NotEmpty(authorizeAttrs); } /// Verifies that the templates page requires the Design authorization policy. [Fact] public void TemplateEditor_RequiresDesignPolicy() { var authorizeAttrs = typeof(ZB.MOM.WW.ScadaBridge.CentralUI.Components.Pages.Design.Templates) .GetCustomAttributes(typeof(AuthorizeAttribute), true); Assert.NotEmpty(authorizeAttrs); var attr = (AuthorizeAttribute)authorizeAttrs[0]; Assert.Equal("RequireDesign", attr.Policy); } /// Verifies that the login page renders the ScadaBridge title. [Fact] public void LoginPage_RendersScadaBridgeTitle() { var cut = Render(); var title = cut.Find("h1.login-title"); Assert.Contains("ScadaBridge", title.TextContent); } }