diff --git a/CodeBeam.MudBlazor.Extensions.UnitTests/Components/RenderTests.cs b/CodeBeam.MudBlazor.Extensions.UnitTests/Components/RenderTests.cs index 0f606ccd..cca05c05 100644 --- a/CodeBeam.MudBlazor.Extensions.UnitTests/Components/RenderTests.cs +++ b/CodeBeam.MudBlazor.Extensions.UnitTests/Components/RenderTests.cs @@ -1,86 +1,57 @@ using AwesomeAssertions; -using MudExtensions.Docs.Pages; +using Bunit; +using Microsoft.AspNetCore.Components; +using MudBlazor.Services; +using MudExtensions.Utilities; +using System.Reflection; -namespace MudExtensions.UnitTests.Components +namespace MudExtensions.UnitTests.Components; + +[TestFixture] +public class ComponentsRenderTests : BunitTest { - [TestFixture] - public class RenderTests : BunitTest + public static IEnumerable ComponentTypes() { - [Test] - public void ApiPageRenderTest() - { - var comp = Context.Render(); - comp.Markup.Should().NotBeNullOrEmpty(); - } - - [Test] - public void AnimatePageRenderTest() - { - var comp = Context.Render(); - comp.Markup.Should().NotBeNullOrEmpty(); - } - - [Test] - public void ComboBoxPageRenderTest() - { - var comp = Context.Render(); - comp.Markup.Should().NotBeNullOrEmpty(); - } - - [Test] - public void WheelDatePickerPageRenderTest() - { - var comp = Context.Render(); - comp.Markup.Should().NotBeNullOrEmpty(); - } - - [Test] - public void SpeedDialPageRenderTest() - { - var comp = Context.Render(); - comp.Markup.Should().NotBeNullOrEmpty(); - } - - [Test] - public void SplitterPageRenderTest() - { - var comp = Context.Render(); - comp.Markup.Should().NotBeNullOrEmpty(); - } - - [Test] - public void StepperPageRenderTest() - { - var comp = Context.Render(); - comp.Markup.Should().NotBeNullOrEmpty(); - } + var assembly = typeof(MudExtensions.MudColorProvider).Assembly; + + return assembly + .GetTypes() + .Where(t => + t.IsClass && + !t.IsAbstract && + !t.IsGenericTypeDefinition && + typeof(IComponent).IsAssignableFrom(t) && + t.IsPublic && + t.GetCustomAttribute() == null); + } - [Test] - public void ListExtendedPageRenderTest() - { - var comp = Context.Render(); - comp.Markup.Should().NotBeNullOrEmpty(); - } + [SetUp] + public void Setup() + { + Context.Services.AddMudServices(); + Context.JSInterop.Mode = JSRuntimeMode.Loose; + } - [Test] - public void SelectExtendedPageRenderTest() + [TestCaseSource(nameof(ComponentTypes))] + public void Component_Should_Render(Type componentType) + { + try { - var comp = Context.Render(); - comp.Markup.Should().NotBeNullOrEmpty(); - } + var cut = Context.Render(builder => + { + builder.OpenComponent(0, componentType); + builder.CloseComponent(); + }); - [Test] - public void TextFieldExtendedPageRenderTest() - { - var comp = Context.Render(); - comp.Markup.Should().NotBeNullOrEmpty(); + cut.Should().NotBeNull(); } - - [Test] - public void TransferListPageRenderTest() + catch (Exception ex) { - var comp = Context.Render(); - comp.Markup.Should().NotBeNullOrEmpty(); + Assert.Fail( + $"Component render FAILED: {componentType.FullName}\n" + + $"Exception: {ex.GetType().Name}\n" + + $"Message: {ex.Message}" + ); } } } diff --git a/CodeBeam.MudBlazor.Extensions.UnitTests/Docs/DocsPagesRenderTests.cs b/CodeBeam.MudBlazor.Extensions.UnitTests/Docs/DocsPagesRenderTests.cs new file mode 100644 index 00000000..6687e6fb --- /dev/null +++ b/CodeBeam.MudBlazor.Extensions.UnitTests/Docs/DocsPagesRenderTests.cs @@ -0,0 +1,36 @@ +using AwesomeAssertions; +using Bunit; +using Microsoft.AspNetCore.Components; +using MudExtensions.Docs.Pages; +using NUnit.Framework; +using System.Reflection; + +namespace MudExtensions.UnitTests.Components; + +[TestFixture] +public class DocsPagesRenderTests : BunitTest +{ + public static IEnumerable DocsPages() + { + return typeof(ApiPage).Assembly + .GetTypes() + .Where(t => + t.IsClass && + !t.IsAbstract && + typeof(IComponent).IsAssignableFrom(t) && + t.Namespace?.StartsWith("MudExtensions.Docs.Pages") == true && + t.GetCustomAttribute() != null); + } + + [TestCaseSource(nameof(DocsPages))] + public void All_Docs_Pages_Should_Render(Type pageType) + { + var cut = Context.Render(builder => + { + builder.OpenComponent(0, pageType); + builder.CloseComponent(); + }); + + cut.Markup.Should().NotBeNullOrWhiteSpace(); + } +} diff --git a/CodeBeam.MudBlazor.Extensions/Components/StepperExtended/MudStepExtended.razor.cs b/CodeBeam.MudBlazor.Extensions/Components/StepperExtended/MudStepExtended.razor.cs index 29b69bc1..a3275792 100644 --- a/CodeBeam.MudBlazor.Extensions/Components/StepperExtended/MudStepExtended.razor.cs +++ b/CodeBeam.MudBlazor.Extensions/Components/StepperExtended/MudStepExtended.razor.cs @@ -1,12 +1,14 @@ using Microsoft.AspNetCore.Components; using MudBlazor; using MudBlazor.Utilities; +using MudExtensions.Utilities; namespace MudExtensions { /// /// /// + [ExcludeFromSmokeTest] public partial class MudStepExtended : MudComponentBase, IDisposable { /// diff --git a/CodeBeam.MudBlazor.Extensions/Utilities/ExcludeFromSmokeTest.cs b/CodeBeam.MudBlazor.Extensions/Utilities/ExcludeFromSmokeTest.cs new file mode 100644 index 00000000..e488d3ec --- /dev/null +++ b/CodeBeam.MudBlazor.Extensions/Utilities/ExcludeFromSmokeTest.cs @@ -0,0 +1,16 @@ + +namespace MudExtensions.Utilities +{ + /// + /// Indicates that a class should be excluded from automated test discovery and execution. + /// + /// Apply this attribute to classes that should not be considered by test frameworks or test + /// runners. This can be useful for utility, base, or helper classes that are not intended to be executed as + /// tests. + /// + [AttributeUsage(AttributeTargets.Class)] + public sealed class ExcludeFromSmokeTest : Attribute + { + + } +}