67 lines
2.6 KiB
C#
67 lines
2.6 KiB
C#
namespace ZB.MOM.WW.Theme.Tests;
|
|
|
|
public sealed class TechButtonExtensionsTests : BunitContext
|
|
{
|
|
[Theory]
|
|
[InlineData(ButtonSize.Default, null)]
|
|
[InlineData(ButtonSize.Small, "btn-sm")]
|
|
[InlineData(ButtonSize.Large, "btn-lg")]
|
|
public void Size_preserves_variant_and_composes_both_class_inputs(ButtonSize size, string? expected)
|
|
{
|
|
var cut = Render<TechButton>(p => p
|
|
.Add(x => x.Variant, ButtonVariant.Secondary)
|
|
.Add(x => x.Size, size)
|
|
.Add(x => x.Class, "explicit-action")
|
|
.Add(x => x.AdditionalAttributes, new Dictionary<string, object>
|
|
{
|
|
["class"] = "caller-action", ["aria-label"] = "Save changes"
|
|
})
|
|
.AddChildContent("Save"));
|
|
|
|
var button = cut.Find("button");
|
|
foreach (var cls in new[] { "btn", "btn-outline-secondary", "explicit-action", "caller-action" })
|
|
Assert.Contains(cls, button.ClassList);
|
|
Assert.Equal("Save changes", button.GetAttribute("aria-label"));
|
|
if (expected is not null) Assert.Contains(expected, button.ClassList);
|
|
else
|
|
{
|
|
Assert.DoesNotContain("btn-sm", button.ClassList);
|
|
Assert.DoesNotContain("btn-lg", button.ClassList);
|
|
}
|
|
}
|
|
|
|
[Fact]
|
|
public void Class_composition_keeps_busy_type_and_click_behavior()
|
|
{
|
|
var clicks = 0;
|
|
var attributes = new Dictionary<string, object>
|
|
{
|
|
["class"] = "caller", ["disabled"] = false,
|
|
["onclick"] = EventCallback.Factory.Create(this, () => clicks++)
|
|
};
|
|
var cut = Render<TechButton>(p => p
|
|
.Add(x => x.Class, "extra")
|
|
.Add(x => x.Type, "submit")
|
|
.Add(x => x.Busy, true)
|
|
.Add(x => x.AdditionalAttributes, attributes)
|
|
.AddChildContent("Save"));
|
|
|
|
Assert.True(cut.Find("button").HasAttribute("disabled"));
|
|
Assert.Equal("submit", cut.Find("button").GetAttribute("type"));
|
|
Assert.NotNull(cut.Find(".spinner-border"));
|
|
Assert.Equal("caller", attributes["class"]);
|
|
cut.Render(p => p.Add(x => x.Busy, false));
|
|
cut.Find("button").Click();
|
|
Assert.Equal(1, clicks);
|
|
Assert.DoesNotContain(cut.FindAll("span"), x => x.ClassList.Contains("spinner-border"));
|
|
}
|
|
|
|
[Fact]
|
|
public void Lowercase_class_attribute_preserves_required_button_classes()
|
|
{
|
|
var cut = Render<TechButton>(p => p.AddUnmatched("class", "caller").AddChildContent("Go"));
|
|
foreach (var cls in new[] { "btn", "btn-primary", "caller" })
|
|
Assert.Contains(cls, cut.Find("button").ClassList);
|
|
}
|
|
}
|