SubtitleResolverTests.cs 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. using System.Collections.Generic;
  2. using System.Threading;
  3. using System.Threading.Tasks;
  4. using Emby.Naming.Common;
  5. using MediaBrowser.Controller;
  6. using MediaBrowser.Controller.Configuration;
  7. using MediaBrowser.Controller.Entities;
  8. using MediaBrowser.Controller.Entities.Movies;
  9. using MediaBrowser.Controller.Library;
  10. using MediaBrowser.Controller.LiveTv;
  11. using MediaBrowser.Controller.MediaEncoding;
  12. using MediaBrowser.Model.Entities;
  13. using MediaBrowser.Model.Globalization;
  14. using MediaBrowser.Model.IO;
  15. using MediaBrowser.Providers.MediaInfo;
  16. using Moq;
  17. using Xunit;
  18. namespace Jellyfin.Providers.Tests.MediaInfo;
  19. public class SubtitleResolverTests
  20. {
  21. private readonly SubtitleResolver _subtitleResolver;
  22. public SubtitleResolverTests()
  23. {
  24. // prep BaseItem and Video for calls made that expect managers
  25. Video.LiveTvManager = Mock.Of<ILiveTvManager>();
  26. var applicationPaths = new Mock<IServerApplicationPaths>().Object;
  27. var serverConfig = new Mock<IServerConfigurationManager>();
  28. serverConfig.Setup(c => c.ApplicationPaths)
  29. .Returns(applicationPaths);
  30. BaseItem.ConfigurationManager = serverConfig.Object;
  31. // build resolver to test with
  32. var localizationManager = Mock.Of<ILocalizationManager>();
  33. var mediaEncoder = new Mock<IMediaEncoder>(MockBehavior.Strict);
  34. mediaEncoder.Setup(me => me.GetMediaInfo(It.IsAny<MediaInfoRequest>(), It.IsAny<CancellationToken>()))
  35. .Returns<MediaInfoRequest, CancellationToken>((_, _) => Task.FromResult(new MediaBrowser.Model.MediaInfo.MediaInfo
  36. {
  37. MediaStreams = new List<MediaStream>
  38. {
  39. new()
  40. }
  41. }));
  42. var fileSystem = new Mock<IFileSystem>(MockBehavior.Strict);
  43. fileSystem.Setup(fs => fs.Exists(It.IsRegex(MediaInfoResolverTests.VideoDirectoryRegex)))
  44. .Returns(true);
  45. fileSystem.Setup(fs => fs.Exists(It.IsRegex(MediaInfoResolverTests.MetadataDirectoryRegex)))
  46. .Returns(true);
  47. _subtitleResolver = new SubtitleResolver(localizationManager, mediaEncoder.Object, fileSystem.Object, new NamingOptions());
  48. }
  49. [Theory]
  50. [InlineData("My.Video.srt", false, true)]
  51. [InlineData("My.Video.mp3", false, false)]
  52. [InlineData("My.Video.srt", true, true)]
  53. [InlineData("My.Video.mp3", true, false)]
  54. public async void GetExternalStreams_MixedFilenames_PicksSubtitles(string file, bool metadataDirectory, bool matches)
  55. {
  56. BaseItem.MediaSourceManager = Mock.Of<IMediaSourceManager>();
  57. var video = new Movie
  58. {
  59. Path = MediaInfoResolverTests.VideoDirectoryPath + "/My.Video.mkv"
  60. };
  61. var directoryService = MediaInfoResolverTests.GetDirectoryServiceForExternalFile(file, metadataDirectory);
  62. var streams = await _subtitleResolver.GetExternalStreamsAsync(video, 0, directoryService, false, CancellationToken.None);
  63. if (matches)
  64. {
  65. Assert.Single(streams);
  66. var actual = streams[0];
  67. Assert.Equal(MediaStreamType.Subtitle, actual.Type);
  68. }
  69. else
  70. {
  71. Assert.Empty(streams);
  72. }
  73. }
  74. }