diff --git a/SiemensIXBlazor.Tests/AGGrid/AGGridTests.cs b/SiemensIXBlazor.Tests/AGGrid/AGGridTests.cs new file mode 100644 index 0000000..fd8e435 --- /dev/null +++ b/SiemensIXBlazor.Tests/AGGrid/AGGridTests.cs @@ -0,0 +1,103 @@ +using System.Diagnostics; +using Bunit; +using Microsoft.AspNetCore.Components; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.JSInterop; +using Moq; +using SiemensIXBlazor.Components.AGGrid; + +namespace SiemensIXBlazor.Tests +{ + public class AGGridTests : TestContextBase + { + [Fact] + public void ComponentRendersWithoutCrashing() + { + // Arrange + var cut = RenderComponent(); + + // Assert + cut.MarkupMatches("
"); + } + + [Fact] + public void OnCellClickedPropertyIsSetCorrectly() + { + // Arrange + var eventTriggered = false; + var cut = RenderComponent(parameters => parameters.Add(p => p.OnCellClicked, EventCallback.Factory.Create(this, () => eventTriggered = true))); + + // Act + cut.Instance.OnCellClicked.InvokeAsync(true); + + //Assert + Assert.True(eventTriggered); + } + + [Fact] + public void IdPropertyIsSetCorrectly() + { + // Arrange + var cut = RenderComponent(parameters => parameters.Add(p => p.Id, "testId")); + + // Assert + Assert.Equal("testId", cut.Instance.Id); + } + + [Fact] + public async Task CreateGrid_ReturnsNull_WhenIdIsEmpty() + { + // Arrange + var grid = new AGGrid(); + + // Act + var result = await grid.CreateGrid(new GridOptions()); + + // Assert + Assert.Null(result); + } + + [Fact] + public async Task CreateGrid_ReturnsJSObjectReference_WhenIdIsNotEmpty() + { + // Arrange + var gridOptions = new GridOptions(); + Mock jsRuntimeMock = new(); + Mock jsObjectReferenceMock = new(); + + // Mock of module import for JSRuntime + jsRuntimeMock.Setup(x => x.InvokeAsync("agGridInterop.createGrid", It.IsAny())) + .Returns(new ValueTask(jsObjectReferenceMock.Object)); + Services.AddSingleton(jsRuntimeMock.Object); + + var cut = RenderComponent(parameters => parameters.Add(p => p.Id, "testId")); + + // Act + var result = await cut.Instance.CreateGrid(gridOptions); + + // Assert + Assert.NotNull(result); + jsRuntimeMock.Verify(x => x.InvokeAsync("agGridInterop.createGrid", It.IsAny()), Times.Once); + } + + [Fact] + public async Task GetSelectedRows_ReturnsObject() + { + // Arrange + var jsRuntimeMock = new Mock(); + Services.AddSingleton(jsRuntimeMock.Object); + var cut = RenderComponent(parameters => parameters.Add(p => p.Id, "testId")); + var jsObjectReferenceMock = new Mock(); + jsRuntimeMock.Setup(x => x.InvokeAsync("agGridInterop.getSelectedRows", It.IsAny())) + .ReturnsAsync(new object()); + + + // Act + var result = await cut.Instance.GetSelectedRows(jsObjectReferenceMock.Object); + + // Assert + Assert.NotNull(result); + jsRuntimeMock.Verify(x => x.InvokeAsync("agGridInterop.getSelectedRows", It.IsAny()), Times.Once); + } + } +} \ No newline at end of file diff --git a/SiemensIXBlazor.Tests/About/AboutMenuItemTest.cs b/SiemensIXBlazor.Tests/About/AboutMenuItemTest.cs index 4b53b9d..51db3e9 100644 --- a/SiemensIXBlazor.Tests/About/AboutMenuItemTest.cs +++ b/SiemensIXBlazor.Tests/About/AboutMenuItemTest.cs @@ -1,29 +1,11 @@ using Bunit; using Microsoft.AspNetCore.Components; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.JSInterop; -using Moq; using SiemensIXBlazor.Components.About; namespace SiemensIXBlazor.Tests.About { - public class AboutMenuItemTest: TestContext + public class AboutMenuItemTest: TestContextBase { - private readonly Mock _jsRuntimeMock; - private readonly Mock _jsObjectReferenceMock; - - public AboutMenuItemTest() - { - _jsRuntimeMock = new Mock(); - _jsObjectReferenceMock = new Mock(); - - // Mock of module import for JSRuntime - _jsRuntimeMock.Setup(x => x.InvokeAsync("import", It.IsAny())) - .Returns(new ValueTask(_jsObjectReferenceMock.Object)); - Services.AddSingleton(_jsRuntimeMock.Object); - } - - [Fact] public void ComponentRendersWithoutCrashing() { diff --git a/SiemensIXBlazor.Tests/About/AboutMenuNewsTest.cs b/SiemensIXBlazor.Tests/About/AboutMenuNewsTest.cs index 258e867..81ce005 100644 --- a/SiemensIXBlazor.Tests/About/AboutMenuNewsTest.cs +++ b/SiemensIXBlazor.Tests/About/AboutMenuNewsTest.cs @@ -1,30 +1,12 @@ using Bunit; using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components.Web; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.JSInterop; -using Moq; using SiemensIXBlazor.Components.About; namespace SiemensIXBlazor.Tests.About { - public class AboutMenuNewsTest: TestContext + public class AboutMenuNewsTest: TestContextBase { - private readonly Mock _jsRuntimeMock; - private readonly Mock _jsObjectReferenceMock; - - public AboutMenuNewsTest() - { - _jsRuntimeMock = new Mock(); - _jsObjectReferenceMock = new Mock(); - - // Mock of module import for JSRuntime - _jsRuntimeMock.Setup(x => x.InvokeAsync("import", It.IsAny())) - .Returns(new ValueTask(_jsObjectReferenceMock.Object)); - Services.AddSingleton(_jsRuntimeMock.Object); - } - - [Fact] public void ComponentRendersWithoutCrashing() { diff --git a/SiemensIXBlazor.Tests/About/AboutMenuTest.cs b/SiemensIXBlazor.Tests/About/AboutMenuTest.cs index c016417..e7209fa 100644 --- a/SiemensIXBlazor.Tests/About/AboutMenuTest.cs +++ b/SiemensIXBlazor.Tests/About/AboutMenuTest.cs @@ -1,30 +1,12 @@ using Bunit; using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components.Web; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.JSInterop; -using Moq; using SiemensIXBlazor.Components.About; namespace SiemensIXBlazor.Tests.About { - public class AboutMenuTest: TestContext + public class AboutMenuTest: TestContextBase { - private readonly Mock _jsRuntimeMock; - private readonly Mock _jsObjectReferenceMock; - - public AboutMenuTest() - { - _jsRuntimeMock = new Mock(); - _jsObjectReferenceMock = new Mock(); - - // Mock of module import for JSRuntime - _jsRuntimeMock.Setup(x => x.InvokeAsync("import", It.IsAny())) - .Returns(new ValueTask(_jsObjectReferenceMock.Object)); - Services.AddSingleton(_jsRuntimeMock.Object); - } - - [Fact] public void ComponentRendersWithoutCrashing() { diff --git a/SiemensIXBlazor.Tests/ActionCardTests.cs b/SiemensIXBlazor.Tests/ActionCardTests.cs new file mode 100644 index 0000000..3f2edf6 --- /dev/null +++ b/SiemensIXBlazor.Tests/ActionCardTests.cs @@ -0,0 +1,69 @@ +using Bunit; +using SiemensIXBlazor.Components; +using SiemensIXBlazor.Enums.PushCard; + +namespace SiemensIXBlazor.Tests +{ + public class ActionCardTests: TestContextBase + { + [Fact] + public void ComponentRendersWithoutCrashing() + { + // Arrange + var cut = RenderComponent(); + + // Assert + cut.MarkupMatches(""); + } + + [Fact] + public void IconPropertyIsSetCorrectly() + { + // Arrange + var cut = RenderComponent(parameters => parameters.Add(p => p.Icon, "testIcon")); + + // Assert + Assert.Equal("testIcon", cut.Instance.Icon); + } + + [Fact] + public void HeadingPropertyIsSetCorrectly() + { + // Arrange + var cut = RenderComponent(parameters => parameters.Add(p => p.Heading, "testHeading")); + + // Assert + Assert.Equal("testHeading", cut.Instance.Heading); + } + + [Fact] + public void SubHeadingPropertyIsSetCorrectly() + { + // Arrange + var cut = RenderComponent(parameters => parameters.Add(p => p.SubHeading, "testSubHeading")); + + // Assert + Assert.Equal("testSubHeading", cut.Instance.SubHeading); + } + + [Fact] + public void SelectedPropertyIsSetCorrectly() + { + // Arrange + var cut = RenderComponent(parameters => parameters.Add(p => p.Selected, true)); + + // Assert + Assert.True(cut.Instance.Selected); + } + + [Fact] + public void VariantPropertyIsSetCorrectly() + { + // Arrange + var cut = RenderComponent(parameters => parameters.Add(p => p.Variant, PushCardVariant.insight)); + + // Assert + Assert.Equal(PushCardVariant.insight, cut.Instance.Variant); + } + } +} \ No newline at end of file diff --git a/SiemensIXBlazor.Tests/ApplicationHeaderTests.cs b/SiemensIXBlazor.Tests/ApplicationHeaderTests.cs new file mode 100644 index 0000000..a147014 --- /dev/null +++ b/SiemensIXBlazor.Tests/ApplicationHeaderTests.cs @@ -0,0 +1,37 @@ +using Bunit; +using SiemensIXBlazor.Components; + +namespace SiemensIXBlazor.Tests +{ + public class ApplicationHeaderTests : TestContextBase + { + [Fact] + public void ApplicationHeaderRendersWithoutCrashing() + { + // Arrange + var cut = RenderComponent(parameters => { + parameters.Add(p => p.Name, "testName"); + }); + + // Assert + cut.MarkupMatches(""); + } + + [Fact] + public void ApplicationHeaderRendersChildContent() + { + // Arrange + var expectedContent = "Expected content"; + + // Act + var cut = RenderComponent(parameters => parameters + .Add(p => p.ChildContent, builder => + { + builder.AddContent(0, expectedContent); + })); + + // Assert + Assert.Contains(expectedContent, cut.Markup); + } + } +} \ No newline at end of file diff --git a/SiemensIXBlazor.Tests/ApplicationTests.cs b/SiemensIXBlazor.Tests/ApplicationTests.cs new file mode 100644 index 0000000..4abd085 --- /dev/null +++ b/SiemensIXBlazor.Tests/ApplicationTests.cs @@ -0,0 +1,40 @@ +using Bunit; +using SiemensIXBlazor.Components; +using SiemensIXBlazor.Objects.Application; + +namespace SiemensIXBlazor.Tests +{ + public class ApplicationTests : TestContextBase + { + [Fact] + public void ApplicationRendersWithoutCrashing() + { + // Arrange + var cut = RenderComponent(parameters => { + parameters.Add(p => p.Id, "testId"); + parameters.Add(p => p.Breakpoints, ["sm", "md", "lg"]); + parameters.Add(p => p.ForceBreakpoint, Enums.ForceBreakpoint.lg); + parameters.Add(p => p.Theme, "testTheme"); + parameters.Add(p => p.ThemeSystemAppearance, true); + }); + + // Assert + cut.MarkupMatches(""); + } + + [Fact] + public void AppSwitchConfig_SetsValueAndCallsInitialParameter() + { + // Arrange + var cut = RenderComponent(); + var config = new AppSwitchConfig(); + + // Act + cut.Instance.AppSwitchConfig = config; + + // Assert + Assert.Equal(config, cut.Instance.AppSwitchConfig); + } + + } +} \ No newline at end of file diff --git a/SiemensIXBlazor.Tests/AvatarTests.cs b/SiemensIXBlazor.Tests/AvatarTests.cs new file mode 100644 index 0000000..3c3be0c --- /dev/null +++ b/SiemensIXBlazor.Tests/AvatarTests.cs @@ -0,0 +1,21 @@ +using Bunit; +using SiemensIXBlazor.Components.Avatar; + +namespace SiemensIXBlazor.Tests +{ + public class AvatarTests : TestContextBase + { + [Fact] + public void AvatarRendersWithoutCrashing() + { + // Arrange + var cut = RenderComponent(parameters => { + parameters.Add(p => p.Image, "testImage"); + parameters.Add(p => p.Initials, "testInitials"); + }); + + // Assert + cut.MarkupMatches(""); + } + } +} \ No newline at end of file diff --git a/SiemensIXBlazor.Tests/BasicNavigationTests.cs b/SiemensIXBlazor.Tests/BasicNavigationTests.cs new file mode 100644 index 0000000..b508922 --- /dev/null +++ b/SiemensIXBlazor.Tests/BasicNavigationTests.cs @@ -0,0 +1,40 @@ +using Bunit; +using SiemensIXBlazor.Components.BasicNavigation; +using SiemensIXBlazor.Enums.BasicNavigation; + +namespace SiemensIXBlazor.Tests +{ + public class BasicNavigationTests : TestContextBase + { + [Fact] + public void BasicNavigationRendersWithoutCrashing() + { + // Arrange + var cut = RenderComponent(parameters => { + parameters.Add(p => p.ApplicationName, "testApplicationName"); + parameters.Add(p => p.HideHeader, true); + parameters.Add(p => p.ForceBreakpoint, Breakpoint.Md); + }); + + // Assert + cut.MarkupMatches(""); + } + + [Fact] + public void BasicNavigationRendersChildContent() + { + // Arrange + var expectedContent = "Expected content"; + + // Act + var cut = RenderComponent(parameters => parameters + .Add(p => p.ChildContent, builder => + { + builder.AddContent(0, expectedContent); + })); + + // Assert + Assert.Contains(expectedContent, cut.Markup); + } + } +} \ No newline at end of file diff --git a/SiemensIXBlazor.Tests/BlindTest.cs b/SiemensIXBlazor.Tests/BlindTests.cs similarity index 69% rename from SiemensIXBlazor.Tests/BlindTest.cs rename to SiemensIXBlazor.Tests/BlindTests.cs index dd8dbef..b3410cd 100644 --- a/SiemensIXBlazor.Tests/BlindTest.cs +++ b/SiemensIXBlazor.Tests/BlindTests.cs @@ -2,28 +2,11 @@ using SiemensIXBlazor.Enums.Blind; using Bunit; using Microsoft.AspNetCore.Components; -using Microsoft.JSInterop; -using Moq; -using Microsoft.Extensions.DependencyInjection; namespace SiemensIXBlazor.Tests { - public class BlindTest: TestContext + public class BlindTests: TestContextBase { - private readonly Mock _jsRuntimeMock; - private readonly Mock _jsObjectReferenceMock; - - public BlindTest() - { - _jsRuntimeMock = new Mock(); - _jsObjectReferenceMock = new Mock(); - - // Mock of module import for JSRuntime - _jsRuntimeMock.Setup(x => x.InvokeAsync("import", It.IsAny())) - .Returns(new ValueTask(_jsObjectReferenceMock.Object)); - Services.AddSingleton(_jsRuntimeMock.Object); - } - [Fact] public void ComponentRendersWithoutCrashing() { @@ -79,8 +62,6 @@ public void CollapsedChangedEventTriggeredCorrectly() { // Arrange var eventTriggered = false; - _jsRuntimeMock.Setup(x => x.InvokeAsync(It.IsAny(), It.IsAny())) - .Returns(new ValueTask(true)); var cut = RenderComponent(parameters => parameters.Add(p => p.CollapsedChangedEvent, EventCallback.Factory.Create(this, () => eventTriggered = true))); // Act diff --git a/SiemensIXBlazor.Tests/Breadcrumb/BreadcrumbItemTests.cs b/SiemensIXBlazor.Tests/Breadcrumb/BreadcrumbItemTests.cs new file mode 100644 index 0000000..1f69087 --- /dev/null +++ b/SiemensIXBlazor.Tests/Breadcrumb/BreadcrumbItemTests.cs @@ -0,0 +1,18 @@ +using Bunit; +using SiemensIXBlazor.Components; + +namespace SiemensIXBlazor.Tests +{ + public class BreadcrumbItemTests: TestContextBase + { + [Fact] + public void BreadcrumbItemRendersWithoutCrashing() + { + // Arrange + var cut = RenderComponent(); + + // Assert + cut.MarkupMatches(""); + } + } +} \ No newline at end of file diff --git a/SiemensIXBlazor.Tests/Breadcrumb/BreadcrumbTests.cs b/SiemensIXBlazor.Tests/Breadcrumb/BreadcrumbTests.cs new file mode 100644 index 0000000..409f400 --- /dev/null +++ b/SiemensIXBlazor.Tests/Breadcrumb/BreadcrumbTests.cs @@ -0,0 +1,70 @@ +namespace SiemensIXBlazor.Tests +{ + using Bunit; + using Microsoft.AspNetCore.Components; + using SiemensIXBlazor.Components; + + public class BreadcrumbTests : TestContextBase + { + [Fact] + public void BreadcrumbRendersWithoutCrashing() + { + // Arrange + var cut = RenderComponent(parameters => { + parameters.Add(p => p.Id, "testId"); + parameters.Add(p => p.Ghost, true); + parameters.Add(p => p.AriaLabelPreviousButton, "previous"); + parameters.Add(p => p.NextItems, ["Data"]); + parameters.Add(p => p.VisibleItemCount, 9); + }); + + // Assert + cut.MarkupMatches(""); + } + + [Fact] + public void BreadcrumbRendersChildContent() + { + // Arrange + var expectedContent = "Expected content"; + + // Act + var cut = RenderComponent(parameters => parameters + .Add(p => p.ChildContent, builder => + { + builder.AddContent(0, expectedContent); + })); + + // Assert + Assert.Contains(expectedContent, cut.Markup); + } + + [Fact] + public void ItemClickedEventTriggeredCorrectly() + { + // Arrange + var eventTriggered = false; + var cut = RenderComponent(parameters => parameters.Add(p => p.ItemClicked, EventCallback.Factory.Create(this, () => eventTriggered = true))); + + // Act + cut.Instance.ItemClicked.InvokeAsync("test"); + + // Assert + Assert.True(eventTriggered); + } + + [Fact] + public void NextItemClickedEventTriggeredCorrectly() + { + // Arrange + var eventTriggered = false; + var cut = RenderComponent(parameters => parameters.Add(p => p.NextItemClicked, EventCallback.Factory.Create(this, () => eventTriggered = true))); + + // Act + cut.Instance.NextItemClicked.InvokeAsync("test"); + + // Assert + Assert.True(eventTriggered); + } + } +} \ No newline at end of file diff --git a/SiemensIXBlazor.Tests/Button/ButtonTests.cs b/SiemensIXBlazor.Tests/Button/ButtonTests.cs new file mode 100644 index 0000000..f7409a7 --- /dev/null +++ b/SiemensIXBlazor.Tests/Button/ButtonTests.cs @@ -0,0 +1,47 @@ +using Bunit; +using Microsoft.AspNetCore.Components; +using SiemensIXBlazor.Components; +using SiemensIXBlazor.Enums.Button; + +namespace SiemensIXBlazor.Tests +{ + public class ButtonTests: TestContextBase + { + [Fact] + public void ButtonRendersWithoutCrashing() + { + // Arrange + var cut = RenderComponent