using System.Security.Claims; using Bunit; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Components.Authorization; using Microsoft.Extensions.DependencyInjection; using ScadaLink.CentralUI.Components.Pages; namespace ScadaLink.CentralUI.Tests; /// /// bUnit rendering tests for CentralUI Blazor components. /// Verifies that pages render their expected markup structure. /// public class ComponentRenderingTests : BunitContext { [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); } [Fact] public void LoginPage_WithoutError_DoesNotRenderAlert() { var cut = Render(); Assert.Throws(() => cut.Find("div.alert.alert-danger")); } [Fact] public void Dashboard_RequiresAuthorizeAttribute() { var authorizeAttrs = typeof(Dashboard) .GetCustomAttributes(typeof(AuthorizeAttribute), true); Assert.NotEmpty(authorizeAttrs); } [Fact] public void TemplateEditor_RequiresDesignPolicy() { var authorizeAttrs = typeof(ScadaLink.CentralUI.Components.Pages.Design.Templates) .GetCustomAttributes(typeof(AuthorizeAttribute), true); Assert.NotEmpty(authorizeAttrs); var attr = (AuthorizeAttribute)authorizeAttrs[0]; Assert.Equal("RequireDesign", attr.Policy); } [Fact] public void LoginPage_RendersLdapCredentialHint() { var cut = Render(); Assert.Contains("LDAP credentials", cut.Markup); } [Fact] public void LoginPage_RendersScadaLinkTitle() { var cut = Render(); var title = cut.Find("h4.card-title"); Assert.Equal("ScadaLink", title.TextContent); } }