using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using ErsatzTV.Core.Metadata.Nfo; using FluentAssertions; using NUnit.Framework; namespace ErsatzTV.Core.Tests.Metadata.Nfo { [TestFixture] public class EpisodeNfoReaderTests { [Test] public async Task One() { var reader = new EpisodeNfoReader(); var stream = new MemoryStream( Encoding.UTF8.GetBytes( @" ")); List result = await reader.Read(stream); result.Count.Should().Be(1); } [Test] public async Task Two() { var reader = new EpisodeNfoReader(); var stream = new MemoryStream( Encoding.UTF8.GetBytes( @" show episode-one 1 1 show episode-two 2 1 ")); List result = await reader.Read(stream); result.Count.Should().Be(2); result.All(nfo => nfo.ShowTitle == "show").Should().BeTrue(); result.All(nfo => nfo.Season == 1).Should().BeTrue(); result.Count(nfo => nfo.Title == "episode-one" && nfo.Episode == 1).Should().Be(1); result.Count(nfo => nfo.Title == "episode-two" && nfo.Episode == 2).Should().Be(1); } [Test] public async Task UniqueIds() { var reader = new EpisodeNfoReader(); var stream = new MemoryStream( Encoding.UTF8.GetBytes( @" 12345 tt54321 ")); List result = await reader.Read(stream); result.Count.Should().Be(1); result[0].UniqueIds.Count.Should().Be(2); result[0].UniqueIds.Count(id => id.Default && id.Type == "tvdb" && id.Guid == "12345").Should().Be(1); result[0].UniqueIds.Count(id => !id.Default && id.Type == "imdb" && id.Guid == "tt54321").Should().Be(1); } [Test] public async Task No_ContentRating() { var reader = new EpisodeNfoReader(); var stream = new MemoryStream( Encoding.UTF8.GetBytes( @" ")); List result = await reader.Read(stream); result.Count.Should().Be(1); result[0].ContentRating.Should().BeNullOrEmpty(); } [Test] public async Task ContentRating() { var reader = new EpisodeNfoReader(); var stream = new MemoryStream( Encoding.UTF8.GetBytes( @" US:Something US:Something / US:SomethingElse ")); List result = await reader.Read(stream); result.Count.Should().Be(2); result.Count(nfo => nfo.ContentRating == "US:Something").Should().Be(1); result.Count(nfo => nfo.ContentRating == "US:Something / US:SomethingElse").Should().Be(1); } [Test] public async Task No_Plot() { var reader = new EpisodeNfoReader(); var stream = new MemoryStream( Encoding.UTF8.GetBytes( @" ")); List result = await reader.Read(stream); result.Count.Should().Be(1); result[0].Plot.Should().BeNullOrEmpty(); } [Test] public async Task Plot() { var reader = new EpisodeNfoReader(); var stream = new MemoryStream( Encoding.UTF8.GetBytes( @" Some Plot ")); List result = await reader.Read(stream); result.Count.Should().Be(1); result[0].Plot.Should().Be("Some Plot"); } [Test] public async Task Actors() { var reader = new EpisodeNfoReader(); var stream = new MemoryStream( Encoding.UTF8.GetBytes( @" Name 1 Role 1 Thumb 1 Name 2 Role 2 Thumb 2 ")); List result = await reader.Read(stream); result.Count.Should().Be(1); result[0].Actors.Count.Should().Be(2); result[0].Actors.Count(a => a.Name == "Name 1" && a.Role == "Role 1" && a.Thumb == "Thumb 1") .Should().Be(1); result[0].Actors.Count(a => a.Name == "Name 2" && a.Role == "Role 2" && a.Thumb == "Thumb 2") .Should().Be(1); } [Test] public async Task Writers() { var reader = new EpisodeNfoReader(); var stream = new MemoryStream( Encoding.UTF8.GetBytes( @" Writer 1 Writer 2 Writer 3 ")); List result = await reader.Read(stream); result.Count.Should().Be(2); result.Count(nfo => nfo.Writers.Count == 1 && nfo.Writers[0] == "Writer 1").Should().Be(1); result.Count(nfo => nfo.Writers.Count == 2 && nfo.Writers[0] == "Writer 2" && nfo.Writers[1] == "Writer 3") .Should().Be(1); } [Test] public async Task Directors() { var reader = new EpisodeNfoReader(); var stream = new MemoryStream( Encoding.UTF8.GetBytes( @" Director 1 Director 2 Director 3 ")); List result = await reader.Read(stream); result.Count.Should().Be(2); result.Count(nfo => nfo.Directors.Count == 1 && nfo.Directors[0] == "Director 1").Should().Be(1); result.Count( nfo => nfo.Directors.Count == 2 && nfo.Directors[0] == "Director 2" && nfo.Directors[1] == "Director 3") .Should().Be(1); } } }