first commit
This commit is contained in:
@@ -0,0 +1,240 @@
|
||||
using Bunit;
|
||||
using Microsoft.AspNetCore.Components.Web;
|
||||
using SufiChain.SufiBlazor.Components;
|
||||
using SufiChain.SufiBlazor.Components.Actions;
|
||||
using Xunit;
|
||||
|
||||
namespace SufiChain.SufiBlazor.Tests.Components.Actions;
|
||||
|
||||
public class SbButtonTests : BunitContext
|
||||
{
|
||||
[Fact]
|
||||
public void RendersAsButtonByDefault()
|
||||
{
|
||||
// Arrange & Act
|
||||
var cut = Render<SbButton>(parameters => parameters
|
||||
.AddChildContent("Click me"));
|
||||
|
||||
// Assert
|
||||
var button = cut.Find("button");
|
||||
Assert.NotNull(button);
|
||||
Assert.Equal("button", button.GetAttribute("type"));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RendersChildContent()
|
||||
{
|
||||
// Arrange
|
||||
const string expectedContent = "Submit";
|
||||
|
||||
// Act
|
||||
var cut = Render<SbButton>(parameters => parameters
|
||||
.AddChildContent(expectedContent));
|
||||
|
||||
// Assert
|
||||
var content = cut.Find(".sb-button__content");
|
||||
Assert.NotNull(content);
|
||||
Assert.Contains(expectedContent, content.TextContent);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AppliesDefaultClasses()
|
||||
{
|
||||
// Arrange & Act
|
||||
var cut = Render<SbButton>(parameters => parameters
|
||||
.AddChildContent("Click"));
|
||||
|
||||
// Assert
|
||||
var button = cut.Find("button");
|
||||
Assert.Contains("sb-button", button.ClassList);
|
||||
Assert.Contains("sb-button--solid", button.ClassList);
|
||||
Assert.Contains("sb-button--md", button.ClassList);
|
||||
Assert.Contains("sb-button--primary", button.ClassList);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RendersAsAnchorWhenHrefIsSet()
|
||||
{
|
||||
// Arrange & Act
|
||||
var cut = Render<SbButton>(parameters => parameters
|
||||
.Add(p => p.Href, "https://example.com")
|
||||
.AddChildContent("Link"));
|
||||
|
||||
// Assert
|
||||
var anchor = cut.Find("a");
|
||||
Assert.NotNull(anchor);
|
||||
Assert.Equal("https://example.com", anchor.GetAttribute("href"));
|
||||
Assert.Empty(cut.FindAll("button"));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AppliesDisabledState()
|
||||
{
|
||||
// Arrange & Act
|
||||
var cut = Render<SbButton>(parameters => parameters
|
||||
.Add(p => p.Disabled, true)
|
||||
.AddChildContent("Disabled"));
|
||||
|
||||
// Assert
|
||||
var button = cut.Find("button");
|
||||
Assert.True(button.HasAttribute("disabled"));
|
||||
Assert.Contains("sb-button--disabled", button.ClassList);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AppliesLoadingState()
|
||||
{
|
||||
// Arrange & Act
|
||||
var cut = Render<SbButton>(parameters => parameters
|
||||
.Add(p => p.Loading, true)
|
||||
.AddChildContent("Loading"));
|
||||
|
||||
// Assert
|
||||
var button = cut.Find("button");
|
||||
Assert.True(button.HasAttribute("disabled"));
|
||||
Assert.Equal("true", button.GetAttribute("aria-busy"));
|
||||
Assert.Contains("sb-button--loading", button.ClassList);
|
||||
Assert.NotNull(cut.Find(".sb-button__spinner"));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AppliesFullWidth()
|
||||
{
|
||||
// Arrange & Act
|
||||
var cut = Render<SbButton>(parameters => parameters
|
||||
.Add(p => p.FullWidth, true)
|
||||
.AddChildContent("Full Width"));
|
||||
|
||||
// Assert
|
||||
var button = cut.Find("button");
|
||||
Assert.Contains("sb-button--full-width", button.ClassList);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AppliesCustomClass()
|
||||
{
|
||||
// Arrange & Act
|
||||
var cut = Render<SbButton>(parameters => parameters
|
||||
.Add(p => p.Class, "my-custom-class")
|
||||
.AddChildContent("Click"));
|
||||
|
||||
// Assert
|
||||
var button = cut.Find("button");
|
||||
Assert.Contains("my-custom-class", button.ClassList);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AppliesVariant()
|
||||
{
|
||||
// Arrange & Act
|
||||
var cut = Render<SbButton>(parameters => parameters
|
||||
.Add(p => p.Variant, SbButtonVariant.Outline)
|
||||
.AddChildContent("Outline"));
|
||||
|
||||
// Assert
|
||||
var button = cut.Find("button");
|
||||
Assert.Contains("sb-button--outline", button.ClassList);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AppliesSize()
|
||||
{
|
||||
// Arrange & Act
|
||||
var cut = Render<SbButton>(parameters => parameters
|
||||
.Add(p => p.Size, SbSize.Sm)
|
||||
.AddChildContent("Small"));
|
||||
|
||||
// Assert
|
||||
var button = cut.Find("button");
|
||||
Assert.Contains("sb-button--sm", button.ClassList);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AppliesColor()
|
||||
{
|
||||
// Arrange & Act
|
||||
var cut = Render<SbButton>(parameters => parameters
|
||||
.Add(p => p.Color, SbColor.Danger)
|
||||
.AddChildContent("Danger"));
|
||||
|
||||
// Assert
|
||||
var button = cut.Find("button");
|
||||
Assert.Contains("sb-button--danger", button.ClassList);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DoesNotAddColorClassWhenDefault()
|
||||
{
|
||||
// Arrange & Act
|
||||
var cut = Render<SbButton>(parameters => parameters
|
||||
.Add(p => p.Color, SbColor.Default)
|
||||
.AddChildContent("Default"));
|
||||
|
||||
// Assert
|
||||
var button = cut.Find("button");
|
||||
Assert.DoesNotContain("sb-button--default", button.ClassList);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SetsTypeAttribute()
|
||||
{
|
||||
// Arrange & Act
|
||||
var cut = Render<SbButton>(parameters => parameters
|
||||
.Add(p => p.Type, "submit")
|
||||
.AddChildContent("Submit"));
|
||||
|
||||
// Assert
|
||||
var button = cut.Find("button");
|
||||
Assert.Equal("submit", button.GetAttribute("type"));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvokesOnClickWhenClicked()
|
||||
{
|
||||
// Arrange
|
||||
var clicked = false;
|
||||
var cut = Render<SbButton>(parameters => parameters
|
||||
.Add(p => p.OnClick, args => { clicked = true; return Task.CompletedTask; })
|
||||
.AddChildContent("Click me"));
|
||||
|
||||
// Act
|
||||
cut.Find("button").Click();
|
||||
|
||||
// Assert
|
||||
Assert.True(clicked);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DoesNotInvokeOnClickWhenDisabled()
|
||||
{
|
||||
// Arrange
|
||||
var clicked = false;
|
||||
var cut = Render<SbButton>(parameters => parameters
|
||||
.Add(p => p.Disabled, true)
|
||||
.Add(p => p.OnClick, args => { clicked = true; return Task.CompletedTask; })
|
||||
.AddChildContent("Disabled"));
|
||||
|
||||
// Act
|
||||
cut.Find("button").Click();
|
||||
|
||||
// Assert
|
||||
Assert.False(clicked);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DoesNotInvokeOnClickWhenLoading()
|
||||
{
|
||||
// Arrange
|
||||
var clicked = false;
|
||||
var cut = Render<SbButton>(parameters => parameters
|
||||
.Add(p => p.Loading, true)
|
||||
.Add(p => p.OnClick, args => { clicked = true; return Task.CompletedTask; })
|
||||
.AddChildContent("Loading"));
|
||||
|
||||
// Act
|
||||
cut.Find("button").Click();
|
||||
|
||||
// Assert
|
||||
Assert.False(clicked);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,245 @@
|
||||
using Bunit;
|
||||
using Microsoft.AspNetCore.Components.Web;
|
||||
using SufiChain.SufiBlazor.Components;
|
||||
using SufiChain.SufiBlazor.Components.Actions;
|
||||
using Xunit;
|
||||
|
||||
namespace SufiChain.SufiBlazor.Tests.Components.Actions;
|
||||
|
||||
public class SbIconButtonTests : BunitContext
|
||||
{
|
||||
[Fact]
|
||||
public void RendersAsButtonByDefault()
|
||||
{
|
||||
// Arrange & Act
|
||||
var cut = Render<SbIconButton>(parameters => parameters
|
||||
.AddChildContent("<span>★</span>"));
|
||||
|
||||
// Assert
|
||||
var button = cut.Find("button");
|
||||
Assert.NotNull(button);
|
||||
Assert.Equal("button", button.GetAttribute("type"));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RendersChildContent()
|
||||
{
|
||||
// Arrange & Act
|
||||
var cut = Render<SbIconButton>(parameters => parameters
|
||||
.AddChildContent("<span class=\"test-icon\">★</span>"));
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(cut.Find(".test-icon"));
|
||||
Assert.Contains("★", cut.Markup);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RendersIconParameter()
|
||||
{
|
||||
// Arrange & Act
|
||||
var cut = Render<SbIconButton>(parameters => parameters
|
||||
.Add(p => p.Icon, builder => builder.AddMarkupContent(0, "<span class=\"icon-content\">🔍</span>")));
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(cut.Find(".icon-content"));
|
||||
Assert.Contains("🔍", cut.Markup);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AppliesDefaultClasses()
|
||||
{
|
||||
// Arrange & Act
|
||||
var cut = Render<SbIconButton>(parameters => parameters
|
||||
.AddChildContent("<span>★</span>"));
|
||||
|
||||
// Assert
|
||||
var button = cut.Find("button");
|
||||
Assert.Contains("sb-icon-button", button.ClassList);
|
||||
Assert.Contains("sb-icon-button--ghost", button.ClassList);
|
||||
Assert.Contains("sb-icon-button--md", button.ClassList);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DoesNotAddColorClassWhenDefault()
|
||||
{
|
||||
// Arrange & Act
|
||||
var cut = Render<SbIconButton>(parameters => parameters
|
||||
.Add(p => p.Color, SbColor.Default)
|
||||
.AddChildContent("<span>★</span>"));
|
||||
|
||||
// Assert
|
||||
var button = cut.Find("button");
|
||||
Assert.DoesNotContain("sb-icon-button--default", button.ClassList);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AppliesAriaLabel()
|
||||
{
|
||||
// Arrange & Act
|
||||
var cut = Render<SbIconButton>(parameters => parameters
|
||||
.Add(p => p.AriaLabel, "Search")
|
||||
.AddChildContent("<span>🔍</span>"));
|
||||
|
||||
// Assert
|
||||
var button = cut.Find("button");
|
||||
Assert.Equal("Search", button.GetAttribute("aria-label"));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AppliesTitle()
|
||||
{
|
||||
// Arrange & Act
|
||||
var cut = Render<SbIconButton>(parameters => parameters
|
||||
.Add(p => p.Title, "Tooltip text")
|
||||
.AddChildContent("<span>★</span>"));
|
||||
|
||||
// Assert
|
||||
var button = cut.Find("button");
|
||||
Assert.Equal("Tooltip text", button.GetAttribute("title"));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AppliesDisabledState()
|
||||
{
|
||||
// Arrange & Act
|
||||
var cut = Render<SbIconButton>(parameters => parameters
|
||||
.Add(p => p.Disabled, true)
|
||||
.AddChildContent("<span>★</span>"));
|
||||
|
||||
// Assert
|
||||
var button = cut.Find("button");
|
||||
Assert.True(button.HasAttribute("disabled"));
|
||||
Assert.Contains("sb-icon-button--disabled", button.ClassList);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AppliesLoadingState()
|
||||
{
|
||||
// Arrange & Act
|
||||
var cut = Render<SbIconButton>(parameters => parameters
|
||||
.Add(p => p.Loading, true)
|
||||
.AddChildContent("<span>★</span>"));
|
||||
|
||||
// Assert
|
||||
var button = cut.Find("button");
|
||||
Assert.True(button.HasAttribute("disabled"));
|
||||
Assert.Equal("true", button.GetAttribute("aria-busy"));
|
||||
Assert.Contains("sb-icon-button--loading", button.ClassList);
|
||||
Assert.NotNull(cut.Find(".sb-icon-button__spinner"));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AppliesCustomClass()
|
||||
{
|
||||
// Arrange & Act
|
||||
var cut = Render<SbIconButton>(parameters => parameters
|
||||
.Add(p => p.Class, "my-custom-class")
|
||||
.AddChildContent("<span>★</span>"));
|
||||
|
||||
// Assert
|
||||
var button = cut.Find("button");
|
||||
Assert.Contains("my-custom-class", button.ClassList);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AppliesVariant()
|
||||
{
|
||||
// Arrange & Act
|
||||
var cut = Render<SbIconButton>(parameters => parameters
|
||||
.Add(p => p.Variant, SbButtonVariant.Outline)
|
||||
.AddChildContent("<span>★</span>"));
|
||||
|
||||
// Assert
|
||||
var button = cut.Find("button");
|
||||
Assert.Contains("sb-icon-button--outline", button.ClassList);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AppliesSize()
|
||||
{
|
||||
// Arrange & Act
|
||||
var cut = Render<SbIconButton>(parameters => parameters
|
||||
.Add(p => p.Size, SbSize.Sm)
|
||||
.AddChildContent("<span>★</span>"));
|
||||
|
||||
// Assert
|
||||
var button = cut.Find("button");
|
||||
Assert.Contains("sb-icon-button--sm", button.ClassList);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AppliesColor()
|
||||
{
|
||||
// Arrange & Act
|
||||
var cut = Render<SbIconButton>(parameters => parameters
|
||||
.Add(p => p.Color, SbColor.Primary)
|
||||
.AddChildContent("<span>★</span>"));
|
||||
|
||||
// Assert
|
||||
var button = cut.Find("button");
|
||||
Assert.Contains("sb-icon-button--primary", button.ClassList);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SetsTypeAttribute()
|
||||
{
|
||||
// Arrange & Act
|
||||
var cut = Render<SbIconButton>(parameters => parameters
|
||||
.Add(p => p.Type, "submit")
|
||||
.AddChildContent("<span>★</span>"));
|
||||
|
||||
// Assert
|
||||
var button = cut.Find("button");
|
||||
Assert.Equal("submit", button.GetAttribute("type"));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvokesOnClickWhenClicked()
|
||||
{
|
||||
// Arrange
|
||||
var clicked = false;
|
||||
var cut = Render<SbIconButton>(parameters => parameters
|
||||
.Add(p => p.OnClick, _ => { clicked = true; return Task.CompletedTask; })
|
||||
.AddChildContent("<span>★</span>"));
|
||||
|
||||
// Act
|
||||
cut.Find("button").Click();
|
||||
|
||||
// Assert
|
||||
Assert.True(clicked);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DoesNotInvokeOnClickWhenDisabled()
|
||||
{
|
||||
// Arrange
|
||||
var clicked = false;
|
||||
var cut = Render<SbIconButton>(parameters => parameters
|
||||
.Add(p => p.Disabled, true)
|
||||
.Add(p => p.OnClick, _ => { clicked = true; return Task.CompletedTask; })
|
||||
.AddChildContent("<span>★</span>"));
|
||||
|
||||
// Act
|
||||
cut.Find("button").Click();
|
||||
|
||||
// Assert
|
||||
Assert.False(clicked);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DoesNotInvokeOnClickWhenLoading()
|
||||
{
|
||||
// Arrange
|
||||
var clicked = false;
|
||||
var cut = Render<SbIconButton>(parameters => parameters
|
||||
.Add(p => p.Loading, true)
|
||||
.Add(p => p.OnClick, _ => { clicked = true; return Task.CompletedTask; })
|
||||
.AddChildContent("<span>★</span>"));
|
||||
|
||||
// Act
|
||||
cut.Find("button").Click();
|
||||
|
||||
// Assert
|
||||
Assert.False(clicked);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,220 @@
|
||||
using Bunit;
|
||||
using Microsoft.AspNetCore.Components.Web;
|
||||
using SufiChain.SufiBlazor.Components;
|
||||
using SufiChain.SufiBlazor.Components.Actions;
|
||||
using Xunit;
|
||||
|
||||
namespace SufiChain.SufiBlazor.Tests.Components.Actions;
|
||||
|
||||
public class SbLinkTests : BunitContext
|
||||
{
|
||||
[Fact]
|
||||
public void RendersAsAnchor()
|
||||
{
|
||||
// Arrange & Act
|
||||
var cut = Render<SbLink>(parameters => parameters
|
||||
.Add(p => p.Href, "https://example.com")
|
||||
.AddChildContent("Example Link"));
|
||||
|
||||
// Assert
|
||||
var anchor = cut.Find("a");
|
||||
Assert.NotNull(anchor);
|
||||
Assert.Equal("https://example.com", anchor.GetAttribute("href"));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RendersChildContent()
|
||||
{
|
||||
// Arrange
|
||||
const string expectedContent = "Click here";
|
||||
|
||||
// Act
|
||||
var cut = Render<SbLink>(parameters => parameters
|
||||
.Add(p => p.Href, "#")
|
||||
.AddChildContent(expectedContent));
|
||||
|
||||
// Assert
|
||||
Assert.Contains(expectedContent, cut.Markup);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AppliesDefaultClasses()
|
||||
{
|
||||
// Arrange & Act
|
||||
var cut = Render<SbLink>(parameters => parameters
|
||||
.Add(p => p.Href, "#")
|
||||
.AddChildContent("Link"));
|
||||
|
||||
// Assert
|
||||
var anchor = cut.Find("a");
|
||||
Assert.Contains("sb-link", anchor.ClassList);
|
||||
Assert.Contains("sb-link--primary", anchor.ClassList);
|
||||
Assert.Contains("sb-link--underline-hover", anchor.ClassList);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SetsTargetAttribute()
|
||||
{
|
||||
// Arrange & Act
|
||||
var cut = Render<SbLink>(parameters => parameters
|
||||
.Add(p => p.Href, "https://example.com")
|
||||
.Add(p => p.Target, "_blank")
|
||||
.AddChildContent("External"));
|
||||
|
||||
// Assert
|
||||
var anchor = cut.Find("a");
|
||||
Assert.Equal("_blank", anchor.GetAttribute("target"));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SetsRelToNoopenerNoreferrerWhenTargetBlank()
|
||||
{
|
||||
// Arrange & Act
|
||||
var cut = Render<SbLink>(parameters => parameters
|
||||
.Add(p => p.Href, "https://example.com")
|
||||
.Add(p => p.Target, "_blank")
|
||||
.AddChildContent("External"));
|
||||
|
||||
// Assert
|
||||
var anchor = cut.Find("a");
|
||||
Assert.Equal("noopener noreferrer", anchor.GetAttribute("rel"));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void UsesExplicitRelWhenSet()
|
||||
{
|
||||
// Arrange & Act
|
||||
var cut = Render<SbLink>(parameters => parameters
|
||||
.Add(p => p.Href, "#")
|
||||
.Add(p => p.Rel, "nofollow")
|
||||
.AddChildContent("Link"));
|
||||
|
||||
// Assert
|
||||
var anchor = cut.Find("a");
|
||||
Assert.Equal("nofollow", anchor.GetAttribute("rel"));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AppliesDisabledState()
|
||||
{
|
||||
// Arrange & Act
|
||||
var cut = Render<SbLink>(parameters => parameters
|
||||
.Add(p => p.Href, "https://example.com")
|
||||
.Add(p => p.Disabled, true)
|
||||
.AddChildContent("Disabled"));
|
||||
|
||||
// Assert
|
||||
var anchor = cut.Find("a");
|
||||
Assert.Equal("true", anchor.GetAttribute("aria-disabled"));
|
||||
Assert.Equal("-1", anchor.GetAttribute("tabindex"));
|
||||
Assert.Null(anchor.GetAttribute("href"));
|
||||
Assert.Contains("sb-link--disabled", anchor.ClassList);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AppliesExternalState()
|
||||
{
|
||||
// Arrange & Act
|
||||
var cut = Render<SbLink>(parameters => parameters
|
||||
.Add(p => p.Href, "https://external.com")
|
||||
.Add(p => p.External, true)
|
||||
.AddChildContent("External Link"));
|
||||
|
||||
// Assert
|
||||
var anchor = cut.Find("a");
|
||||
Assert.Contains("sb-link--external", anchor.ClassList);
|
||||
Assert.NotNull(cut.Find(".sb-link__external-icon"));
|
||||
Assert.Equal("noopener noreferrer", anchor.GetAttribute("rel"));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AppliesCustomClass()
|
||||
{
|
||||
// Arrange & Act
|
||||
var cut = Render<SbLink>(parameters => parameters
|
||||
.Add(p => p.Href, "#")
|
||||
.Add(p => p.Class, "my-custom-class")
|
||||
.AddChildContent("Link"));
|
||||
|
||||
// Assert
|
||||
var anchor = cut.Find("a");
|
||||
Assert.Contains("my-custom-class", anchor.ClassList);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AppliesColor()
|
||||
{
|
||||
// Arrange & Act
|
||||
var cut = Render<SbLink>(parameters => parameters
|
||||
.Add(p => p.Href, "#")
|
||||
.Add(p => p.Color, SbColor.Secondary)
|
||||
.AddChildContent("Link"));
|
||||
|
||||
// Assert
|
||||
var anchor = cut.Find("a");
|
||||
Assert.Contains("sb-link--secondary", anchor.ClassList);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AppliesUnderlineAlways()
|
||||
{
|
||||
// Arrange & Act
|
||||
var cut = Render<SbLink>(parameters => parameters
|
||||
.Add(p => p.Href, "#")
|
||||
.Add(p => p.Underline, SbLinkUnderline.Always)
|
||||
.AddChildContent("Link"));
|
||||
|
||||
// Assert
|
||||
var anchor = cut.Find("a");
|
||||
Assert.Contains("sb-link--underline-always", anchor.ClassList);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AppliesUnderlineNone()
|
||||
{
|
||||
// Arrange & Act
|
||||
var cut = Render<SbLink>(parameters => parameters
|
||||
.Add(p => p.Href, "#")
|
||||
.Add(p => p.Underline, SbLinkUnderline.None)
|
||||
.AddChildContent("Link"));
|
||||
|
||||
// Assert
|
||||
var anchor = cut.Find("a");
|
||||
Assert.Contains("sb-link--underline-none", anchor.ClassList);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvokesOnClickWhenClicked()
|
||||
{
|
||||
// Arrange
|
||||
var clicked = false;
|
||||
var cut = Render<SbLink>(parameters => parameters
|
||||
.Add(p => p.Href, "#")
|
||||
.Add(p => p.OnClick, _ => { clicked = true; return Task.CompletedTask; })
|
||||
.AddChildContent("Link"));
|
||||
|
||||
// Act
|
||||
cut.Find("a").Click();
|
||||
|
||||
// Assert
|
||||
Assert.True(clicked);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DoesNotInvokeOnClickWhenDisabled()
|
||||
{
|
||||
// Arrange
|
||||
var clicked = false;
|
||||
var cut = Render<SbLink>(parameters => parameters
|
||||
.Add(p => p.Href, "https://example.com")
|
||||
.Add(p => p.Disabled, true)
|
||||
.Add(p => p.OnClick, _ => { clicked = true; return Task.CompletedTask; })
|
||||
.AddChildContent("Disabled"));
|
||||
|
||||
// Act
|
||||
cut.Find("a").Click();
|
||||
|
||||
// Assert
|
||||
Assert.False(clicked);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user