Files
sufi-blazor/tests/Components/Feedback/SbAlertTests.cs
T
2026-05-18 15:53:59 +03:30

214 lines
5.5 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using Microsoft.AspNetCore.Components;
using Bunit;
using SufiChain.SufiBlazor.Components.Feedback;
using Xunit;
namespace SufiChain.SufiBlazor.Tests.Components.Feedback;
public class SbAlertTests : BunitContext
{
private IRenderedComponent<SbAlert> RenderAlert(
Action<ComponentParameterCollectionBuilder<SbAlert>>? configure = null)
{
return Render<SbAlert>(p =>
{
p.AddChildContent("<span>Alert message</span>");
configure?.Invoke(p);
});
}
[Fact]
public void RendersAlertStructure()
{
// Arrange & Act
var cut = RenderAlert();
// Assert
var alert = cut.Find(".sb-alert");
Assert.NotNull(alert);
Assert.NotNull(cut.Find(".sb-alert__icon"));
Assert.NotNull(cut.Find(".sb-alert__content"));
Assert.NotNull(cut.Find(".sb-alert__message"));
}
[Fact]
public void RendersChildContent()
{
// Arrange & Act
var cut = RenderAlert();
// Assert
Assert.Contains("Alert message", cut.Markup);
}
[Fact]
public void RendersTitleWhenProvided()
{
// Arrange & Act
var cut = RenderAlert(p => p.Add(x => x.Title, "Heads up"));
// Assert
var title = cut.Find(".sb-alert__title");
Assert.NotNull(title);
Assert.Contains("Heads up", title.TextContent);
}
[Fact]
public void DoesNotRenderTitleWhenEmpty()
{
// Arrange & Act
var cut = RenderAlert();
// Assert
Assert.Empty(cut.FindAll(".sb-alert__title"));
}
[Fact]
public void AppliesInfoSeverityByDefault()
{
// Arrange & Act
var cut = RenderAlert();
// Assert
var alert = cut.Find(".sb-alert");
Assert.Contains("sb-alert--info", alert.ClassList);
Assert.Contains("", cut.Markup);
}
[Fact]
public void AppliesSuccessSeverity()
{
// Arrange & Act
var cut = RenderAlert(p => p.Add(x => x.Severity, SbAlertSeverity.Success));
// Assert
var alert = cut.Find(".sb-alert");
Assert.Contains("sb-alert--success", alert.ClassList);
Assert.Contains("✓", cut.Markup);
}
[Fact]
public void AppliesWarningSeverity()
{
// Arrange & Act
var cut = RenderAlert(p => p.Add(x => x.Severity, SbAlertSeverity.Warning));
// Assert
var alert = cut.Find(".sb-alert");
Assert.Contains("sb-alert--warning", alert.ClassList);
Assert.Contains("⚠", cut.Markup);
}
[Fact]
public void AppliesDangerSeverity()
{
// Arrange & Act
var cut = RenderAlert(p => p.Add(x => x.Severity, SbAlertSeverity.Danger));
// Assert
var alert = cut.Find(".sb-alert");
Assert.Contains("sb-alert--danger", alert.ClassList);
Assert.Contains("✕", cut.Markup);
}
[Fact]
public void HasRoleAlertWhenDanger()
{
// Arrange & Act
var cut = RenderAlert(p => p.Add(x => x.Severity, SbAlertSeverity.Danger));
// Assert
var alert = cut.Find(".sb-alert");
Assert.Equal("alert", alert.GetAttribute("role"));
}
[Fact]
public void HasRoleStatusWhenNotDanger()
{
// Arrange & Act
var cut = RenderAlert(p => p.Add(x => x.Severity, SbAlertSeverity.Info));
// Assert
var alert = cut.Find(".sb-alert");
Assert.Equal("status", alert.GetAttribute("role"));
}
[Fact]
public void RendersDismissButtonWhenDismissible()
{
// Arrange & Act
var cut = RenderAlert(p => p.Add(x => x.Dismissible, true));
// Assert
var dismissBtn = cut.Find(".sb-alert__dismiss");
Assert.NotNull(dismissBtn);
Assert.Equal("button", dismissBtn.TagName.ToLowerInvariant());
Assert.Equal("Dismiss", dismissBtn.GetAttribute("aria-label"));
Assert.Contains("×", dismissBtn.TextContent);
}
[Fact]
public void DoesNotRenderDismissButtonWhenNotDismissible()
{
// Arrange & Act
var cut = RenderAlert();
// Assert
Assert.Empty(cut.FindAll(".sb-alert__dismiss"));
}
[Fact]
public async Task InvokesOnDismissWhenDismissButtonClicked()
{
// Arrange
var dismissed = false;
var cut = RenderAlert(p => p
.Add(x => x.Dismissible, true)
.Add(x => x.OnDismiss, EventCallback.Factory.Create(this, () => dismissed = true)));
var dismissBtn = cut.Find(".sb-alert__dismiss");
// Act
await cut.InvokeAsync(() => dismissBtn!.Click());
cut.WaitForState(() => dismissed);
// Assert
Assert.True(dismissed);
}
[Fact]
public void AppliesDenseClass()
{
// Arrange & Act
var cut = RenderAlert(p => p.Add(x => x.Dense, true));
// Assert
var alert = cut.Find(".sb-alert");
Assert.Contains("sb-alert--dense", alert.ClassList);
}
[Fact]
public void AppliesCustomClass()
{
// Arrange & Act
var cut = RenderAlert(p => p.Add(x => x.Class, "my-alert"));
// Assert
var alert = cut.Find(".sb-alert");
Assert.Contains("my-alert", alert.ClassList);
}
[Fact]
public void AppliesInlineStyle()
{
// Arrange & Act
var cut = RenderAlert(p => p.Add(x => x.Style, "margin-top: 10px;"));
// Assert
var alert = cut.Find(".sb-alert");
Assert.Contains("margin-top: 10px", alert.GetAttribute("style"));
}
}