Skip to content

Commit

Permalink
Merge pull request #61 from emregokrem/master
Browse files Browse the repository at this point in the history
Adding component unit tests [DateDropdown-MapNavigation]
  • Loading branch information
yagizhanNY committed May 28, 2024
2 parents e28ff48 + 75c2499 commit 3d276a8
Show file tree
Hide file tree
Showing 30 changed files with 1,115 additions and 6 deletions.
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

0 comments on commit 3d276a8

Please sign in to comment.