Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weโ€™ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adding component unit tests [DateDropdown-MapNavigation] #60

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
102 changes: 102 additions & 0 deletions SiemensIXBlazor.Tests/DateDropdownTest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
๏ปฟ// -----------------------------------------------------------------------
// SPDX-FileCopyrightText: 2024 Siemens AG
//
// SPDX-License-Identifier: MIT
//
// This source code is licensed under the MIT license found in the
// LICENSE file in the root directory of this source tree.
// -----------------------------------------------------------------------

using System.Text.Json;
using Bunit;
using Microsoft.AspNetCore.Components;
using SiemensIXBlazor.Components;
using SiemensIXBlazor.Objects.DateDropdown;

namespace SiemensIXBlazor.Tests;

public class DateDropdownTest : TestContextBase
{
[Fact]
public void ComponentRendersWithoutCrashing()
{
// Arrange
var cut = RenderComponent<DateDropdown>();

// Assert
cut.MarkupMatches(@"
<ix-date-dropdown id="""" custom-range-allowed="""" date-range-id=""custom"" format=""yyyy/LL/dd"" i18n-custom-item=""Custom..."" i18n-done=""Done"" i18n-no-range=""No range set"" range=""""></ix-date-dropdown>
");
}

[Fact]
public void AllPropertiesAreSetCorrectly()
{
// Arrange
var dateDropdownOptions = new DateDropdownOption[] { new() { Id = "test", Label = "Test" } };
var dateRangeChangeEvent = new EventCallbackFactory().Create<DateDropdownResponse>(this, response =>
{
/* your action here */
});

var cut = RenderComponent<DateDropdown>(parameters => parameters
.Add(p => p.Id, "testId")
.Add(p => p.CustomRangeAllowed, true)
.Add(p => p.DateRangeId, "custom")
.Add(p => p.DateRangeOptions, dateDropdownOptions)
.Add(p => p.Format, "yyyy/LL/dd")
.Add(p => p.From, "2022/01/01")
.Add(p => p.I18NCustomItem, "Custom...")
.Add(p => p.I18NDone, "Done")
.Add(p => p.I18NNoRange, "No range set")
.Add(p => p.MaxDate, "2022/12/31")
.Add(p => p.MinDate, "2022/01/01")
.Add(p => p.Range, true)
.Add(p => p.To, "2022/12/31")
.Add(p => p.DateRangeChangeEvent, dateRangeChangeEvent));

// Assert
cut.MarkupMatches(@"
<ix-date-dropdown id=""testId"" custom-range-allowed="""" date-range-id=""custom"" format=""yyyy/LL/dd"" from=""2022/01/01"" i18n-custom-item=""Custom..."" i18n-done=""Done"" i18n-no-range=""No range set"" max-date=""2022/12/31"" min-date=""2022/01/01"" range="""" to=""2022/12/31""></ix-date-dropdown>
");
}

[Fact]
public void DateRangeChangeEventIsTriggeredCorrectly()
{
// Arrange
var dateDropdownOptions = new DateDropdownOption[]
{
new() { Id = "test", Label = "Test", From = "2022/01/01", To = "2022/12/31" },
new() { Id = "test2", Label = "Test2", From = "2023/01/01", To = "2023/12/31" }
};
var dateRangeChangeEventTriggered = false;
var dateRangeChangeEvent =
new EventCallbackFactory().Create<DateDropdownResponse>(this,
response => { dateRangeChangeEventTriggered = true; });

var cut = RenderComponent<DateDropdown>(parameters => parameters
.Add(p => p.Id, "testId")
.Add(p => p.CustomRangeAllowed, true)
.Add(p => p.DateRangeId, "test1")
.Add(p => p.DateRangeOptions, dateDropdownOptions)
.Add(p => p.Format, "yyyy/LL/dd")
.Add(p => p.From, "2022/01/01")
.Add(p => p.I18NCustomItem, "Custom...")
.Add(p => p.I18NDone, "Done")
.Add(p => p.I18NNoRange, "No range set")
.Add(p => p.MaxDate, "2022/12/31")
.Add(p => p.MinDate, "2022/01/01")
.Add(p => p.Range, true)
.Add(p => p.To, "2022/12/31")
.Add(p => p.DateRangeChangeEvent, dateRangeChangeEvent));

// Act
var json = JsonSerializer.Serialize(new DateDropdownResponse { Id = "test2" });
var parsedJson = JsonDocument.Parse(json).RootElement;
cut.Instance.DateRangeChange(parsedJson);

// Assert
Assert.True(dateRangeChangeEventTriggered);
}
}
82 changes: 82 additions & 0 deletions SiemensIXBlazor.Tests/DatePickerTest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
๏ปฟ// -----------------------------------------------------------------------
// SPDX-FileCopyrightText: 2024 Siemens AG
//
// SPDX-License-Identifier: MIT
//
// This source code is licensed under the MIT license found in the
// LICENSE file in the root directory of this source tree.
// -----------------------------------------------------------------------

using System.Text.Json;
using Bunit;
using Microsoft.AspNetCore.Components;
using SiemensIXBlazor.Components;
using SiemensIXBlazor.Enums.DatePicker;
using SiemensIXBlazor.Objects;

namespace SiemensIXBlazor.Tests;

public class DatePickerTest : TestContextBase
{
[Fact]
public void ComponentRendersAndPropertiesAreSetCorrectly()
{
// Arrange
var cut = RenderComponent<DatePicker>(parameters => parameters
.Add(p => p.Id, "testId")
.Add(p => p.Corners, DatePickerCorners.Rounded)
.Add(p => p.EventDelimiter, " - ")
.Add(p => p.Format, "yyyy/MM/dd")
.Add(p => p.From, "2022/01/01")
.Add(p => p.MaxDate, "2022/12/31")
.Add(p => p.MinDate, "2022/01/01")
.Add(p => p.Range, true)
.Add(p => p.I18nDone, "Done")
.Add(p => p.Locale, "en-US")
.Add(p => p.WeekStartIndex, 0)
.Add(p => p.To, "2022/12/31"));

// Assert
cut.MarkupMatches($@"
<ix-date-picker id=""testId"" from=""2022/01/01"" to=""2022/12/31"" corners=""rounded"" format=""yyyy/MM/dd"" max-date=""2022/12/31"" min-date=""2022/01/01"" range="""" locale=""en-US"" i18n-done=""Done"" week-start-index=""0""></ix-date-picker>");
}

[Fact]
public void EventCallbacksAreTriggered()
{
// Arrange
var dateRangeChangeInvoked = false;
var dateChangeInvoked = false;
var dateSelectInvoked = false;

var dateRangeChangeEvent =
new EventCallbackFactory().Create<DatePickerResponse>(this,
response => { dateRangeChangeInvoked = true; });

var dateChangeEvent =
new EventCallbackFactory().Create<DatePickerResponse>(this,
response => { dateChangeInvoked = true; });

var dateSelectEvent =
new EventCallbackFactory().Create<DatePickerResponse>(this,
response => { dateSelectInvoked = true; });

var cut = RenderComponent<DatePicker>(parameters => parameters
.Add(p => p.Id, "testId")
.Add(p => p.DateRangeChangeEvent!, dateRangeChangeEvent)
.Add(p => p.DateChangeEvent!, dateChangeEvent)
.Add(p => p.DateSelectEvent, dateSelectEvent));

// Act
var json = JsonSerializer.Serialize(new DatePickerResponse { From = "2024/01/01", To = "2024/12/31\"" });
var parsedJson = JsonDocument.Parse(json).RootElement;
cut.Instance.DateRangeChange(parsedJson);
cut.Instance.DateChange(parsedJson);
cut.Instance.DateSelect(parsedJson);

// Assert
Assert.True(dateRangeChangeInvoked);
Assert.True(dateChangeInvoked);
Assert.True(dateSelectInvoked);
}
}
77 changes: 77 additions & 0 deletions SiemensIXBlazor.Tests/DateTimePickerTest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
๏ปฟ// -----------------------------------------------------------------------
// SPDX-FileCopyrightText: 2024 Siemens AG
//
// SPDX-License-Identifier: MIT
//
// This source code is licensed under the MIT license found in the
// LICENSE file in the root directory of this source tree.
// -----------------------------------------------------------------------

using System.Text.Json;
using Bunit;
using Microsoft.AspNetCore.Components;
using SiemensIXBlazor.Components;
using SiemensIXBlazor.Objects;

namespace SiemensIXBlazor.Tests;

public class DateTimePickerTest : TestContextBase
{
[Fact]
public void ComponentRendersWithCorrectProperties()
{
// Arrange
var cut = RenderComponent<DateTimePicker>(parameters => parameters
.Add(p => p.Id, "testId")
.Add(p => p.DateFormat, "yyyy/MM/dd")
.Add(p => p.EventDelimiter, " - ")
.Add(p => p.From, DateTime.Now.ToString("yyyy/MM/dd"))
.Add(p => p.MaxDate, "2022/12/31")
.Add(p => p.MinDate, "2022/01/01")
.Add(p => p.Range, true)
.Add(p => p.ShowHour, false)
.Add(p => p.ShowMinutes, false)
.Add(p => p.ShowSeconds, false)
.Add(p => p.ShowTimeReference, "")
.Add(p => p.TextSelectDate, "Done")
.Add(p => p.Time, "12:00:00")
.Add(p => p.TimeFormat, "HH:mm:ss")
.Add(p => p.TimeReference, "12:00:00")
.Add(p => p.To, "2022/12/31"));

// Assert
cut.MarkupMatches("<ix-datetime-picker id=\"testId\" date-format=\"yyyy/MM/dd\" event-delimiter=\" - \" from=\"2024/05/28\" max-date=\"2022/12/31\" min-date=\"2022/01/01\" range=\"\" show-time-reference=\"\" text-select-date=\"Done\" time=\"12:00:00\" time-format=\"HH:mm:ss\" time-reference=\"12:00:00\" to=\"2022/12/31\"></ix-datetime-picker>");
}

[Fact]
public void EventCallbacksAreTriggeredCorrectly()
{
// Arrange
bool isDateChangeEventTriggered = false;
bool isDateSelectEventTriggered = false;
bool isTimeChangeEventTriggered = false;
bool isDoneEventTriggered = false;

var cut = RenderComponent<DateTimePicker>(parameters => parameters
.Add(p => p.DateChangeEvent, EventCallback.Factory.Create<string>(this, (date) => isDateChangeEventTriggered = true))
.Add(p => p.DateSelectEvent, EventCallback.Factory.Create<DateTimePickerResponse>(this, (response) => isDateSelectEventTriggered = true))
.Add(p => p.TimeChangeEvent, EventCallback.Factory.Create<string>(this, (time) => isTimeChangeEventTriggered = true))
.Add(p => p.DoneEvent, EventCallback.Factory.Create<string>(this, (done) => isDoneEventTriggered = true)));

// Act
cut.Instance.DateChange("2022/12/31");
cut.Instance.TimeChange("12:00:00");

var json = JsonSerializer.Serialize(new DateTimePickerResponse { Time = "2024/01/01" });
var parsedJson = JsonDocument.Parse(json).RootElement;
cut.Instance.DateSelect(parsedJson);

cut.Instance.Done("2022/12/31");

// Assert
Assert.True(isDateChangeEventTriggered);
Assert.True(isTimeChangeEventTriggered);
Assert.True(isDoneEventTriggered);
Assert.True(isDateSelectEventTriggered);
}
}
28 changes: 28 additions & 0 deletions SiemensIXBlazor.Tests/DividerTest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
๏ปฟ// -----------------------------------------------------------------------
// SPDX-FileCopyrightText: 2024 Siemens AG
//
// SPDX-License-Identifier: MIT
//
// This source code is licensed under the MIT license found in the
// LICENSE file in the root directory of this source tree.
// -----------------------------------------------------------------------

using Bunit;
using SiemensIXBlazor.Components;

namespace SiemensIXBlazor.Tests;

public class DividerTest : TestContextBase
{
[Fact]
public void ComponentRendersWithCorrectProperties()
{
// Arrange
var cut = RenderComponent<Divider>(parameters => parameters
.Add(p => p.Class, "testClass")
.Add(p => p.Style, "testStyle"));

// Assert
cut.MarkupMatches("<ix-divider class=\"testClass\" style=\"testStyle\"></ix-divider>");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

namespace SiemensIXBlazor.Tests
{
public class DrawerTests : TestContextBase
public class DrawerTest : TestContextBase
{
[Fact]
public void DrawerRendersCorrectly()
Expand Down
46 changes: 46 additions & 0 deletions SiemensIXBlazor.Tests/Dropdown/DropdownItemTest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
๏ปฟ// -----------------------------------------------------------------------
// SPDX-FileCopyrightText: 2024 Siemens AG
//
// SPDX-License-Identifier: MIT
//
// This source code is licensed under the MIT license found in the
// LICENSE file in the root directory of this source tree.
// -----------------------------------------------------------------------

using Bunit;
using Microsoft.AspNetCore.Components;
using SiemensIXBlazor.Components;

namespace SiemensIXBlazor.Tests.Dropdown;

public class DropdownItemTest : TestContextBase
{
[Fact]
public void ComponentRendersWithCorrectProperties()
{
// Arrange
var cut = RenderComponent<DropdownItem>(parameters => parameters
.Add(p => p.Label, "testLabel")
.Add(p => p.Value, "testValue"));

// Assert
cut.MarkupMatches("<ix-dropdown-item label=\"testLabel\" value=\"testValue\"></ix-dropdown-item>");
}

[Fact]
public async Task EventCallbacksAreTriggeredCorrectly()
{
// Arrange
var isOnClickEventTriggered = false;

var cut = RenderComponent<DropdownItem>(parameters => parameters
.Add(p => p.OnClickEvent,
EventCallback.Factory.Create<string>(this, label => isOnClickEventTriggered = true)));

// Act
await cut.Instance.OnClickEvent.InvokeAsync("testLabel");

// Assert
Assert.True(isOnClickEventTriggered);
}
}
Loading
Loading