using System.Text; using Bugsnag; using ErsatzTV.Core; using ErsatzTV.Scanner.Core.Metadata.Nfo; using FluentAssertions; using Microsoft.Extensions.Logging.Abstractions; using Microsoft.IO; using NSubstitute; using NUnit.Framework; namespace ErsatzTV.Scanner.Tests.Core.Metadata.Nfo; [TestFixture] public class MusicVideoNfoReaderTests { [SetUp] public void SetUp() => _musicVideoNfoReader = new MusicVideoNfoReader( new RecyclableMemoryStreamManager(), Substitute.For(), new NullLogger()); private MusicVideoNfoReader _musicVideoNfoReader; [Test] public async Task ParsingNfo_Should_Return_Error() { await using var stream = new MemoryStream(Encoding.UTF8.GetBytes(@"https://www.themoviedb.org/movie/11-star-wars")); Either result = await _musicVideoNfoReader.Read(stream); result.IsLeft.Should().BeTrue(); } [Test] public async Task MetadataNfo_Should_Return_Nfo() { await using var stream = new MemoryStream(Encoding.UTF8.GetBytes(@"")); Either result = await _musicVideoNfoReader.Read(stream); result.IsRight.Should().BeTrue(); } [Test] public async Task CombinationNfo_Should_Return_Nfo() { await using var stream = new MemoryStream( Encoding.UTF8.GetBytes( @" https://www.themoviedb.org/movie/11-star-wars")); Either result = await _musicVideoNfoReader.Read(stream); result.IsRight.Should().BeTrue(); } [Test] public async Task FullSample_Should_Return_Nfo() { await using var stream = new MemoryStream( Encoding.UTF8.GetBytes( NormalizeLineEndingsLF( @" Dancing Queen 0 0 -1 Arrival Dancing Queen est un des tubes emblématiques de l'ère disco produits par le groupe suédois ABBA en 1976. Ce tube connaît un regain de popularité en 1994 lors de la sortie de Priscilla, folle du désert, et fait « presque » partie de la distribution du film Muriel. Le groupe a également enregistré une version espagnole de ce titre, La reina del baile, pour le marché d'Amérique latine. On peut retrouver ces versions en espagnol des succès de ABBA sur l'abum Oro. Le 18 juin 1976, ABBA a interprété cette chanson lors d'un spectacle télévisé organisé en l'honneur du roi Charles XVI Gustave de Suède, qui venait de se marier. Le titre sera repris en 2011 par Glee dans la saison 2, épisode 20. 2 https://www.theaudiodb.com/images/media/album/thumb/arrival-4ee244732bbde.jpg https://assets.fanart.tv/fanart/music/d87e52c5-bb8d-4da8-b941-9f4928627dc8/albumcover/arrival-548ab7a698b49.jpg 0 Pop 1976 Director 1 Director 2 Director 3 Director 4 ABBA 0.000000 0.000000 2018-09-10 09:46:06 "))); Either result = await _musicVideoNfoReader.Read(stream); result.IsRight.Should().BeTrue(); foreach (MusicVideoNfo nfo in result.RightToSeq()) { nfo.Artists.Should().BeEquivalentTo(new List { "ABBA" }); nfo.Title.Should().Be("Dancing Queen"); nfo.Album.Should().Be("Arrival"); nfo.Plot.Should().Be( NormalizeLineEndingsLF( @"Dancing Queen est un des tubes emblématiques de l'ère disco produits par le groupe suédois ABBA en 1976. Ce tube connaît un regain de popularité en 1994 lors de la sortie de Priscilla, folle du désert, et fait « presque » partie de la distribution du film Muriel. Le groupe a également enregistré une version espagnole de ce titre, La reina del baile, pour le marché d'Amérique latine. On peut retrouver ces versions en espagnol des succès de ABBA sur l'abum Oro. Le 18 juin 1976, ABBA a interprété cette chanson lors d'un spectacle télévisé organisé en l'honneur du roi Charles XVI Gustave de Suède, qui venait de se marier. Le titre sera repris en 2011 par Glee dans la saison 2, épisode 20.")); nfo.Year.Should().Be(1976); nfo.Aired.IsNone.Should().BeTrue(); nfo.Genres.Should().BeEquivalentTo(new List { "Pop" }); nfo.Track.Should().Be(-1); } } [Test] public async Task MetadataNfo_With_Tags_Should_Return_Nfo() { await using var stream = new MemoryStream( Encoding.UTF8.GetBytes(@"Test Tag")); Either result = await _musicVideoNfoReader.Read(stream); result.IsRight.Should().BeTrue(); foreach (MusicVideoNfo nfo in result.RightToSeq()) { nfo.Tags.Should().BeEquivalentTo(new List { "Test Tag" }); } } [Test] public async Task MetadataNfo_With_Aired_Should_Return_Nfo() { await using var stream = new MemoryStream( Encoding.UTF8.GetBytes(@"2022-02-03")); Either result = await _musicVideoNfoReader.Read(stream); result.IsRight.Should().BeTrue(); foreach (MusicVideoNfo nfo in result.RightToSeq()) { nfo.Aired.IsSome.Should().BeTrue(); foreach (DateTime aired in nfo.Aired) { aired.Should().Be(new DateTime(2022, 02, 03)); } } } [Test] public async Task MetadataNfo_With_Studios_Should_Return_Nfo() { await using var stream = new MemoryStream( Encoding.UTF8.GetBytes(@"Test Studio")); Either result = await _musicVideoNfoReader.Read(stream); result.IsRight.Should().BeTrue(); foreach (MusicVideoNfo nfo in result.RightToSeq()) { nfo.Studios.Should().BeEquivalentTo(new List { "Test Studio" }); } } [Test] public async Task MetadataNfo_With_Directors_Should_Return_Nfo() { await using var stream = new MemoryStream( Encoding.UTF8.GetBytes(@"Test Director")); Either result = await _musicVideoNfoReader.Read(stream); result.IsRight.Should().BeTrue(); foreach (MusicVideoNfo nfo in result.RightToSeq()) { nfo.Directors.Should().BeEquivalentTo(new List { "Test Director" }); } } private static string NormalizeLineEndingsLF(string str) => str .Replace("\r\n", "\n") .Replace("\r", "\n"); }