using System; using System.Collections.Generic; using MediaBrowser.Model.Entities; using Xunit; namespace Jellyfin.Model.Tests.Entities { public class ProviderIdsExtensionsTests { private const string ExampleImdbId = "tt0113375"; [Fact] public void HasProviderId_NullInstance_ThrowsArgumentNullException() { Assert.Throws(() => ProviderIdsExtensions.HasProviderId(null!, MetadataProvider.Imdb)); } [Fact] public void HasProviderId_NullProvider_False() { var nullProvider = new ProviderIdsExtensionsTestsObject { ProviderIds = null! }; Assert.False(nullProvider.HasProviderId(MetadataProvider.Imdb)); } [Fact] public void HasProviderId_NullName_ThrowsArgumentNullException() { Assert.Throws(() => ProviderIdsExtensionsTestsObject.Empty.HasProviderId(null!)); } [Fact] public void HasProviderId_NotFoundName_False() { Assert.False(ProviderIdsExtensionsTestsObject.Empty.HasProviderId(MetadataProvider.Imdb)); } [Fact] public void HasProviderId_FoundName_True() { var provider = new ProviderIdsExtensionsTestsObject(); provider.ProviderIds[MetadataProvider.Imdb.ToString()] = ExampleImdbId; Assert.True(provider.HasProviderId(MetadataProvider.Imdb)); } [Fact] public void HasProviderId_FoundNameEmptyValue_False() { var provider = new ProviderIdsExtensionsTestsObject(); provider.ProviderIds[MetadataProvider.Imdb.ToString()] = string.Empty; Assert.False(provider.HasProviderId(MetadataProvider.Imdb)); } [Fact] public void GetProviderId_NullInstance_ThrowsArgumentNullException() { Assert.Throws(() => ProviderIdsExtensions.GetProviderId(null!, MetadataProvider.Imdb)); } [Fact] public void GetProviderId_NullName_ThrowsArgumentNullException() { Assert.Throws(() => ProviderIdsExtensionsTestsObject.Empty.GetProviderId(null!)); } [Fact] public void GetProviderId_NotFoundName_Null() { Assert.Null(ProviderIdsExtensionsTestsObject.Empty.GetProviderId(MetadataProvider.Imdb)); } [Fact] public void GetProviderId_NullProvider_Null() { var nullProvider = new ProviderIdsExtensionsTestsObject { ProviderIds = null! }; Assert.Null(nullProvider.GetProviderId(MetadataProvider.Imdb)); } [Fact] public void TryGetProviderId_NotFoundName_False() { Assert.False(ProviderIdsExtensionsTestsObject.Empty.TryGetProviderId(MetadataProvider.Imdb, out _)); } [Fact] public void TryGetProviderId_NullProvider_False() { var nullProvider = new ProviderIdsExtensionsTestsObject { ProviderIds = null! }; Assert.False(nullProvider.TryGetProviderId(MetadataProvider.Imdb, out _)); } [Fact] public void GetProviderId_FoundName_Id() { var provider = new ProviderIdsExtensionsTestsObject(); provider.ProviderIds[MetadataProvider.Imdb.ToString()] = ExampleImdbId; Assert.Equal(ExampleImdbId, provider.GetProviderId(MetadataProvider.Imdb)); } [Fact] public void TryGetProviderId_FoundName_True() { var provider = new ProviderIdsExtensionsTestsObject(); provider.ProviderIds[MetadataProvider.Imdb.ToString()] = ExampleImdbId; Assert.True(provider.TryGetProviderId(MetadataProvider.Imdb, out var id)); Assert.Equal(ExampleImdbId, id); } [Fact] public void TryGetProviderId_FoundNameEmptyValue_False() { var provider = new ProviderIdsExtensionsTestsObject(); provider.ProviderIds[MetadataProvider.Imdb.ToString()] = string.Empty; Assert.False(provider.TryGetProviderId(MetadataProvider.Imdb, out var id)); Assert.Null(id); } [Fact] public void SetProviderId_NullInstance_ThrowsArgumentNullException() { Assert.Throws(() => ProviderIdsExtensions.SetProviderId(null!, MetadataProvider.Imdb, ExampleImdbId)); } [Fact] public void SetProviderId_Null_Remove() { var provider = new ProviderIdsExtensionsTestsObject(); provider.SetProviderId(MetadataProvider.Imdb, null!); Assert.Empty(provider.ProviderIds); } [Fact] public void SetProviderId_EmptyName_Remove() { var provider = new ProviderIdsExtensionsTestsObject(); provider.ProviderIds[MetadataProvider.Imdb.ToString()] = ExampleImdbId; provider.SetProviderId(MetadataProvider.Imdb, string.Empty); Assert.Empty(provider.ProviderIds); } [Fact] public void SetProviderId_NonEmptyId_Success() { var provider = new ProviderIdsExtensionsTestsObject(); provider.SetProviderId(MetadataProvider.Imdb, ExampleImdbId); Assert.Single(provider.ProviderIds); } [Fact] public void SetProviderId_NullProvider_Success() { var nullProvider = new ProviderIdsExtensionsTestsObject { ProviderIds = null! }; nullProvider.SetProviderId(MetadataProvider.Imdb, ExampleImdbId); Assert.Single(nullProvider.ProviderIds); } [Fact] public void SetProviderId_NullProviderAndEmptyName_Success() { var nullProvider = new ProviderIdsExtensionsTestsObject { ProviderIds = null! }; nullProvider.SetProviderId(MetadataProvider.Imdb, string.Empty); Assert.Null(nullProvider.ProviderIds); } private sealed class ProviderIdsExtensionsTestsObject : IHasProviderIds { public static readonly ProviderIdsExtensionsTestsObject Empty = new ProviderIdsExtensionsTestsObject(); public Dictionary ProviderIds { get; set; } = new Dictionary(); } } }