Browse Source

Refine select-all helper and add coverage

pull/2738/head
Jon Crall 7 months ago
parent
commit
0fba694383
  1. 1
      ErsatzTV.Core.Tests/ErsatzTV.Core.Tests.csproj
  2. 38
      ErsatzTV.Core.Tests/Pages/MediaCardSelectionHelperTests.cs
  3. 20
      ErsatzTV/Pages/MediaCardSelectionHelper.cs
  4. 10
      ErsatzTV/Pages/MultiSelectBase.cs

1
ErsatzTV.Core.Tests/ErsatzTV.Core.Tests.csproj

@ -30,6 +30,7 @@ @@ -30,6 +30,7 @@
<ProjectReference Include="..\ErsatzTV.Core\ErsatzTV.Core.csproj" />
<ProjectReference Include="..\ErsatzTV.Infrastructure.Sqlite\ErsatzTV.Infrastructure.Sqlite.csproj" />
<ProjectReference Include="..\ErsatzTV.Infrastructure\ErsatzTV.Infrastructure.csproj" />
<ProjectReference Include="..\ErsatzTV\ErsatzTV.csproj" />
</ItemGroup>
</Project>

38
ErsatzTV.Core.Tests/Pages/MediaCardSelectionHelperTests.cs

@ -0,0 +1,38 @@ @@ -0,0 +1,38 @@
using ErsatzTV.Application.MediaCards;
using ErsatzTV.Pages;
using NUnit.Framework;
using Shouldly;
using System.Collections.Generic;
namespace ErsatzTV.Core.Tests.Pages;
[TestFixture]
public class MediaCardSelectionHelperTests
{
[Test]
public void Should_replace_existing_selection_and_return_last_card()
{
var existingCard = new MediaCardViewModel(1, "Existing", "Sub", "Existing", "", Core.Domain.MediaItemState.Normal, false);
var selected = new HashSet<MediaCardViewModel> { existingCard };
var first = new MediaCardViewModel(2, "First", "Sub", "First", "", Core.Domain.MediaItemState.Normal, false);
var second = new MediaCardViewModel(3, "Second", "Sub", "Second", "", Core.Domain.MediaItemState.Normal, false);
MediaCardViewModel last = MediaCardSelectionHelper.SelectAllPageItems(selected, new[] { first, second });
selected.ShouldBe(new[] { first, second }, ignoreOrder: true);
last.ShouldBe(second);
}
[Test]
public void Should_clear_selection_when_no_cards()
{
var existingCard = new MediaCardViewModel(1, "Existing", "Sub", "Existing", "", Core.Domain.MediaItemState.Normal, false);
var selected = new HashSet<MediaCardViewModel> { existingCard };
MediaCardViewModel last = MediaCardSelectionHelper.SelectAllPageItems(selected, []);
selected.ShouldBeEmpty();
last.ShouldBeNull();
}
}

20
ErsatzTV/Pages/MediaCardSelectionHelper.cs

@ -0,0 +1,20 @@ @@ -0,0 +1,20 @@
using ErsatzTV.Application.MediaCards;
using System.Collections.Generic;
using System.Linq;
namespace ErsatzTV.Pages;
public static class MediaCardSelectionHelper
{
public static MediaCardViewModel SelectAllPageItems(
ISet<MediaCardViewModel> selectedItems,
IEnumerable<MediaCardViewModel> cards)
{
List<MediaCardViewModel> cardList = (cards ?? Enumerable.Empty<MediaCardViewModel>()).ToList();
selectedItems.Clear();
selectedItems.UnionWith(cardList);
return cardList.LastOrDefault();
}
}

10
ErsatzTV/Pages/MultiSelectBase.cs

@ -8,6 +8,8 @@ using MediatR; @@ -8,6 +8,8 @@ using MediatR;
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Web;
using MudBlazor;
using System.Linq;
using static LanguageExt.Prelude;
namespace ErsatzTV.Pages;
@ -40,12 +42,8 @@ public class MultiSelectBase<T> : FragmentNavigationBase @@ -40,12 +42,8 @@ public class MultiSelectBase<T> : FragmentNavigationBase
protected void SelectAllPageItems(IEnumerable<MediaCardViewModel> cards)
{
SelectedItems.Clear();
foreach (MediaCardViewModel card in cards)
{
_recentlySelected = card;
SelectedItems.Add(card);
}
MediaCardViewModel lastSelected = MediaCardSelectionHelper.SelectAllPageItems(SelectedItems, cards);
_recentlySelected = Optional(lastSelected);
StateHasChanged();
}

Loading…
Cancel
Save