using ErsatzTV.Application.MediaSources; using ErsatzTV.Core.Api.MediaSources; using ErsatzTV.Core.Interfaces.Locking; using NSubstitute; using NUnit.Framework; using Shouldly; namespace ErsatzTV.Tests.Application.MediaSources; [TestFixture] public class GetCollectionsScanStatusHandlerTests { [Test] public async Task Handle_Should_Return_Empty_When_No_Family_Is_Locked() { var locker = Substitute.For(); locker.ArePlexCollectionsLocked().Returns(false); locker.AreJellyfinCollectionsLocked().Returns(false); locker.AreEmbyCollectionsLocked().Returns(false); var handler = new GetCollectionsScanStatusHandler(locker); List result = await handler.Handle(new GetCollectionsScanStatus(), CancellationToken.None); result.ShouldBeEmpty(); } [Test] public async Task Handle_Should_Return_Only_Locked_Families() { var locker = Substitute.For(); locker.ArePlexCollectionsLocked().Returns(true); locker.AreJellyfinCollectionsLocked().Returns(false); locker.AreEmbyCollectionsLocked().Returns(true); var handler = new GetCollectionsScanStatusHandler(locker); List result = await handler.Handle(new GetCollectionsScanStatus(), CancellationToken.None); result.Select(r => r.Family).ShouldBe(["plex", "emby"]); } [Test] public async Task Handle_Should_Return_All_Families_When_All_Locked() { var locker = Substitute.For(); locker.ArePlexCollectionsLocked().Returns(true); locker.AreJellyfinCollectionsLocked().Returns(true); locker.AreEmbyCollectionsLocked().Returns(true); var handler = new GetCollectionsScanStatusHandler(locker); List result = await handler.Handle(new GetCollectionsScanStatus(), CancellationToken.None); result.Select(r => r.Family).ShouldBe(["plex", "jellyfin", "emby"]); } }